Windows Defender arbitrary file deletion: CVE-2020-1170

Cześć 🙂 Chciałbym dzisiaj opisać pewną ciekawą podatność, która pozwala na usuwanie plików z uprawnieniami „Trusted Installer”. Pewnie nie wszyscy kojarzą ten obiekt, ale spróbujcie usunąć pewne kluczowe dla systemu Windows zasoby posiadając tylko i wyłącznie uprawnienia Administratora – istnieje duża szansa, że taka próba zostanie zablokowana przez WRP – Windows Resource Protection, a z błędu odczytacie, że potrzebujecie uprawnień właśnie Trusted Installera.

Za chwilę postaramy się wykorzystać ciekawą lukę w oprogramowaniu Windows Defender, która pozwoli nam na usuwanie dowolnych zasobów na komputerze z wykorzystaniem uprawnień zwykłego użytkownika.

Wspomniana luka powstaje przy próbie rotowania logów Windows Defendera, które znajdują się w katalogu C:\Windows\Temp pod nazwą MpCmdRun.log. W momencie, gdy oryginalny plik logów osiąga rozmiar 16MB ze starego pliku MpCmdRun.log powstaje plik MpCmdRun.log.bak, a nowe logi zapisywane są w czystym pliku, bez końcówki .bak. W momencie gdy MpCmdRun.log znów osiągnie 16 778 kB, plik .bak jest po prostu usuwany, a na jego miejsce wchodzi MpCmdRun.log. Dodajmy, że możemy dowolnie nadpisywać plik MpCmdRun.log powershellowym poleceniem Update-MpSignature. Operację tę możemy wykonywać z uprawnieniami zwykłego użytkownika.  Przyjrzyjmy się jak to wygląda w szczegółach.

Uwaga: Na potrzeby nauki i tego wpisu ułatwiam sobie pracę i sztucznie tworzę ww. logi, w gotowych rozmiarach. Zapętlona instrukcja Update-MpSignature osiągnęłaby ten sam efekt w kilkadziesiąt minut.

W celu dokładnego prześledzenia co dokładnie dzieję się z plikami w momencie rotacji, wykorzystamy narzędzie Process Monitor z paczki Sysinternals. Nie da się komfortowo korzystać z Process Monitora bez nałożenia odpowiednich filtrów na wychwycone zdarzenia, więc przyjmijmy następującą konfigurację filtra:

Po uruchomieniu polecenia Update-MpSignature możemy zauważyć ciekawy ciąg zdarzeń.

Aplikacja najpierw odpytuje plik MpCmdRun.log o rozmiar („QueryStandardInformation), następnie usuwa stary plik logów MpCmdRun.log.bak (flag FILE_DISPOSITION_DELETE) , aby w końcu do starych logów dołożyć końcówkę „.bak”.  A co jeżeli utworzymy folder o nazwie MpCmdRun.log.bak i utworzymy punkt do zamontowania (ang. NTFS junction) tego katalogu w dowolnym, innym miejscu? Utwórzmy z uprawnieniami administratora folder u użytkownika Piotr na pulpicie.

Dodajmy do niego jeszcze testowy plik zawierający w sobie napis „test”.

Mountpoint (NTFS junction) możemy utworzyć na dwa sposoby. Możemy użyć wbudowanego polecenia mklink lub skorzystać z biblioteki NtApiDotNet.dll.

Okej. Widzimy, że efekt jest taki sam 😊 Na przykładzie wyżej widać, że utworzyliśmy NTFS junction z  C:\Windows\Temp\MpCmdRun.log.bak do C:\Users\piotr\Desktop\mountpoint. Utworzenie takie połączenia nie wymaga od nas żadnych szczególnych uprawnień. Sprawdźmy teraz co się stanie z wyżej wymienionymi folderami (i plikiem test.txt!) gdy dokona się rotacja logów. Po uruchomieniu polecenia Update-MpSignature  obserwujemy następującą sekwencję zdarzeń w „Process Monitorze”.

Widzimy, że NTFS junction działa prawidłowo i folder MpCmdRun.log.bak jest rozwiązywany jako C:\Users\piotr\Desktop\mountpoint. Następnie usuwana jest zawartość folderu, link do C:\Users\piotr\Desktop\mountpoint (C:\Windows\Temp\MpCmdRun.log.bak) jest usuwany, a jego miejsca zajmuje dotychczasowy plik logów (MpCmdRun.log) z dopisaną końcówką „.bak”.

Wszystkie te operacje mają miejsce z uprawnieniami użytkownika System, z ustawioną flagą „SeRestorePrivilege” [1]. Sprawdzić to możemy za pomocą programu „Process Explorer” dostępnego w pakiecie „Sysinternals”. Uruchamiając polecenie Update-MpSignature możemy przeanalizować uprawnienia programu „MpCmdRun.exe” dziedziczone od rodzica „MsMpEng.exe”.

Okej. Widzimy, że w prosty sposób możemy usuwać zawartości wskazanych przez nas folderów z uprawnieniami użytkownika NT Authority\System, z pominięciem ochrony zapewnianej przez TrustedInstaller. To już bardzo dużo. Możemy w ten sposób usuwać logi, ważne ustawienia systemu, pliki konfiguracyjne.  

Skoro możemy dowolnie usuwać pliki z dysku, to może są gdzieś jakieś biblioteki, które nieodnalezione we właściwym miejscu, są szukane w miejscach do których prawo zapisu ma zwykły user?  W następnym wpisie postaram się połączyć wyżej opisaną podatność z inną i przeprowadzić pełnoprawną eskalację uprawnień.

Dodaj komentarz


The reCAPTCHA verification period has expired. Please reload the page.