- घर के नेटवर्क से भेजे गए HTTP requests को करीब 10 सेकंड बाद DigitalOcean IP से ज्यों का त्यों replay किया गया, जिससे Cox Panoramic Wifi gateway के पीछे मौजूद कई devices का traffic बाहर expose होने के संकेत मिले
- VirusTotal और URLscan tracking में पता चला कि वह IP पहले phishing domains और
word+6 digits+TLDफॉर्मेट वाले बड़े पैमाने के domains से जुड़ा था, जिससे C&C के लिए domain generation algorithm की संभावना उठी - 2024 में Cox Business portal के analysis के दौरान
/api/cbma/के पीछे Spring-आधारित API और Swagger documentation expose हुए, और केवल repeated requests से authorization check bypass हो गया - Exposed API customers की खोज, account PII देखने, device MAC addresses देखने और WiFi settings बदलने तक की अनुमति देता था, और
encryptedValuegeneration logic भी frontend JavaScript से call किया जा सकता था - Cox ने report के 6 घंटे के भीतर exposed API हटा दिया, लेकिन यह service 2023 में शुरू हुई थी, इसलिए 2021 में हुई पहली modem compromise की वजह अब भी अलग मुद्दा बनी हुई है
घर के नेटवर्क में मिले HTTP request replay
- blind XXE vulnerability test करने के लिए AWS instance पर Python HTTP server चलाने के बाद, home computer से
/test123request भेजी- Original request home IP
98.161.24.100से आई - करीब 10 सेकंड बाद unknown IP
159.65.76.209ने उसी path पर request फिर से भेजी
- Original request home IP
- iPhone Safari से भी वही URL request करने पर वही IP फिर से request replay करता दिखा
- सिर्फ home computer नहीं, बल्कि घर के नेटवर्क के दूसरे devices पर भी यही behavior दोहराया गया
- नए AWS instance और Nginx, GCP instance पर भी वही IP request replay कर रहा था, इसलिए AWS की अपनी समस्या होने की संभावना कम हो गई
- बची हुई संभावनाएं ISP, modem या network path की compromise थीं
- IP owner lookup में
159.65.76.209DigitalOcean address निकला, ISP address नहीं था
DigitalOcean IP से जुड़ा पुराना malicious infrastructure
- VirusTotal lookup में उस IP पर पहले resolve हुए domains मिले
- हाल के 5 domains में से 3 phishing sites थे, और 2 mail servers जैसे दिख रहे थे
- उदाहरण domains:
regional.adidas.com.pyisglatam.onlineisglatam.tkmx12.limit742921.tokyomx12.jingoism44769.xyz
isglatam.onlineऔरisglatam.tkदक्षिण अमेरिकी cybersecurity companyisglatam.comको target करने वाली phishing sites थीं- असली ISG Latam website पर यह Paraguay-based company बताई गई है और Crowdstrike, AppGate, Acunetix, DarkTrace, ForcePoint के साथ partnerships की पुष्टि होती है
- URLscan में दोनों domains पर सामान्य BeEF phishing site host किए जाने के निशान बचे थे
- संबंधित record: URLscan result
- वही IP Adidas-related domain, ISG Latam phishing और modem traffic replay जैसी दिखने वाली activity, तीनों से जुड़ा था
- यह भी संभव था कि IP कई owners के बीच rotate हुआ हो, लेकिन activities के बीच gap लंबा था, इसलिए तुरंत किसी दूसरे malicious user को reassign होने की संभावना कम दिखी
मॉडेम बदलना और 3 साल बाद दोबारा जांच
- इस्तेमाल में मौजूद device Cox Panoramic Wifi gateway था, और Cox store में जाकर नया modem लिया गया
- पुराना device ISP से rental पर था, इसलिए वापस करना पड़ा
- Firmware dump या reverse engineering नहीं की जा सकी
- नया modem install करने के बाद HTTP request replay पूरी तरह बंद हो गया
- Logs में अब कोई दूसरा IP नहीं दिखा
- उस समय पुराने modem के compromised होने के निष्कर्ष के अलावा आगे जांच करना मुश्किल था
- 2024 की शुरुआत में, करीब 3 साल बाद security industry के परिचितों के साथ दोबारा investigation करते हुए
limit742921.tokyo,jingoism44769.xyzजैसे domain formats पर ध्यान गया- संबंधित IPs पर reverse IP search करने पर उसी pattern के 1,000 से ज्यादा domains मिले
- Domain format सभी में
word+6 numbers+TLDstructure था- Bulk registration और algorithmic structure की वजह से यह malicious operator द्वारा C&C server address छिपाने के लिए इस्तेमाल किए जाने वाले domain generation algorithm जैसा दिखा
- आखिरी observed domain 17 मार्च 2023 को registered था, और उसके बाद कोई host resolve नहीं हो रहा था
- बदला गया नया modem भी वही model था, लेकिन Google search के आधार पर उस model की public vulnerabilities नहीं मिलीं
ISP support tools और TR-069 से शुरू हुई hypothesis
- Cox modem को नई जगह ले जाने की प्रक्रिया में पता चला कि ISP support agent remotely device settings बदल सकता है
- Support agent device settings update, WiFi password change और connected devices check कर सकता था
- यह remote management 2004 में implement किए गए TR-069 protocol के जरिए होता है
- ISP port
7547के जरिए अपने network के अंदर devices manage करता है - यह protocol DEF CON presentation में भी cover हुआ था, लेकिन यह externally exposed surface नहीं था
- ISP port
- Investigation का focus protocol से हटकर support agents द्वारा इस्तेमाल की जाने वाली internal device management website और उसके पीछे की API पर गया
- अगर ऐसी API customer device settings read/change कर सकती है या commands execute कर सकती है, तो वह modem compromise path बन सकती है
Cox Business portal की API structure
- Cox Business portal device remote management, firewall rules configuration और network traffic monitoring functions देता है
- Login page की frontend JavaScript file
main.36624ed36fb0ff5b.jsसे routes extract किए गए/api/cbma/based 100 से ज्यादा API calls मिलीं- उदाहरण:
/api/cbma/voicemail/services/voicemail/inbox/transcribeMessage//api/cbma/profile/services/profile/userroles//api/cbma/accountequipment/services/accountequipment/equipments/eligibleRebootDevice
/api/cbma/सामान्य frontend से अलग response दिखा रहा था, इसलिए यह अलग backend की ओर जाने वाला reverse proxy जैसा लगा/api/anything_else/examplerequest 301 redirect लौटाती है/api/cbma/examplerequest 500 Internal Server Error लौटाती है
- Registration request में authentication-related कई headers शामिल थे
Clientid: cbmauserApikey: 5d228662-aaa1-4a18-be1c-fb84db78cf13Cb_session: unauthenticateduserAuthorization: Bearer undefined
- HTTP method बदलकर देखने पर Spring-format error response मिला, जिससे backend के Spring based होने की पुष्टि हुई
Swagger documentation और static resource bypass
- Spring actuator paths नहीं मिले, लेकिन Swagger UI paths में से कुछ accessible थे
/api/cbma/userauthorization/swagger-ui/index.htmlpath ने response दिया
- पहले load किया गया Swagger page खाली था
.png,.js,.cssजैसे static resources API proxy के बजाय original host path पर route हो रहे थे, जिससे infinite redirect हो रहा था
- Burp Intruder से URL के अंत में
%00से%FFतक जोड़कर test करने पर URL-encoded/यानी%2fको.jsके बाद जोड़ने से 200 OK मिला- उदाहरण:
/swagger-initializer.js%2f
- उदाहरण:
- Burp match-and-replace से सभी static resources में
%2fजोड़ने पर Swagger documentation सही से load हुआ - कुल मिलाकर करीब 700 API calls मिलीं
account: 115voiceutilities: 73user: 70datainternetgateway: 57accountequipment: 55billing: 53ticket: 52- इनके अलावा
profile,voicecallmanagement,voicemail,userauthorization,csrआदि
- Devices और customer accounts से सीधे जुड़ी APIs में
accountequipment,datainternetgateway,accountसबसे महत्वपूर्ण दिखीं
Repeated requests से हुआ authorization check bypass
- सभी GET endpoints पर बिना authentication access संभव है या नहीं, यह जांचने पर कुछ ने auth error लौटाया और कुछ ने 200 OK लौटाया
profilesearchendpoint ने शुरू में empty search results वाला success response लौटाया- वही request कभी
Authorization Error-Invalid User Tokenलौटाती, और फिर भेजने पर success हो जाती थी
- वही request कभी
- एक ही request को कई बार resend करने पर authorization error गायब हो गया और customer search results लौटने लगे
coxsearch पर10000+ hitsलौटेfbisearch पर Cox business customers FBI field offices के physical addresses वाले results लौटे
- सिर्फ API request repeat करके authorization bypass संभव था, और यही समस्या 700 से ज्यादा APIs में फैली लग रही थी
Customer devices access और account lookup
- Cox Business API residential network devices तक भी access कर सकती है या नहीं, यह देखने के लिए MAC address लेने वाली simple API test की गई
- Endpoint:
/api/cbma/accountequipment/services/accountequipment/ipAddress?macAddress=:mac
- Endpoint:
- अपने Cox account से MAC address देखने के बाद request repeat करने पर अपने modem का IPv4 address लौटा
- इससे पुष्टि हुई कि यह API सच में Cox devices से communicate कर सकती है
- Account ID इस्तेमाल करने वाली device list API भी काम कर रही थी
- Endpoint:
/api/cbma/accountequipment/services/accountequipment/v1/equipments/{accountId} - Response में internet device, voice device और TV device information शामिल थी
- Device model, device type, MAC address, port list और serial number लौटे
- Endpoint:
- Email-based user lookup API ने भी business account information लौटाई
- Example request:
/api/cbma/user/services/user/admin@cox.net - Email, name, phone number, status, permissions, profile owner status, alternate email आदि शामिल थे
- Example request:
- इसी तरह की POST account update request भी काम कर रही थी, जिससे business account पर read और write access संभव होने की पुष्टि हुई
encryptedValue और device settings बदलना
- Hardware settings change requests में
encryptedValueनाम का parameter चाहिए था- जैसे: device password change, WiFi settings change
- Frontend JavaScript में
encryptedValuegenerate/decrypt करने का logic trace किया गयाencryptWithSaltandPaddingdecryptWithSaltandPadding
- Account registration के दौरान set होने वाला 4-digit PIN भी इसी function से encrypt हो रहा था, इसलिए browser debugger में उस function call point पर breakpoint लगाकर console से सीधे call किया जा सकता था
- Actual account response से मिले
encryptedValueको decrypt करने पर इस format की values मिलीं- Cox account number
- Device name
- Device ID
- Unknown value
- MAC address
- Label
- Account number आदि में अधिकांश जगह arbitrary values डालकर और सिर्फ MAC address valid रखकर नया
encryptedValuegenerate करने पर भी request successful रही- Server ने account ID और MAC address के match होने की जांच नहीं की
किसी भी modem की settings बदलने की संभावना
- अपने device पर WiFi SSID को
Curryमें बदलने वाली POST request भेजी गई- Endpoint:
/api/cbma/accountequipment/services/accountequipment/gatewaydevice/wifisettings - Request body में
wifiSettings,additionalProperties,encryptedValueशामिल थे
- Endpoint:
- Response
{"message": "Success"}था, और बाद में network कुछ समय के लिए disconnect होकर करीब 5 मिनट बाद reboot हुआ- SSID सच में
Curryमें बदल गया
- SSID सच में
- इस behavior ने दिखाया कि API के जरिए device configuration changes सच में device पर apply होते हैं
- Attacker customer search से account UUID हासिल कर सकता है
- Connected device का MAC address lookup कर सकता है
- MAC address के आधार पर device settings read या change कर सकता है
- यह permission ISP support team जैसी level की access थी, और Cox devices की लाखों units को affect कर सकने वाला path था
Impact scope और attack scenarios
- Vulnerability combination दिखाता है कि external attacker बिना किसी precondition के ये कर सकता है
- लाखों modems पर command execution और settings change
- Cox Business customers की PII access
- ISP support team जैसी permissions हासिल करना
- Cox अमेरिका का सबसे बड़ा private broadband provider, तीसरा सबसे बड़ा cable TV provider और सातवां सबसे बड़ा telephone operator है, और 10 states में सबसे popular ISP है
- Example attack flow:
- Name, phone number, email, account number से Cox Business target search करना
- Returned UUID से full account PII और device MAC address, email, phone number, address lookup करना
- Hardware MAC address से WiFi password और connected devices lookup करना
- Arbitrary command execution, device properties change, victim account takeover
- 700 से ज्यादा exposed APIs में से काफी admin functions देती थीं, और repeated requests से वही permission issue होता था
Cox को report और fix
- Vulnerability Cox के responsible disclosure program के जरिए report की गई
- Cox ने report के 6 घंटे के भीतर exposed API calls हटा दिए और authorization vulnerability fix पर काम शुरू किया
- अगले दिन vulnerabilities reproduce नहीं हो पा रही थीं
- Public timeline:
- 2024-03-04: Cox को vulnerability report की
- 2024-03-05: hotpatch apply, non-essential business endpoints 403 लौटाते हुए बंद हुए
- 2024-03-06: Cox को email से बताया कि vulnerability reproduce नहीं हो रही
- 2024-03-07: Cox ने जवाब दिया कि comprehensive security review शुरू किया जा रहा है
- 2024-04-10: Cox को report के 90 दिन बाद public disclosure की मंशा बताई
- 2024-04-29: blog draft link Cox के साथ share किया
बाकी सवाल
- Cox ने specific vulnerability path के past exploitation की जांच की और पुष्टि की कि exploitation history नहीं है
- यह service 2023 में operation में आई थी
- पहली modem compromise 2021 में हुई थी, इसलिए disclosed Cox Business API vulnerability उस समय की compromise का cause नहीं थी
- Cox ने बताया कि DigitalOcean IP से उसका कोई संबंध नहीं है
- Device सच में hack हुआ था, लेकिन disclosed API vulnerability से अलग तरीके से
- Modem को externally accessible configure नहीं किया गया था, और घर के network से device में login भी नहीं किया गया था
- संभावित दूसरे paths में local CSRF से RCE तक जाने वाला 0day जैसे तरीके का जिक्र हुआ
- सबसे बड़ा सवाल यह है कि attacker ने HTTP requests replay क्यों किए
- अगर वह network के अंदर था, तो बिना पकड़े access कर सकता था, फिर भी हर HTTP request replay करने की वजह पता नहीं चली
1 टिप्पणियां
Hacker News की राय
अच्छा लेख था और समझने में आसान था। खास तौर पर यह अच्छा लगा कि Cox ने रिपोर्ट करने वाले पर हमला नहीं किया या समस्या से इनकार नहीं किया, बल्कि ऐसी स्थिति में जिस तरह की ज़िम्मेदार security response की उम्मीद की जाती है, उसका उदाहरण पेश किया
मैं किसी follow-up लेख में देखना चाहूँगा कि वह bug क्या था जिसकी वजह से अनधिकृत API access बीच-बीच में allowed हो रहा था। ऐसी गलतियाँ हल्के-फुल्के testing में आसानी से छूट सकती हैं, या कारण पर निर्भर करते हुए test environment में शायद बिल्कुल reproduce ही न हों
पहले एक traditional telecom company में मुझे संयोग से एक गंभीर vulnerability मिली थी, लेकिन सिर्फ़ सामान्य customer support channel के ज़रिए सही व्यक्ति तक पहुँचने में लगभग एक हफ्ता लग गया, और support organization बिल्कुल escalation नहीं कर पाया। Cox के पास भी एक information security professional infected device लेकर सीधे आया था, लेकिन support organization उसे ठीक से handle नहीं कर पाया
ऐसी स्थिति में झुंझलाहट तब होती है जब ISP अपने ही modem या router का इस्तेमाल जबरन करवाता है। उदाहरण के लिए AT&T fiber network access के लिए certificate-based 802.1X authentication करता है; इसके बिना ONT में कोई भी device plug किया जा सकता था
bypass के तरीके हैं या थे, लेकिन सिर्फ़ internet इस्तेमाल करने के लिए वह प्रक्रिया अपनाना मुझे पसंद नहीं, इसलिए मैं AT&T router की सारी सुविधाएँ बंद करके अपने router को उसके पीछे लगाता हूँ, जिसे मैं updated रखता हूँ। अगर AT&T router hack हो जाए, तो service पर बुरा असर पड़ने तक शायद मुझे पता भी न चले। अच्छा है कि आजकल ज़्यादातर HTTPS इस्तेमाल होता है
ONT reboot हो जाए तो शायद यह फिर करना पड़े, लेकिन मेरे मामले में AT&T ने ONT के लिए UPS दिया है, इसलिए reboot कम होंगे। निजी तौर पर मैंने bypass NIC आधारित एक जटिल setup बनाया था, जिसमें firewall बंद हो या reboot हो रहा हो तो traffic AT&T modem से होकर जाता है, और चालू होने पर मेरा firewall traffic लेकर उसे चुनिंदा रूप से modem के ज़रिए आगे भेजता है; लेकिन सच कहें तो सिर्फ़ unmanaged switch भी पर्याप्त है
लेकिन Cox की तारीफ़ यहीं तक है। मैं 2 साल से intermittent packet loss झेल रहा हूँ, और भले ही मैं यह data इकट्ठा कर लूँ कि कोई particular node शायद oversubscribed है, ऐसा support escalation path दिखता ही नहीं जिससे बात किसी ऐसे व्यक्ति तक पहुँचे जो इसे समझ सके
असल में 802.1X status server-side verify नहीं होता। standard कहता है कि अगर 802.1X required है और perform नहीं हुआ, तो modem को traffic आगे नहीं भेजना चाहिए, लेकिन ज़्यादातर device बस भेज देते हैं या ऐसा करने के लिए बदले जा सकते हैं। AT&T की तरफ verification नहीं होता और traffic हमेशा pass हो जाता है; internally भी यही हो रहा है
लेख अच्छा और पढ़ने में सहज है, और investigation भी शानदार है। यह देखना भी अच्छा है कि कोई बड़ी company security researcher पर nuclear bomb नहीं गिरा रही
पक्का नहीं कह सकता, लेकिन मुझे शक है कि इस Nokia router के local admin interface requests सही से authenticate होते हैं या नहीं। हाल ही में मुझे यही equipment मिला था, और कुछ settings ऐसी थीं जिन्हें general admin rights से बदला नहीं जा सकता था, और ISP ने super admin account नहीं दिया था। लेकिन page inspector से disabled fields को फिर enable करके values बदलने पर API ने उन्हें वैसे ही accept कर लिया। ऐसी स्थिति में अगर internal network के अंदर कोई application run हो सके, तो इस तरह router को takeover करना मुश्किल नहीं होगा, हालांकि यह काफी specific condition लगती है
Cox साफ़ तौर पर एक आकर्षक attack target है, और article के example की तरह एक single vulnerability से FBI field office तक खतरे में पड़ सकता है। “Cox ने past exploitation की जांच की और कोई record नहीं मिला” की जगह “जांच करने का दावा किया” लिखना शायद ज़्यादा सही होता
क्या “past exploitation history नहीं थी” वाली बात पर भरोसा किया जा सकता है? पूरा network Swiss cheese जैसा छेदों से भरा दिखता है
कई routers में firmware को manually update करना पड़ता है। GL.iNet routers में पिछले 6 महीनों में कई remote code execution vulnerabilities रही हैं, इसलिए जल्दी से जांच लेना बेहतर है कि आपका router hack तो नहीं हुआ, और संभव हो तो firmware upgrade कर लें
आम user के नज़रिए से दिखने वाले symptoms थे internet speed कम होना, Wi-Fi signal टूटना और devices का connect न हो पाना, और router खुद internet से जुड़ा होने के बावजूद internal admin page (192.168.8.1) का respond न करना। मेरे मामले में attacker ने IPRoyal का Pawns app install करके router को proxy server बना दिया और पैसे कमाए; उसने usage time और NAS connection status वाले system logs भी चुराए, और उसके पास reverse shell भी था। समाधान के लिए बेहतर क्रम है: firmware update, router reset करके malware हटाना, SSH disable करना, और dynamic DNS जैसे remote access को बंद करना। अगर remote access चाहिए, तो Cloudflare Tunnel, Zero Trust, GoodCloud, ZeroTier, Tailscale जैसी चीज़ों पर विचार कर सकते हैं, लेकिन कौन-सा option सही है, यह मुझे ठीक से नहीं पता। GL.iNet least privilege principle का पालन नहीं करता और by default processes को root के रूप में चलाता है; SSH भी root access के साथ default enabled है, इसलिए इससे बचना बेहतर लगता है
“exploitation history नहीं थी” का मतलब यह भी हो सकता है कि शुरुआत से logs या audit material पर्याप्त नहीं थे, या hack के बाद logs बचे ही नहीं थे
कौन-सा authentication system calls को कभी-कभी random तरीके से pass कर देता है? सच में अक्षम लगता है
पैसे दिए क्या? इस व्यक्ति ने Cox को practically बचा लिया और security infrastructure के complete takeover के बारे में बताया, जिसे ढूंढना भी आसान नहीं था
“सही काम” करने के बदले उसे कुछ नहीं मिला लगता है, जो काफी अपमानजनक है। महत्वपूर्ण जानकारी लेकर office तक पहुंचे व्यक्ति को company ने कैसे देखा होगा—उसकी अपनी self-perception और company की perception बहुत अलग रही होगी। ऐसे मामले साफ दिखाते हैं कि 0day कभी report क्यों नहीं करना चाहिए
अभी खुला सवाल यह है कि attackers ने उसका HTTP traffic कैसे पकड़ा
कुछ CPE में debugging के लिए cloud Wireshark जैसी सुविधा होती है। Cox के production firmware image में ऐसी सुविधा है या नहीं, पता नहीं। आम तौर पर production firmware और test firmware अलग-अलग होते हैं, जिससे production issues को test करना और मुश्किल हो जाता है। Cox यह check कर सकता होगा कि field में कौन-कौन से firmware versions हैं; ISP किसी खास version से mismatch करने वाले firmware को auto-upgrade कर सकता है, और यह Cox modem है, इसलिए उनके पास firmware भी होने की काफी संभावना है। अगर यह debug firmware था, तो यह कैसे चढ़ा और लगातार कैसे बना रहा, यह जानना चाहूंगा
port 80 का सारा data intercept करके HTTP headers parse करना और फिर जरूरी काम करना आसान है। हालांकि किसी ने requests replay क्यों कीं, यह मुझे ठीक से समझ नहीं आता
Wi-Fi capability वाले ISP-provided cable modem का स्वागत नहीं करना चाहिए, और LAN के अंदर endpoints और services की security ठीक रखने की यह एक वजह है। कम से कम modem/ISP segment में TLS और DNS over TLS चाहिए
मैं तो इसे बस bridge mode में रखता हूं, Wi-Fi बंद कर देता हूं, और सभी network functions मेरे अपने equipment को संभालने देता हूं। आखिरी बार ISP से rent किया modem ऐसा था जिसे ISP ने करीब 10 साल तक firmware update नहीं किया था; इससे वह काफी stable जरूर था
जहां मैं काम करता हूं, Free एक French ISP है और Iliad के जरिए Italy में भी home gateways देता है; 2011 में launch हुए devices को भी अभी तक update करता है। उन पर latest Linux 6.4 चलता है, airtime QoS जैसे modern features, mobile app updates और कई software features भी मिलते हैं
मैंने comparatively decent router खरीदा, उस पर OpenWrt install किया, और ISP equipment के जरिए network से bridge के रूप में जोड़ा; यह अच्छी तरह काम करता है। अब मैं LAN के अंदर भी HTTPS इस्तेमाल करता हूं