Tinklaraštis

CVE-2026-41089: Netlogon buferio perpildymas — vienas UDP paketas pargriauna visą domeną

windows-netlogon-CVE-2026-41089
Active Directory / CVE / Saugumas / Windows Server

CVE-2026-41089: Netlogon buferio perpildymas — vienas UDP paketas pargriauna visą domeną

Sekmadienis, trečia nakties. Domeno valdiklyje krenta LSASS. Autentifikacija, Kerberos, NTLM, grupės politikos — viskas sustoja. Niekas negali prisijungti. Po minutės valdiklis persikrauna pats. Dar nebaigėte suprasti kas nutiko — krenta antrasis. Ne aparatūros gedimas. CVE-2026-41089.

Stack-based buffer overflow Windows Netlogon tarnyboje — CVSS 9.8, CWE-121. Neautentifikuotas užpuolikas siunčia vieną UDP paketą į 389 prievadą ir LSASS dingsta. Visas domenas stovi iki perkrovimo. Microsoft išleido pataisą gegužės 12 d. (KB5089549, gegužės Patch Tuesday). Belgijos kibernetinio saugumo centras (CCB) gegužės 29 d. patvirtino aktyvų išnaudojimą.

Microsoft CVSS tai vadina RCE — C:H/I:H/A:H. Aretiq AI techninė analizė, paskelbta kitą dieną po pataiso, atskleidžia tikslesnį vaizdą: dėl perpildymo mechanizmo ypatumų iki tikro kodo vykdymo daugelyje konfigūracijų nepasiekiama, nes išlindę baitai — tai paties serverio DNS duomenys, ne užpuoliko. Tačiau LSASS vis tiek krenta nuo vieno paketo. Domeno valdikliui tai yra tas pats. Kai vienas paketas sustabdo autentifikaciją visame tinkle, skirtumas tarp DoS ir RCE tampa antraeilis.

KAS YRA NETLOGON

Jei domeno valdiklis jums kada nors krito darbo valandomis — žinote kas nutinka toliau. Per kelias minutes helpdesk eilė perpildyta. „Negaliu prisijungti.” „Nieko neatsidaro.” „Paštas neveikia.” Netlogon nėra komponentas, kurį galima išjungti ir pamiršti — tai mechanizmas, ant kurio laikosi visas domenas: saugus kanalas tarp mašinų ir valdiklių, mašinų paskyrų slaptažodžių sinchronizacija, pasitikėjimo ryšiai tarp domenų. Kai jis krenta — domenas neslopsta palaipsniui, jis tiesiog sustoja.

Pažeidžiama dalis — DC Locator. Prieš prisijungdamas prie domeno, klientas turi rasti valdiklį. Jis siunčia CLDAP užklausą (Connectionless LDAP, UDP prievadas 389) su domeno pavadinimu, vartotojo vardu ir versijos žyme (NtVer). DC atsako savo duomenimis: serverio pavadinimas, domeno ir miško pavadinimai DNS formatu, GUID. Autentifikacijos čia nereikalaujama — klientas dar neturi kredencialų, jis tik ieško kur autentifikuotis. Tai veikia taip pagal dizainą. Ir kaip tik dėl to šis kodas priima užklausas iš bet ko, be jokio tikrinimo.

KAIP VEIKIA PAŽEIDŽIAMUMAS

Gavęs CLDAP DC locator ping, valdiklis formuoja atsakymą per funkciją BuildSamLogonResponse faile netlogon.dll. Ji rašo į fiksuotą 528 baitų steko buferį: serverio pavadinimą, vartotojo vardą iš užklausos, domeno pavadinimą, du GUID, po to — miško, domeno ir kompiuterio DNS pavadinimus suspaustame formate.

Rašymą atlieka pagalbinė funkcija NetpLogonPutUnicodeString. Trys argumentai: šaltinio rodyklė, maksimalus simbolių skaičius, kursorius į išvesties buferį. Ketvirtojo argumento nėra. Buferio dydis niekur neperduodamas. Funkcija kopijuoja simbolius cikle iki limito — ir niekada netikrina, ar jau peržengė buferio ribą. Klasikinis CWE-120.

BuildSamLogonResponse iškviečia ją tris kartus su užkoduotais limitais: 36 simbolių serverio pavadinimui, 130 — vartotojo vardui (imamas tiesiogiai iš užpuoliko užklausos), 32 — domeno pavadinimui. Po to — GUID ir DNS pavadinimai per NlpUtf8ToCutf8. Tų DNS pavadinimų ilgis priklauso nuo serverio konfigūracijos.

