3 poin oleh GN⁺ 2024-06-05 | 1 komentar | Bagikan ke WhatsApp
  • Sam Curry menemukan bahwa permintaan HTTP yang dikirim dari jaringan rumahnya diputar ulang 10 detik kemudian dari IP DigitalOcean. Setelah mengganti gateway Cox Panoramic Wifi, masalah itu hilang, sehingga ia mencurigai modem lamanya telah dibobol
  • IP lalu lintas replay 159.65.76.209 terhubung dengan domain terkait Adidas, domain phishing ISG Latam, serta domain untuk C&C yang tampak dibuat secara algoritmis, tetapi jalur pembobolan sebenarnya belum dipastikan
  • Saat menganalisis portal Cox Business pada 2024, ditemukan API berbasis Spring di belakang /api/cbma/ beserta dokumentasi Swagger. Dari sekitar 700 API, sebagian menunjukkan masalah bypass otorisasi dengan bergantian mengembalikan error autentikasi dan 200 OK
  • Bypass otorisasi ini memungkinkan pencarian pelanggan, pengambilan PII akun, pengambilan alamat MAC perangkat, pengambilan IP modem, baca/tulis akun Cox Business, serta perubahan konfigurasi perangkat seperti mengganti SSID WiFi; dalam PoC, SSID miliknya berubah menjadi Curry
  • Cox menurunkan API yang terekspos dalam 6 jam setelah laporan, dan keesokan harinya bug tidak lagi dapat direproduksi. Cox menyatakan layanan API tersebut dimulai pada 2023, terpisah dari pembobolan modem pada 2021, dan tidak ada riwayat eksploitasi sebelumnya

Lalu Lintas Aneh yang Bermula dari Modem Rumah

  • Untuk menguji kerentanan blind XXE dari jaringan rumah, ia menjalankan server HTTP Python sederhana di sebuah instans AWS dan memeriksa apakah ada permintaan eksternal yang diterima
  • Segera setelah permintaan yang dikirim dari komputer rumah dengan curl tercatat normal, IP tak dikenal 159.65.76.209 meminta ulang path yang sama 10 detik kemudian
  • Ketika ia meminta path lain lewat Safari di iPhone, IP yang sama juga memutar ulang permintaan identik, sehingga tampak seolah lalu lintas seluruh jaringan rumah sedang diamati, bukan hanya komputer tertentu
  • Fenomena yang sama berulang pada instans AWS baru dengan Nginx, lalu pada instans GCP, sehingga kemungkinan pembobolan AWS dikesampingkan
  • Setelah gateway Cox Panoramic Wifi lama dikembalikan ke toko dan diganti dengan perangkat baru, lalu lintas replay menghilang dan tidak ada lagi “IP lain” yang muncul di log

Investigasi 159.65.76.209

  • IP tersebut dipastikan dimiliki oleh DigitalOcean, bukan alamat ISP Cox
  • Dalam catatan VirusTotal, dari 5 domain yang baru-baru ini terhubung, 3 tampak sebagai situs phishing dan 2 tampak seperti server email
    • regional.adidas.com.py
    • isglatam.online
    • isglatam.tk
    • mx12.limit742921.tokyo
    • mx12.jingoism44769.xyz
  • isglatam.online dan isglatam.tk sempat menjadi situs web phishing yang menargetkan perusahaan keamanan siber Amerika Selatan isglatam.com
  • Berdasarkan catatan URLscan, dua domain terkait ISG Latam tersebut meng-host situs phishing BeEF umum, dan catatan terkait dapat dilihat di hasil urlscan.io
  • IP yang sama terhubung dengan Adidas, ISG Latam, dan replay lalu lintas modem, tetapi kemungkinan IP itu telah direalokasikan di antara beberapa pemilik juga tidak dapat sepenuhnya dikesampingkan

Analisis yang Berlanjut Lagi 3 Tahun Kemudian

  • Pada awal 2024, teman-teman di bidang keamanan memperhatikan format limit742921.tokyo dan jingoism44769.xyz
  • Ketika pencarian reverse IP dilakukan berdasarkan IP subdomain mx1 milik limit742921.tokyo, ditemukan lebih dari 1.000 domain dengan pola yang sama
  • Semua nama domain berbentuk [kata][6 angka].[TLD]
    • Contoh: acquire543225.biz
    • Contoh: battery935904.biz
    • Contoh: grocery634272.biz
  • Karena pendaftaran massal dan struktur algoritmisnya, pola itu tampak seperti domain generation algorithm yang digunakan operator malware untuk menyembunyikan alamat server C&C
  • Domain terakhir yang teramati didaftarkan pada 17 Maret 2023, dan saat itu host tidak lagi ter-resolve; domain serupa yang didaftarkan pada IP yang sama juga tidak ditemukan

