CVE-2022-46169
Açıklama
Cacti, kullanıcılar için sağlam ve genişletilebilir bir operasyonel izleme ve hata yönetimi çerçevesi sağlayan açık kaynaklı bir platformdur. Etkilenen sürümlerde, herhangi bir izlenen cihaz için belirli bir veri kaynağı seçilmişse, kimliği doğrulanmamış bir kullanıcının Cacti çalıştıran bir sunucuda rastgele kod yürütmesine izin veren bir komut enjeksiyonu zafiyeti bulunmaktadır. Zafiyet `remote_agent.php` dosyasında yer almaktadır. Bu dosyaya kimlik doğrulaması olmadan erişilebilir. Bu fonksiyon, istemcinin IP adresini `get_client_addr` aracılığıyla alır ve bu IP adresini `gethostbyaddr` aracılığıyla karşılık gelen ana bilgisayar adına (hostname) çözer. Bundan sonra, `poller` tablosunda, ana bilgisayar adının çözümlenen ana bilgisayar adına karşılık geldiği bir girdinin mevcut olduğu doğrulanır. Böyle bir girdi bulunursa, fonksiyon `true` döndürür ve istemci yetkilendirilir. Bu yetkilendirme, `get_client_addr` fonksiyonunun uygulanışı nedeniyle atlatılabilir. Fonksiyon `lib/functions.php` dosyasında tanımlanmıştır ve istemcinin IP adresini belirlemek için birkaç `$_SERVER` değişkenini kontrol eder. `HTTP_` ile başlayan değişkenler bir saldırgan tarafından rastgele ayarlanabilir. `poller` tablosunda Cacti çalıştıran sunucunun ana bilgisayar adına sahip varsayılan bir girdi olduğundan, bir saldırgan örneğin `Forwarded-For: <TARGETIP>` başlığını sağlayarak kimlik doğrulamasını atlayabilir. Bu şekilde `get_client_addr` fonksiyonu, Cacti çalıştıran sunucunun IP adresini döndürür. Ardından yapılan `gethostbyaddr` çağrısı, bu IP adresini sunucunun ana bilgisayar adına çözecek ve varsayılan girdi nedeniyle `poller` ana bilgisayar adı kontrolünden geçecektir. `remote_agent.php` dosyasının yetkilendirmesi atlatıldıktan sonra, bir saldırgan farklı eylemleri tetikleyebilir. Bu eylemlerden biri `polldata` olarak adlandırılır. Çağrılan `poll_for_data` fonksiyonu bazı istek parametrelerini alır ve veritabanından ilgili `poller_item` girdilerini yükler. Eğer bir `poller_item`'ın `action` değeri `POLLER_ACTION_SCRIPT_PHP` ise, bir PHP betiğini yürütmek için `proc_open` fonksiyonu kullanılır. Saldırgan tarafından kontrol edilen `$poller_id` parametresi, rastgele dizgelere izin veren `get_nfilter_request_var` fonksiyonu aracılığıyla alınır. Bu değişken daha sonra `proc_open`'a aktarılan dizgeye eklenir ve bu da bir komut enjeksiyonu zafiyetine yol açar. Örneğin `poller_id=;id` sağlanarak `id` komutu yürütülebilir. Savunmasız çağrıya ulaşmak için saldırganın, ilgili `poller_item`'ın `action` değerinin `POLLER_ACTION_SCRIPT_PHP` olarak ayarlandığı bir `host_id` ve `local_data_id` sağlaması gerekir. Bu kimliklerin her ikisi de (`host_id` ve `local_data_id`) kolayca kaba kuvvet (bruteforce) yöntemiyle bulunabilir. Tek gereksinim, `POLLER_ACTION_SCRIPT_PHP` eylemine sahip bir `poller_item`'ın mevcut olmasıdır. Bu durum, söz konusu eylem `Device - Uptime` veya `Device - Polling Time` gibi bazı önceden tanımlanmış şablonlar tarafından eklendiğinden, üretim ortamındaki bir örnekte oldukça olasıdır. Bu komut enjeksiyonu zafiyeti, `action` tipi `POLLER_ACTION_SCRIPT_PHP` (`2`) olan bir `poller_item` yapılandırılmışsa, kimliği doğrulanmamış bir kullanıcının rastgele komutlar yürütmesine izin verir. Yetki atlatma işlemi, bir saldırganın `get_client_addr` (`lib/functions.php` dosyası) fonksiyonuna rastgele bir IP adresi döndürtmesi engellenerek önlenmelidir. Bu, `HTTP_...` `$_SERVER` değişkenlerinin dikkate alınmamasıyla yapılabilir. Bunların uyumluluk nedenleriyle tutulması gerekiyorsa, en azından Cacti çalıştıran sunucunun IP adresinin taklit edilmesi önlenmelidir. Bu zafiyet hem 1.2.x hem de 1.3.x sürüm dallarında giderilmiştir ve yamayı içeren ilk sürüm `1.2.23`'tür.
Nasıl düzeltilir
Üreticinin yayımladığı güncellemeleri uygulayın.
CISA son tarihi: 9 Mar 2023- cacti cacti1.2.23 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| cacti cacti | v < 1.2.23 | 1.2.23 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.