Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Cacti: innowacyjna metoda ominięcia uwierzytelnienia oraz zdalne wykonanie kodu w OS
Cacti chyba najlepsze lata ma za sobą (ktoś z Was używa?)…
…jednak warto przyjrzeć się podatnościom, które właśnie zostały ujawnione.
1. Po pierwsze do serwera Cacti mogą podłączyć się tylko „zaufani” klienci.
cacti/remote_agent.php
if (!remote_client_authorized()) {
print 'FATAL: You are not authorized to use this service’;
exit;
}
Jak sfałszować swój adres IP (np. na 8.8.8.8)? W przypadku podatnej wersji Cacti wystarczy użyć nagłówka X-Forwarded: 8.8.8.8
Ale w takim razie czy trzeba znać adresy IP (autoryzowanych) klientów Cacti? Niekoniecznie. Można użyć X-Forwarded: tutaj_adres_ip_atakowanego_serwera_cacti
Swój adres IP serwer Cacti ma domyślnie wpisany na whitelistę, więc otrzymujemy nieuwierzytelniony dostęp do cacti/remote_agent.php
2. Dalej atakujący może użyć wstrzyknięcia w OS w przekazanym przez siebie parametrze poller_id
Ostatnia linijka poniżej zawiera wywołanie proc_open (czyli po prostu PHPowe odpalenie polecenia w OS). Jak też widać, możemy do proc_open wstrzyknąć swoje polecenie (parametr $poller_id bez żadnej walidacji). np. poller_id=;touch /tmp/poc;
Jedyny dodatkowy prerekwizyt jest taki, aby istniała gdzieś w konfiguracji Cacti akcja typu POLLER_ACTION_SCRIPT_PHP
Ale badacze wskazują, że jest to dość częsta konfiguracja:
This means that attackers can leverage the poller_id
parameter to inject an arbitrary command when an item with the POLLER_ACTION_SCRIPT_PHP
action exists. This is very likely on a productive instance because this action is added by some predefined templates like "Device - Uptime"
or "Device - Polling Time"
.
Podatności zostały załatane w grudniu 2022r.
~Michał Sajdak
s/prerekwizyt/warunek wstępny/
Proszę oczy_kota_ze_shreka.jpg
Cacti? Panie, ja nie jestem rolnikiem ;)
X-Forwarded czy X-Forwarded-For ?
W PoCu wspominają właśnie o X-Forwarded
Ale w kodzie są też wersje z For i bez Xów. Może działa w każdym z tych wariantów (do przeanalizowania patch):
$http_addr_headers = array(
…
'HTTP_X_FORWARDED’,
'HTTP_X_FORWARDED_FOR’,
'HTTP_X_CLUSTER_CLIENT_IP’,
'HTTP_FORWARDED_FOR’,
'HTTP_FORWARDED’,
'HTTP_CLIENT_IP’,
'REMOTE_ADDR’,
);
No właśnie bo tych nagłówków jest więcej :)
Może czegoś nie kumam ale o takiej metodzie „fałszowania” ip słyszałem już lata temu, jaka tam innowacyjna?
o https://portswigger.net/kb/issues/00400110_spoofable-client-ip-address
a) cały czas jest to dość mało znane
b) Akurat tego nagłówka, o którym mowa w newsie o cacti nie ma w opisie od portswiggera :-)