Hipotesis yang Berawal dari Fitur Manajemen ISP dan TR-069

  • Agen dukungan Cox dapat memperbarui modem dari jarak jauh, mengganti kata sandi WiFi, dan melihat perangkat yang terhubung
  • Manajemen jarak jauh ini terkait dengan protokol TR-069 yang diimplementasikan pada 2004, yaitu cara ISP mengelola perangkat dalam jaringan melalui port 7547
  • TR-069 sendiri tidak terekspos ke luar dan sudah dibahas dalam presentasi DEF CON, sehingga perhatian bergeser ke alat dukungan dan API internal yang dipakai agen dukungan
  • Jika penyerang ingin membobol modem, infrastruktur dasar alat dukungan—terutama API yang dapat mengubah konfigurasi perangkat pelanggan atau menjalankan perintah arbitrer—dinilai bisa menjadi target
  • Investigasi ini kemudian mengarah pada pemeriksaan lapisan kepercayaan antara ISP dan perangkat pelanggan, alih-alih memastikan jalur pembobolan sebenarnya pada 2021

Struktur API Portal Cox Business

  • Pada file JavaScript frontend portal Cox Business main.36624ed36fb0ff5b.js, ditemukan lebih dari 100 panggilan API berbasis /api/cbma/
  • Path /api/cbma/ memiliki perilaku respons yang berbeda dari path /api/ lain, sehingga tampak seperti API yang diproksikan ke backend terpisah dari frontend
    • /api/anything_else/example mengembalikan respons redirect
    • /api/cbma/example mengembalikan 500 Internal Server Error
  • Permintaan registrasi menyertakan header seperti clientid, Apikey, Cb_session, dan Authorization, sementara bentuk responsnya tampak seperti backend berbasis Spring
  • Saat metode HTTP diubah, muncul respons error Spring, yang mengonfirmasi bahwa backend API berbasis Spring
  • Path actuator tidak ditemukan, tetapi path Swagger UI ditemukan

Pemuatan Bypass Dokumentasi Swagger dan 700 API

  • Swagger UI berhasil dimuat, tetapi resource statis masuk ke redirect loop sehingga dokumentasi tampak kosong
  • Permintaan resource statis seperti .js, .css, dan .png tampaknya dirutekan ke host default, bukan ke proxy API
  • Dengan menambahkan %2f, yaitu / yang dienkode, ke akhir URL, resource JavaScript statis dapat dimuat melalui proxy API
  • Setelah menambahkan %2f ke permintaan resource statis menggunakan match-and-replace Burp, dokumentasi Swagger tampil normal
  • Secara keseluruhan, sekitar 700 panggilan API teridentifikasi, dan area yang paling terkait dengan fungsi perangkat dan akun adalah accountequipment, datainternetgateway, dan account

Bypass Autentikasi dan Akses Data Pelanggan

  • Saat permintaan diulang ke semua endpoint GET, sebagian mengembalikan error autentikasi dan sebagian mengembalikan 200 OK; bahkan permintaan yang sama kadang berubah hasilnya saat diulang
  • Endpoint profilesearch awalnya mengembalikan hasil pencarian kosong, lalu pada permintaan yang sama berikutnya responsnya bergantian antara error autentikasi dan sukses
  • Ketika permintaan dengan kata kunci pencarian cox diulang, hasil yang tampak seperti profil pelanggan bisnis Cox beserta profileGuid dikembalikan
  • Ketika permintaan dengan kata kunci fbi dikirim, hasil yang berisi alamat fisik beberapa kantor lapangan FBI yang merupakan pelanggan bisnis Cox dikembalikan
  • Masalah otorisasi yang sama juga memengaruhi API lain, dan dengan memutar ulang permintaan beberapa kali, fungsi admin dapat diakses meski tanpa autentikasi

Pengambilan Alamat MAC Perangkat dan Informasi Akun

  • Saat alamat MAC modem miliknya diambil dari akun Cox lalu dimasukkan ke API yang memiliki parameter macAddress, alamat IPv4 perangkat tersebut dikembalikan
  • Hasil ini mengonfirmasi bahwa API situs Cox Business dapat berkomunikasi dengan perangkat nyata
  • API daftar perangkat yang menggunakan ID akun mengembalikan informasi perangkat yang terhubung ke akun
    • Kategori perangkat
    • Nama model
    • Alamat MAC
    • Informasi port
    • Nomor seri
  • API pencarian pengguna berbasis email mengembalikan informasi akun bisnis seperti nama, nomor telepon, status, tipe pengguna, apakah pemilik profil, dan email alternatif
  • Permintaan POST pembaruan akun serupa juga berfungsi, mengonfirmasi bahwa akun bisnis dapat dibaca dan ditulis

encryptedValue dan Perubahan Konfigurasi Perangkat

  • Permintaan perubahan konfigurasi perangkat memerlukan parameter encryptedValue
  • Fungsi encryptWithSaltandPadding dan decryptWithSaltandPadding di dalam JavaScript digunakan untuk mengenkripsi dan mendekripsi nilai berbasis AES
  • PIN 4 digit yang disetel saat pendaftaran akun juga dienkripsi dengan fungsi yang sama, sehingga konteks eksekusi fungsi tersebut dapat diperoleh dari debugger browser
  • Ketika encryptedValue yang terdapat dalam respons perangkat dari akun seorang kenalan yang menggunakan Cox Business didekripsi, elemen berikut ikut terkandung
    • Nomor akun Cox
    • Nama perangkat
    • ID perangkat
    • Nilai yang tidak diketahui
    • Alamat MAC
    • Label
  • Bahkan ketika nomor akun dan ID perangkat diisi dengan nilai arbitrer lalu hanya alamat MAC dibuat valid dan string tersebut dienkripsi ulang, permintaan tetap berhasil, mengonfirmasi bahwa server tidak memverifikasi kecocokan alamat MAC dengan akun

