Przedwczoraj do sieci wyciekł exploit 0-day (potoczna nazwa: „Nightmare”) na odkrytą niedawno podatność Microsoft o numerze CVE-2021-1675. Udało nam się go również przetestować.
Szczegóły techniczne i exploit typu proof-of-concept (PoC) zostały przypadkowo ujawnione w związku z niezałataną obecnie luką w systemie Windows, która umożliwia zdalne wykonanie kodu (ang. Remote Command Execution).
Pomimo konieczności uwierzytelniania (wymagane poświadczenia zwykłego użytkownika Windows lub Active Directory), problemu jest krytyczny, ponieważ cyberprzestępcy mogą wykorzystać go do przejęcia kontrolera domeny AD, aby łatwiej wdrożyć złośliwe oprogramowania w sieci firmowej.


Problemy z usługą PrintSpooler

Odkryta luka dotyczy bufora wydruku (spoolsv.exe), usługi systemu Windows, która służy jako ogólny uniwersalny interfejs między systemem operacyjnym Windows, aplikacjami i drukarkami lokalnymi lub sieciowymi, umożliwiając twórcom aplikacji łatwe inicjowanie zadań drukowania.

Usługa ta jest dostępna w systemie Windows od lat 90-tych i jest jednym z najbardziej wadliwych procesów systemu operacyjnego, w której na przestrzeni lat wykryto wiele luk, w tym błędy takie jak PrintDemon, FaxHell, Evil Printer, CVE-2020-1337, a nawet niektóre 0-day’e używane w atakach Stuxnet. O podatności o nazwie „PrintDemon” pisaliśmy tutaj oraz o przejęciu kontrolera domeny przy wykorzystaniu SprintSpooler – tutaj.

CVE-2021-1675, najnowszy z tej długiej linii błędów bufora wydruku, został odkryty przez badaczy bezpieczeństwa z Tencent Security, AFINE i NSFOCUS na początku tego roku.


Zdalne uruchomienie kodu

Błąd został początkowo sklasyfikowany jako nieistotna luka umożliwiająca podniesienie uprawnień, która pozwalała atakującym na uzyskanie uprawnień administratora, ale w zeszłym tygodniu Microsoft zaktualizował opis błędu, aby sklasyfikować CVE-2021-1675 jako problem dotyczący zdalnego uruchomienia kodu, który może być wykorzystywany do umożliwienia atakującym przejęcia pełnej kontroli nad niezałatanymi systemami Windows.

Początkowo dla CVE-2021-1675 nie opublikowano żadnego technicznego opisu ani kodu weryfikującego koncepcję, co oznacza, że osoby atakujące, które chciały wykorzystać błąd, musiały same zbadać kod łatki i stworzyć exploita, jeśli chciały zintegrować ten błąd w ich atakach.


Exploit usunięty z Internetu

W zeszłym tygodniu chińska firma zajmująca się bezpieczeństwem QiAnXin po raz pierwszy opublikowała niskiej jakości GIF pokazujący exploita dla błędu CVE-2021-1675, ale firma nie ujawniła żadnych szczegółów technicznych ani działającego PoC, aby dać użytkownikom więcej czasu na aktualizacje zabezpieczeń z tego miesiąca.

Jednak, dogłębny opis techniczny i w pełni działający exploit PoC zostały udostępnione na GitHub 29 czerwca br. Repozytorium GitHub zostało wyłączone po kilku godzinach, ale wcześniej zostało sklonowane przez kilku innych użytkowników.


Szczegóły techniczne

Opracowany przez trzech analityków z chińskiej firmy zajmującej się bezpieczeństwem Sangfor, artykuł, którego nie będziemy tutaj linkować (zainteresowani mogą go jeszcze znaleźć w Google cache), szczegółowo opisuje, w jaki sposób trio odkryło błąd niezależnie od zespołów, które zgłosiły lukę Microsoftowi.

„Znaleźliśmy również ten błąd wcześniej i mamy nadzieję, że utrzymamy go w tajemnicy, aby wziąć udział w Tianfu Cup [konkursie hakerskim]”, powiedział zespół chińskich hakerów.

Badacze powiedzieli, że odkąd QiAnXin opublikował wideo z exploitem CVE-2021-1675, postanowili w rezultacie opublikować pełny opis i PoC.

Jednak zespół pożałował swojej decyzji kilka godzin później, po tym, jak zdał sobie sprawę, że zdradzają wszystkie szczegóły rozmowy, którą zaplanowali na konferencję bezpieczeństwa Black Hat USA 2021 w tym roku.

