- Sam Curry, ev ağından gönderilen bir HTTP isteğinin 10 saniye sonra bir DigitalOcean IP’sinden aynen yeniden oynatıldığını fark etti; Cox Panoramic Wifi ağ geçidini değiştirdikten sonra sorun ortadan kalkınca eski modemin ele geçirilmiş olabileceğinden şüphelendi
- Yeniden oynatılan trafiğin IP’si
159.65.76.209, Adidas ile ilişkili alan adları, ISG Latam kimlik avı alan adları ve algoritmik olarak oluşturulmuş gibi görünen C&C alan adlarıyla bağlantılıydı; ancak gerçek ele geçirme yolu kesinleşmedi - 2024’te Cox Business portalının analizi sırasında
/api/cbma/arkasında Spring tabanlı API’ler ve Swagger dokümantasyonu bulundu; yaklaşık 700 API içinde bazıları kimlik doğrulama hatası ile200 OKyanıtını dönüşümlü vererek yetki atlama sorunu gösterdi - Bu yetki atlama sayesinde müşteri arama, hesap PII’sini görüntüleme, cihaz MAC adresi sorgulama, modem IP’si sorgulama, Cox Business hesaplarını okuma/yazma ve WiFi SSID’sini değiştirme gibi cihaz yapılandırması değişiklikleri yapılabiliyordu; PoC’de kendi SSID’si
Curryolarak değişti - Cox, bildirimden sonraki 6 saat içinde açıkta kalan API’leri kapattı ve ertesi gün sorun yeniden üretilemez hale geldi; ilgili API servisinin 2023’te başlatıldığını, 2021’deki modem ele geçirilmesiyle ayrı olduğunu ve geçmişte kötüye kullanım geçmişi olmadığını açıkladı
Ev modeminden başlayan garip trafik
- Ev ağında blind XXE açığını test etmek için bir AWS instance’ında basit bir Python HTTP sunucusu çalıştırıp dış istek alınıp alınmadığını kontrol etti
- Ev bilgisayarından
curlile gönderilen istek normal şekilde kaydedildikten hemen sonra, bilinmeyen IP159.65.76.209aynı yolu 10 saniye sonra tekrar istedi - iPhone Safari’den farklı bir yol istendiğinde de aynı IP aynı isteği yeniden oynattı; bu, belirli bir bilgisayarın değil ev ağının tüm trafiğinin gözlemlendiği bir durum gibi görünüyordu
- Yeni AWS instance’ı ve Nginx’te, ardından GCP instance’ında da aynı durum tekrarlandığı için AWS’in ele geçirilmiş olma ihtimali elendi
- Eski Cox Panoramic Wifi ağ geçidi mağazaya iade edilip yeni cihazla değiştirildikten sonra yeniden oynatılan trafik kayboldu ve loglarda artık “başka IP” görünmedi
159.65.76.209 araştırması
- Söz konusu IP’nin DigitalOcean’a ait olduğu ve Cox ISP adresi olmadığı doğrulandı
- VirusTotal kayıtlarında yakın zamanda bağlandığı 5 alan adından 3’ü kimlik avı sitesi, 2’si ise posta sunucusu gibi görünüyordu
regional.adidas.com.pyisglatam.onlineisglatam.tkmx12.limit742921.tokyomx12.jingoism44769.xyz
isglatam.onlineveisglatam.tk, bir dönem Güney Amerika siber güvenlik şirketiisglatam.comu hedefleyen kimlik avı web siteleriydi- URLscan kayıtlarına göre ISG Latam ile ilgili bu iki alan adı, tipik BeEF kimlik avı siteleri barındırıyordu; ilgili kayıtlar urlscan.io sonucu üzerinden görülebilir
- Aynı IP Adidas, ISG Latam ve modem trafiğinin yeniden oynatılmasıyla bağlantılıydı; ancak IP’nin farklı sahipler arasında yeniden tahsis edilmiş olma ihtimali de tamamen dışlanamıyordu
3 yıl sonra yeniden devam eden analiz
- 2024 başında güvenlik alanındaki arkadaşları
limit742921.tokyovejingoism44769.xyzbiçimine dikkat çekti limit742921.tokyoalan adınınmx1alt alan adı IP’si temel alınarak ters IP araması yapılınca aynı desende 1.000’den fazla alan adı bulundu- Alan adlarının tümü
[word][6 numbers].[TLD]biçimindeydi- Örnek:
acquire543225.biz - Örnek:
battery935904.biz - Örnek:
grocery634272.biz
- Örnek:
- Toplu kayıt ve algoritmik yapı nedeniyle, kötü amaçlı yazılım operatörlerinin C&C sunucu adreslerini gizlemek için kullandığı bir alan adı üretim algoritması gibi görünüyordu
- En son gözlemlenen alan adı 17 Mart 2023’te kaydedilmişti; o sırada artık herhangi bir host’a çözümlenmiyordu ve aynı IP’ye kayıtlı benzer alan adları da bulunamadı
ISP yönetim işlevleri ve TR-069’dan çıkan hipotez
- Cox destek temsilcisi modemi uzaktan güncelleyebiliyor, WiFi parolasını değiştirebiliyor ve bağlı cihazları görebiliyordu
- Bu uzaktan yönetim, ISP’nin ağ içindeki cihazları
7547portu üzerinden yönetmesini sağlayan ve 2004’te uygulanmış TR-069 protokolüyle bağlantılıydı - TR-069’un kendisi dışa açık değildi ve DEF CON sunumlarında da zaten ele alınmıştı; bu yüzden ilgi temsilcilerin kullandığı destek araçlarına ve dahili API’lere kaydı
- Bir saldırgan modemi ele geçirmek isterse destek araçlarının dayandığı altyapıyı, özellikle müşteri cihaz yapılandırmasını değiştirebilen veya keyfi komut çalıştırabilen API’leri hedefleyebileceği değerlendirildi
- Bu araştırma, 2021’deki gerçek ele geçirme yolunu kesinleştirmekten çok ISP ile müşteri cihazları arasındaki güven katmanını inceleme yönünde ilerledi
Cox Business portalının API yapısı
- Cox Business portalının frontend JavaScript dosyası
main.36624ed36fb0ff5b.jsiçinde/api/cbma/tabanlı 100’den fazla API çağrısı tespit edildi /api/cbma/yolu, diğer/api/yollarından farklı yanıt davranışına sahipti; frontend’den ayrı bir backend’e proxy’lenen bir API gibi görünüyordu/api/anything_else/exampleyönlendirme yanıtı döndürüyordu/api/cbma/example500 Internal Server Errordöndürüyordu
- Kayıt isteğinde
clientid,Apikey,Cb_session,Authorizationgibi header’lar bulunuyordu ve yanıt biçimi Spring tabanlı bir backend gibi görünüyordu - HTTP metodu değiştirildiğinde Spring hata yanıtı ortaya çıktı ve API backend’inin Spring tabanlı olduğu doğrulandı
- actuator yolları bulunamadı, ancak Swagger UI yolu keşfedildi
Swagger dokümantasyonunu atlayarak yükleme ve 700 API
- Swagger UI yükleniyordu, ancak statik kaynaklar bir yönlendirme döngüsüne girdiği için dokümantasyon boş görünüyordu
.js,.css,.pnggibi statik kaynak istekleri API proxy’si yerine varsayılan host’a yönlendiriliyor gibi görünüyordu- URL sonuna kodlanmış
/olan%2feklendiğinde statik JavaScript kaynakları API proxy’si üzerinden yüklenebildi - Burp’ün match-and-replace özelliğiyle statik kaynak isteklerine
%2feklenince Swagger dokümantasyonu normal şekilde görüntülendi - Toplamda yaklaşık 700 API çağrısı belirlendi; bunlar içinde cihaz ve hesap işlevleriyle yakından ilgili alanlar
accountequipment,datainternetgateway,accountidi
Kimlik doğrulama atlama ve müşteri verilerine erişim
- Tüm GET endpoint’lerine tekrar tekrar istek gönderildiğinde bazıları kimlik doğrulama hatası, bazıları
200 OKdöndürdü; aynı isteğin tekrarda farklı sonuçlar verdiği görüldü profilesearchendpoint’i başlangıçta boş arama sonucu döndürdü; sonrasında aynı istek kimlik doğrulama hatası ile başarılı yanıt arasında gidip geldicoxarama terimiyle istek tekrarlandığında Cox ticari müşterilerine ait profil gibi görünen sonuçlar veprofileGuiddöndüfbiarama terimiyle istek yapıldığında Cox ticari müşterisi olan birden fazla FBI saha ofisinin fiziksel adreslerini içeren sonuçlar döndü- Aynı yetki sorunu diğer API’leri de etkiliyordu; istekler birkaç kez yeniden oynatıldığında kimlik doğrulaması olmadan da yönetici işlevlerine erişilebiliyordu
Cihaz MAC adresi ve hesap bilgilerini sorgulama
- Kendi modem MAC adresini Cox hesabından alıp
macAddressparametresi olan API’ye girdiğinde, ilgili cihazın IPv4 adresi döndü - Bu sonuç, Cox Business web sitesi API’sinin gerçek cihazlarla iletişim kurabildiğini doğruladı
- Hesap ID’si kullanan cihaz listesi API’si, hesaba bağlı cihaz bilgilerini döndürüyordu
- Cihaz kategorisi
- Model adı
- MAC adresi
- Port bilgisi
- Seri numarası
- E-posta tabanlı kullanıcı sorgulama API’si ad, telefon numarası, durum, kullanıcı türü, profil sahibi olup olmadığı ve alternatif e-posta gibi ticari hesap bilgilerini döndürüyordu
- Benzer POST hesap güncelleme istekleri de çalışıyordu; böylece ticari hesaplarda okuma ve yazma yapılabildiği doğrulandı
encryptedValue ve cihaz yapılandırmasını değiştirme
- Cihaz yapılandırması değiştirme isteklerinde
encryptedValueparametresi gerekiyordu - JavaScript içindeki
encryptWithSaltandPaddingvedecryptWithSaltandPaddingfonksiyonları, değerleri AES tabanlı olarak şifrelemek ve çözmek için kullanılıyordu - Hesap kaydı sırasında belirlenen 4 haneli PIN de aynı fonksiyonla şifreleniyordu; bu sayede tarayıcı debugger’ında ilgili fonksiyonun çalışma bağlamı elde edilebildi
- Cox Business kullanan bir arkadaşının hesabında cihaz yanıtına dahil olan
encryptedValueçözüldüğünde şu öğeler vardı- Cox hesap numarası
- Cihaz adı
- Cihaz ID’si
- Bilinmeyen değer
- MAC adresi
- Etiket
- Hesap numarası ve cihaz ID’si rastgele değerler yapılıp yalnızca MAC adresi geçerli bırakılan bir dize tekrar şifrelendiğinde de istek başarılı oldu; bu, sunucunun MAC adresi ile hesap eşleşmesini doğrulamadığını gösterdi
Keyfi modem yapılandırması değiştirebilme olasılığı
- Kendi cihaz MAC adresini hedefleyen WiFi SSID değiştirme POST isteği gönderildi
- Yanıt
200 OKveSuccessoldu; ardından ağ kısa süreliğine çevrimdışı kaldı - Yaklaşık 5 dakika sonra ağ yeniden başlatıldı ve SSID
Curryolarak değişti - Bu PoC, cihaz yapılandırması güncelleme API’sinin gerçekten çalıştığını ve bir saldırganın API üzerinden cihaz ayarlarının üzerine yazabileceğini gösterdi
- Bu yetki ISP teknik destek seviyesine benzerdi ve API’ye erişebilen milyonlarca Cox cihazını etkileyebilirdi
Etki kapsamı ve olası saldırı akışı
- Açıkların birleşimi, ön koşulu olmayan harici bir saldırganın milyonlarca modemin ayarlarını değiştirmesine, ticari müşteri PII’sine erişmesine ve ISP destek ekibi düzeyinde yetki elde etmesine olanak veren bir yol oluşturuyordu
- Cox, ABD’nin en büyük özel geniş bant sağlayıcısı, üçüncü en büyük kablolu TV sağlayıcısı ve yedinci en büyük telefon operatörü; milyonlarca müşterisi var ve 10 eyalette en popüler ISP konumunda
- Olası saldırı akışı şöyleydi
- Ad, telefon numarası, e-posta, hesap numarasıyla Cox Business hedeflerini arama
- Dönen UUID ile hesap PII’si, cihaz MAC adresleri, e-postalar, telefon numaraları ve adresleri sorgulama
- Cihaz MAC adresiyle WiFi parolası ve bağlı cihazları sorgulama
- Keyfi komut çalıştırma, cihaz özelliklerini güncelleme, kurban hesabını ele geçirme
- Açıkta kalan API sayısı 700’den fazlaydı ve bunların çoğu modeme bağlı cihazları sorgulama gibi yönetici işlevleri sağlıyordu
- Her API, tekrar eden isteklerle yetkisiz komutlar çalıştırmaya izin veren aynı yetki sorunundan etkileniyordu
Bildirim, yama ve geriye kalan soru işaretleri
- Açık, Cox’un responsible disclosure program aracılığıyla bildirildi
- Cox 6 saat içinde açıkta kalan API çağrılarını kapattı ve ertesi gün açık artık yeniden üretilemiyordu
- Cox’un araştırmasına göre bu vektörün geçmişte kötüye kullanıldığına dair kayıt yoktu; açığın bulunduğu servis 2023’te başlatılmıştı ve 2021’deki modem ele geçirilmesinde kullanılmış olamazdı
- Cox, DigitalOcean IP’siyle hiçbir ilgisi olmadığını bildirdi; dolayısıyla eski modemin bu yazıda açıklanan yöntemle değil, başka bir yolla ele geçirilmiş olduğu sonucu kaldı
- Orijinal modem iade edildiği için firmware dump veya adli analiz yapılamadı; trafiğin neden özellikle yeniden oynatıldığı da doğrulanamadı
Açıklama zaman çizelgesi
- 2024-03-04: Açık, Cox’un sorumlu açıklama programı üzerinden bildirildi
- 2024-03-05: Hotpatch uygulandı; kritik olmayan business endpoint’leri
403döndürerek çalışmayı durdurdu - 2024-03-06: Açığın artık yeniden üretilemediğine dair Cox’a e-posta gönderildi
- 2024-03-07: Cox, kapsamlı bir güvenlik incelemesi başlatacağını belirterek yanıt verdi
- 2024-04-10: Açıklamanın bildirimden 90 gün sonra yapılmak istendiği Cox’a iletildi
- 2024-04-29: Blog taslağı bağlantısı Cox ile paylaşıldı
1 yorum
Hacker News yorumları
Umarım xrayarx bunu sorun etmez. Böyle durumlar için karma paylaşımını düzgün şekilde uygulamayı planlıyoruz, ancak o zamana kadar bazen böyle kaba, manuel yöntemlere başvuruyoruz