3 puan yazan GN⁺ 2024-06-05 | 1 yorum | WhatsApp'ta paylaş
  • 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ı ile 200 OK yanı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 Curry olarak 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 curl ile gönderilen istek normal şekilde kaydedildikten hemen sonra, bilinmeyen IP 159.65.76.209 aynı 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.py
    • isglatam.online
    • isglatam.tk
    • mx12.limit742921.tokyo
    • mx12.jingoism44769.xyz
  • isglatam.online ve isglatam.tk, bir dönem Güney Amerika siber güvenlik şirketi isglatam.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.tokyo ve jingoism44769.xyz biçimine dikkat çekti
  • limit742921.tokyo alan adının mx1 alt 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
  • 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ı 7547 portu ü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.js iç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/example yönlendirme yanıtı döndürüyordu
    • /api/cbma/example 500 Internal Server Error döndürüyordu
  • Kayıt isteğinde clientid, Apikey, Cb_session, Authorization gibi 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, .png gibi statik kaynak istekleri API proxy’si yerine varsayılan host’a yönlendiriliyor gibi görünüyordu
  • URL sonuna kodlanmış / olan %2f eklendiğinde statik JavaScript kaynakları API proxy’si üzerinden yüklenebildi
  • Burp’ün match-and-replace özelliğiyle statik kaynak isteklerine %2f eklenince 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, account idi

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 OK döndürdü; aynı isteğin tekrarda farklı sonuçlar verdiği görüldü
  • profilesearch endpoint’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 geldi
  • cox arama terimiyle istek tekrarlandığında Cox ticari müşterilerine ait profil gibi görünen sonuçlar ve profileGuid döndü
  • fbi arama 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 macAddress parametresi 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 encryptedValue parametresi gerekiyordu
  • JavaScript içindeki encryptWithSaltandPadding ve decryptWithSaltandPadding fonksiyonları, 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 OK ve Success oldu; ardından ağ kısa süreliğine çevrimdışı kaldı
  • Yaklaşık 5 dakika sonra ağ yeniden başlatıldı ve SSID Curry olarak 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 403 dö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

 
GN⁺ 2024-06-05
Hacker News yorumları
  • albinowax_ bunu daha önce paylaşmıştı ama karma alamaması içime takıldı, bu yüzden yorumu https://news.ycombinator.com/item?id=40560010 bağlantısına taşıdım
    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
    • Sisteme göre ben bunu 13 saat önce paylaştım, o ise 10 saat önce paylaşmış. Bu yüzden onun daha önce paylaştığı sözü bana pek anlamlı gelmiyor