Zespół zdjął repozytorium na GitHub, ale do tego czasu exploit i zapis CVE-2021-1675 zostały już sklonowane.

Źródła i PoC są obecnie udostępniane w zamkniętych społecznościach infosec i oczekuje się, że w najbliższych dniach ponownie wejdą do domeny publicznej.

Oczywiście znaleźliśmy kody źródłowe exploit’a i udało nam się również go przetestować. Działa 🙂

Według twórców exploita błąd tkwi w funkcji ”ValidateObjectAccess” realizującej kontrolę bezpieczeństwa dla usługi buforowania:

„Uwierzytelniony do systemu atakujący może ominąć kod biblioteki RpcAddPrinterDriver i dzięki temu może na uprawnieniach SYSTEM zainstalować złośliwy sterownik na serwerze wydruku. Zgodnie z tym, co twierdzi Microsoft w bazie msdn klient potrzebuje uprawnienia SeLoadDriverPrivilege do wywołania RPC. Jednak to nieprawda.”

“W liniach 19 i 20 argument a4 jest kontrolowany przez użytkownika. Tak więc normalny użytkownik może ominąć kontrolę bezpieczeństwa i dodać sterownik. Jeśli jesteśmy w domenie, zwykły użytkownik domeny może połączyć się z usługą buforowania na kontrolerze i zainstalować tam sterownik. Wtedy będzie mógł w pełni kontrolować Domenę.”

Uruchomienia exploita na systemie Windows:

Skutek wykonania exploit widoczny w narzędziu Proces Monitorz’e – biblioteka MyExploit.dll została załadowana do procesu spoolsv.exe:


Scenariusz POC

Benjamin Delpy, twórca narzędzia Mimikatz, przeprowadził test zdalnego uruchomienia wykonania kodu z najwyższymi uprawnieniami na w pełni załatanym systemie! Kod exploit’a skompilował do najnowszej wersji narzędzia Mimikatz (30 czerwca) do modułu „printnightmare”, którego wynik uruchomienia możecie zobaczyć na poniższym ekranie.

Chociaż jego test był również na kontrolerze domeny, Delpy stwierdził, że ten sam wynik jest osiągany „zdalnie lub lokalnie na wszystkich systemach Windows po protokole RPC oraz które mają włączoną usługę bufora wydruku”.

Delpy nakręcił film pokazujący, że jego system testowy z najnowszymi aktualizacjami nie powstrzymał exploita PrintNightmare:


Zalecania dla firm

Ponieważ luka CVE-2021-1675, którą zespół Sangfor nazwał PrintNightmare, została zmieniona przez Microsoft w wektor ataku RCE, a kod exploita PoC jest teraz w domenie publicznej, firmom zaleca się jak najszybsze zaktualizowanie swoich systemów Windows. Przy czym pamiętać należy, że wydana przez Microsoft 8 czerwca poprawka dla CVE-2021-1675 łata tylko wektor ataku podniesienia uprawnień, ale nie RCE, ponieważ wydaje się, że Microsoft dołączył dwie różne luki w zabezpieczeniach w ramach tego samego identyfikatora CVE. W wyniku tego odkrycia łatanie systemów Windows nie chroni ich przed atakami, a zamiast tego zaleca się administratorom systemu wyłączenie usługi Bufor wydruku, zwłaszcza na serwerach Windows działających jako kontrolery domeny, z których atakujący mogą przejść do całych sieci wewnętrznych.

Należy zauważyć, że luka dotyczy wszystkich dostępnych obecnie wersji systemu operacyjnego Windows, a nawet może mieć wpływ na przestarzałe wersje systemu Windows, takie jak XP i Vista.

Ponieważ błędy bufora wydruku były wykorzystywane w atakach w przeszłości, istnieje duże prawdopodobieństwo, że ten błąd również zostanie nadużyty, zwłaszcza że jest to RCE, klasa podatności ceniona przez większość atakujących.

Grzegorz Tworek (pozdrawiamy) opublikował skrypt w Powershell na Github o nazwie „StopAndDisableDefaultSpoolers.ps1” pomagający wykryć włączoną usługę PrintSpooler na serwerach i ją wyłączyć (disable):

Ze swojej strony dodamy, że warto monitorować biblioteki jakie zostają ładowane do procesu „spoolsv.exe” (proces bufora wydruku). Można to wykonać za darmo narzędziem SYSMON oraz komercyjnymi narzędziami np. EDR.

Podziel się z innymi tym artykułem!