Štai kur slypi gudrybė. Užpuolikas valdo User lauką — iki 130 wide simbolių, tai yra iki 260 baitų. Didžiausias vienas paketo komponentas. Jis užpildo buferio vidurį ir fiziškai pastumia serverio DNS pavadinimus link pabaigos. Baitai, išlindę už 528 baitų ribos — tai paties DC DNS duomenys. Užpuolikas valdo pastūmimo atstumą, bet ne tai, kas tiksliai perrašo atmintį. Todėl pažeidžiamumas priklauso nuo DNS domeno ilgio: trumpas domenas kaip example.com — duomenys telpa, perpildymo nėra. Ilgas — dept.division.engineering.enterprise.corporation.local su 63 simbolių hostname — netelpa, valdiklis krenta.

KAIP TAI IŠNAUDOJAMA

Reikia suformuoti CLDAP SearchRequest ir išsiųsti į UDP 389 tiksliniam valdikliui. Filtre — DnsDomain su domeno pavadinimu, User su 130 simbolių naudingąja apkrova, NtVer reikšme 0x00000002. Pastarasis svarbus: 2–3 bitai turi būti nulio, kad kodas eitų per BuildSamLogonResponse, o ne per BuildSamLogonResponseEx. Teisėti klientai beveik visada naudoja NtVer=6 — todėl NtVer=2 pats savaime yra atakos signalas aptikimo sistemose.

Visas kelias nuo paketo iki pažeidžiamos funkcijos nueinama prieš bet kokį kredencialų tikrinimą. DC Locator pagal prigimtį veikia iki autentifikacijos — čia nėra ko blokuoti.

Perpildymui įvykus, sugadinamas GS stack cookie funkcijoje BuildSamLogonResponse. Windows aptinka, iškviečia __fastfail(FAST_FAIL_STACK_COOKIE_CHECK_FAILURE), LSASS baigiamas su kodu 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN). Be atsigavimo — sistema persikrauna.

KAS NUTINKA TOLIAU — PRIKLAUSO NUO KONFIGŪRACIJOS

Užpuolikas išsiunčia paketą ir gauna užklausos pasibaigimo laiką. DC pusėje LSASS dingo — Kerberos, NTLM, Netlogon saugus kanalas, grupės politikos. Nauji prisijungimai neįmanomi. Aktyvios sesijos nutrūksta. Visos tarnybos, kurioms reikia Kerberos bilietų, netenka prieigos.

Keli valdikliai suteikia laiko — klientai persijungia. Kol užpuolikas nepargriauna ir sekančio. Vienas DC — visiškas domeno sustojimas iki perkrovimo. Keli DC — metodiškas nuoseklus griovimas, po vieną paketą kiekvienam, kol nieko nelieka. Tai apgalvotas sustained denial of service prieš tapatybės infrastruktūrą.

Tikrasis kodo vykdymas šiuo perpildymu pasiekti labai mažai tikėtina. Išlindę baitai — serverio DNS duomenys, ne užpuoliko. GS cookie sugadinamas jau nuo 2 baitų perpildymo, tačiau funkcijos NlGetLocalPingResponse grąžinimo adresas yra 72 baitais nuo buferio pabaigos. Maksimalus išmatuotas perpildymas su 63 simbolių DNS žyme — apie 51 baitas. Net blogiausios konfigūracijos atveju iki grąžinimo adreso trūksta 21 baito.

REALI ATAKOS GRANDINĖ

Užpuolikui reikia pėdsakų tinkle, iš kurio pasiekiamas UDP 389 valdikliuose — pažeista darbo stotis, svečių VLAN be tinkamos segmentacijos, VPN tunelis. Toliau — vienas paketas.

DC krenta per kelias sekundes. Stebėjimo sistema užfiksuoja netikėtą perkrovimą — bet kol budintis administratorius atidaro nešiojamąjį kompiuterį, užpuolikas jau dirba su antruoju valdikliu. Paskui su trečiuoju. Tinkle be segmentacijos, kur UDP 389 pasiekiamas iš bet kur, visi DC sugriaunami nuosekliai per kelias minutes. Kol jie po vieną persikrauna, niekas domene negali autentifikuotis: nei vartotojai, nei tarnybos, nei skriptai su Kerberos bilietais. Ransomware grupės diegia šifratorius kaip tik į šį chaosą — kai administratoriai negali normaliai prieiti prie infrastruktūros ir kiekvienas žingsnis reikalauja aiškinti kolegai kodėl jo prisijungimas neveikia.

ZeroLogon (CVE-2020-1472) vystėsi lygiai taip pat — ta pati tarnyba, ta pati neautentifikuota ataka, tas pats greitas ginklavimas po atskleidimo. CCB tai prisiminė leisdamas skubų įspėjimą.

CHRONOLOGIJA

2026 m. gegužės 12 d., Patch Tuesday. Microsoft išleidžia KB5089549, MSRC pažymi: neišnaudojama, neviešai atskleista, tikimybė „maža”. Tą pačią dieną Aretiq AI paskelbia pilną šakninių priežasčių analizę — pažeidžiama funkcija, SHA256 maiša, proof-of-concept kodas. Pataisa dar nebaigė sklisti po įmonių WSUS serverius.

