[nowość] Poznaj bezpieczeństwo Windows. Cześć pierwsza: usługi systemowe. Nowe, bezpłatne szkolenie od sekuraka!

Cacti: innowacyjna metoda ominięcia uwierzytelnienia oraz zdalne wykonanie kodu w OS

11 stycznia 2023, 09:51 | W biegu | komentarzy 7

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

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



Komentarze

  1. Chester

    s/prerekwizyt/warunek wstępny/
    Proszę oczy_kota_ze_shreka.jpg

    Odpowiedz
  2. M

    Cacti? Panie, ja nie jestem rolnikiem ;)

    Odpowiedz
  3. Kaktus

    X-Forwarded czy X-Forwarded-For ?

    Odpowiedz
    • 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’,
      );

      Odpowiedz
      • re

        No właśnie bo tych nagłówków jest więcej :)

        Odpowiedz
  4. Marik
    Odpowiedz
    • 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 :-)

      Odpowiedz

Odpowiedz