Kemungkinan Mengubah Konfigurasi Modem Arbitrer

  • Ia mengirim permintaan POST untuk mengubah SSID WiFi dengan menargetkan alamat MAC perangkatnya sendiri
  • Responsnya adalah 200 OK dan Success, lalu jaringan sempat offline sementara
  • Sekitar 5 menit kemudian jaringan reboot dan SSID berubah menjadi Curry
  • PoC ini menunjukkan bahwa API pembaruan konfigurasi perangkat benar-benar berfungsi, dan penyerang dapat menimpa konfigurasi perangkat melalui API
  • Hak akses tersebut setara dengan dukungan teknis ISP, dan dapat memengaruhi jutaan perangkat Cox yang dapat diakses melalui API

Cakupan Dampak dan Alur Serangan yang Mungkin

  • Kombinasi kerentanan ini menciptakan jalur bagi penyerang eksternal tanpa prasyarat untuk mengubah konfigurasi jutaan modem, mengakses PII pelanggan bisnis, dan memperoleh hak setingkat tim dukungan ISP
  • Cox adalah penyedia broadband swasta terbesar di AS, penyedia TV kabel terbesar ketiga, dan operator telepon terbesar ketujuh; perusahaan ini memiliki jutaan pelanggan dan merupakan ISP paling populer di 10 negara bagian
  • Alur serangan yang mungkin adalah sebagai berikut
    • Mencari target bisnis Cox berdasarkan nama, nomor telepon, email, dan nomor akun
    • Menggunakan UUID yang dikembalikan untuk mengambil PII akun, alamat MAC perangkat, email, nomor telepon, dan alamat
    • Menggunakan alamat MAC perangkat untuk mengambil kata sandi WiFi dan perangkat yang terhubung
    • Menjalankan perintah arbitrer, memperbarui atribut perangkat, mengambil alih akun korban
  • API yang terekspos berjumlah lebih dari 700, dan banyak di antaranya menyediakan fungsi admin seperti melihat perangkat yang terhubung ke modem
  • Setiap API mengalami masalah otorisasi yang sama, yang memungkinkan perintah tidak sah dijalankan melalui permintaan berulang

Pelaporan, Patch, dan Pertanyaan yang Tersisa

  • Kerentanan dilaporkan melalui responsible disclosure program milik Cox
  • Cox menurunkan panggilan API yang terekspos dalam 6 jam, dan keesokan harinya kerentanan tidak lagi dapat direproduksi
  • Menurut hasil investigasi Cox, tidak ada riwayat eksploitasi sebelumnya atas vektor tersebut, dan layanan yang memiliki kerentanan ini dimulai pada 2023 sehingga tidak dapat digunakan dalam pembobolan modem pada 2021
  • Cox menyatakan tidak memiliki hubungan apa pun dengan IP DigitalOcean tersebut, sehingga modem lama tetap dianggap dibobol dengan cara lain, bukan melalui metode yang diungkap dalam tulisan ini
  • Karena modem asli sudah dikembalikan, firmware dump atau analisis forensik tidak dapat dilakukan, dan alasan lalu lintas itu sengaja diputar ulang juga tidak dapat dipastikan

Linimasa Publik

  • 2024-03-04: Kerentanan dilaporkan melalui program responsible disclosure Cox
  • 2024-03-05: Hotpatch diterapkan; endpoint bisnis yang tidak esensial berhenti berfungsi dan mengembalikan 403
  • 2024-03-06: Email dikirim ke Cox bahwa kerentanan tidak lagi dapat direproduksi
  • 2024-03-07: Cox membalas bahwa mereka memulai tinjauan keamanan menyeluruh
  • 2024-04-10: Cox diberi tahu bahwa waktu publikasi akan dilakukan 90 hari setelah laporan
  • 2024-04-29: Tautan draf blog dibagikan dengan Cox

1 komentar

 
GN⁺ 2024-06-05
Komentar Hacker News
  • albinowax_ memposting ini lebih dulu, dan saya merasa tidak enak karena dia tidak mendapat karma, jadi saya memindahkan komentarnya ke https://news.ycombinator.com/item?id=40560010
    Semoga xrayarx bisa menerimanya dengan baik. Ada rencana untuk menerapkan berbagi karma dengan layak untuk kasus seperti ini, tetapi sampai saat itu kami kadang mengandalkan cara manual yang agak kasar seperti ini
    • Menurut sistem, saya memposting 13 jam yang lalu, dan dia memposting 10 jam yang lalu. Jadi saya kurang paham bagaimana bisa dibilang dia yang memposting lebih dulu.