Paskui — 17 dienų tylos. Iš išorės. Gegužės 29 d. CCB atnaujina advisory: aktyviai išnaudojama, reikia skubiai pataisyti. Birželio 1 d. — atskiras skubus įspėjimas. Kas atakuoja — viešai neatskleista.

Septyniolika dienų nuo pataiso iki patvirtinto išnaudojimo — tai jau norma. AI įrankiai binarinių pataisų analizei atkuria pažeidžiamą kodo kelią per kelias valandas. Kol jūsų change management procesas tvirtina DC pataisymo langą — kažkas jau turi veikiantį išnaudojimą. Tai ne priežastis panikuoti. Tai priežastis turėti parengtą, išbandytą DC pataisymo procedūrą dar iki kito Netlogon CVE pasirodymo.

KODĖL TAI SVARBU

Domeno valdiklis — ne eilinis serveris. Tai visos organizacijos tapatybės plokštuma. Patikimas gedimas pareikalavus — to pakanka. Kol DC stovi, autentifikacija sulaužyta visiems. Didelėje aplinkoje tai reiškia šimtus ar tūkstančius darbuotojų, negalinčių dirbti, ir viską kas priklauso nuo AD.

Linux administratoriai mišriose aplinkose taip pat paveikti. Jei Linux serveriai autentifikuojasi domene per SSSD arba winbind — kritęs DC sustabdo ir juos. Tarnybos, gaunančios Kerberos bilietus paleidimo metu, nebeveikia. PAM prisijungimai per Kerberos nustoja leisti vartotojus.

Prieš nuspręsdami, ar skubėti: trumpi domenų pavadinimai gali visai nebūti pažeidžiami. corp.local tipo domenas gali neperžengti 528 baitų ribos. Rizikos zonoje — gilios subdomeno hierarchijos: servers.eu.division.company.internal ir panašios. Suskaičiuokite savo valdiklio DNS domeno pavadinimo simbolius. Daugiau nei 50, dar ir ilgas hostname — KB5089549 reikalingas dabar, ne per kitą ciklą.

ATNAUJINIMAS

Pataisa — KB5089549, Windows Server 2025 versija 26100.32860. Visos kitos palaikomos Server versijos gavo pataisas tame pačiame gegužės Patch Tuesday. End-of-life sistemoms (Server 2008 R2, 2012, 2012 R2) — Acros Security išleido mikropataisa per 0patch.

Patikrinti netlogon.dll versiją Server 2025:

Get-Item C:\Windows\System32\netlogon.dll | Select-Object -ExpandProperty VersionInfo | Select FileVersion, ProductVersion

Pažeidžiama versija: 10.0.26100.32684 (SHA256: C1F5FA84AE46E1A39592284EBB354BD055743D72AB417C1B90A7D99383289594). Pataisyta versija turi eilutę Feature_404993339 ir naudoja RtlStringCbCopyExW vietoj nesaugios kopijos.

Patikrinti ar pataisa įdiegta:

Get-HotFix -Id KB5089549

Rezultatas — pataisa įdiegta. Tuščias išvedimas — sistema pažeidžiama.

Jason Kikta iš Automox tai suformulavo taikliai: „half-patched forests are not a defensible state for a pre-auth DC bug.” Visi valdikliai turi būti pataisyti per vieną langą. Vienas nepataisytas DC — ir užpuolikui to pakanka.

Jei pataisyti iš karto neįmanoma — apribokite prieigą prie UDP 389 tinklo lygiu. Perimetro ribose blokuokite CLDAP srautą iš išorinių ir nepatikimų segmentų. Tinkle viduje — segmentacija: darbo stotys neturėtų tiesiogiai pasiekti UDP 389 DC. Tai neužblokuoja vektoriaus visiškai, nes CLDAP reikalingas DC Locator, tačiau žymiai susiaurina atakos paviršių.

Stebėkite: netikėtus Netlogon perkrovimus, CLDAP srautą iš neįprastų šaltinių, autentifikacijos klaidas iš karto po įtartinos veiklos valdiklyje.

IŠVADOS

Pavojingiausi pažeidžiamumai nėra retose trečiųjų šalių bibliotekose — jie gyvena infrastruktūroje, kurią kiekvienas Windows tinklas naudoja dešimtmečius ir nustojo apie ją galvoti. Netlogon yra kiekviename domene. UDP 389 atidarytas kiekviename DC. Ir tai ne pirmas kartas, kai Netlogon tapo įėjimo tašku.

Jei turite domeno valdiklių — įdiekite KB5089549, patikrinkite DNS domeno ilgį, užrakinkite UDP 389 kur galima, sukonfigūruokite įspėjimus dėl LSASS perkrovimų. Išnaudojimas jau vyksta. „Pataisysime atidžiai” — gerai. Tik atidžiai nereiškia lėtai.

Leave your thought here

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *