- Sam Curry พบว่าคำขอ HTTP ที่ส่งจากเครือข่ายที่บ้านถูกเล่นซ้ำเหมือนเดิมจาก IP ของ DigitalOcean หลังผ่านไป 10 วินาที และหลังจากเปลี่ยนเกตเวย์ Cox Panoramic Wifi ปัญหาก็หายไป ทำให้สงสัยว่าโมเด็มเดิมถูกบุกรุก
- IP ของทราฟฟิกที่ถูกเล่นซ้ำ
159.65.76.209เชื่อมโยงกับโดเมนที่เกี่ยวข้องกับ Adidas, โดเมนฟิชชิงของ ISG Latam และโดเมนที่ดูเหมือนถูกสร้างด้วยอัลกอริทึมสำหรับ C&C แต่ยังไม่สามารถยืนยันเส้นทางการบุกรุกจริงได้ - ระหว่างการวิเคราะห์พอร์ทัล Cox Business ในปี 2024 พบ API ที่ใช้ Spring และเอกสาร Swagger หลัง
/api/cbma/และ API บางส่วนจากทั้งหมดราว 700 รายการ แสดงปัญหาการข้ามสิทธิ์ โดยสลับกันตอบกลับข้อผิดพลาดการยืนยันตัวตนกับ200 OK - การข้ามสิทธิ์นี้ทำให้สามารถค้นหาลูกค้า ดู PII ของบัญชี ดู MAC address ของอุปกรณ์ ดู IP ของโมเด็ม อ่าน/เขียนบัญชี Cox Business และ เปลี่ยนการตั้งค่าอุปกรณ์ เช่น เปลี่ยน WiFi SSID ได้ โดยใน PoC SSID ของเขาเองถูกเปลี่ยนเป็น
Curry - Cox ปิด API ที่เปิดเผยภายใน 6 ชั่วโมงหลังได้รับรายงาน และในวันถัดมาก็ไม่สามารถทำซ้ำได้อีก โดยระบุว่าบริการ API ดังกล่าวเริ่มในปี 2023 จึงไม่เกี่ยวข้องกับการบุกรุกโมเด็มในปี 2021 และไม่พบประวัติการถูกใช้โจมตีในอดีต
ทราฟฟิกผิดปกติที่เริ่มจากโมเด็มที่บ้าน
- เพื่อทดสอบช่องโหว่ blind XXE จากเครือข่ายที่บ้าน เขาเปิดเซิร์ฟเวอร์ Python HTTP แบบง่ายบนอินสแตนซ์ AWS และตรวจสอบว่ามีคำขอจากภายนอกเข้ามาหรือไม่
- ทันทีหลังจากคำขอที่ส่งด้วย
curlจากคอมพิวเตอร์ที่บ้านถูกบันทึกตามปกติ IP ไม่ทราบที่มา159.65.76.209ก็ร้องขอ พาธเดียวกัน อีกครั้งหลังผ่านไป 10 วินาที - เมื่อใช้ iPhone Safari ขอพาธอื่น IP เดียวกันก็เล่นซ้ำคำขอเดียวกัน ทำให้ดูเหมือนว่าทราฟฟิกของ ทั้งเครือข่ายที่บ้าน ถูกสังเกต ไม่ใช่แค่คอมพิวเตอร์เครื่องใดเครื่องหนึ่ง
- ปรากฏการณ์เดียวกันเกิดซ้ำกับอินสแตนซ์ AWS ใหม่และ Nginx รวมถึงอินสแตนซ์ GCP ในภายหลัง จึงตัดความเป็นไปได้ที่ AWS ถูกบุกรุกออกไป
- หลังนำเกตเวย์ Cox Panoramic Wifi เดิมไปคืนที่ร้านและเปลี่ยนเป็นอุปกรณ์ใหม่ ทราฟฟิกที่ถูกเล่นซ้ำก็หายไป และในล็อกไม่ปรากฏ “IP อื่น” อีก
การสืบสวน 159.65.76.209
- ตรวจสอบพบว่า IP ดังกล่าวเป็นของ DigitalOcean ไม่ใช่ที่อยู่ของ Cox ISP
- จากบันทึก VirusTotal ใน 5 โดเมนที่เชื่อมต่อล่าสุด มี 3 โดเมนเป็นเว็บไซต์ฟิชชิง และ 2 โดเมนดูเหมือนเมลเซิร์ฟเวอร์
regional.adidas.com.pyisglatam.onlineisglatam.tkmx12.limit742921.tokyomx12.jingoism44769.xyz
isglatam.onlineและisglatam.tkเคยเป็น เว็บไซต์ฟิชชิง ที่มุ่งเป้าบริษัทความมั่นคงปลอดภัยไซเบอร์ในอเมริกาใต้isglatam.com- ตามบันทึกของ URLscan โดเมนที่เกี่ยวข้องกับ ISG Latam ทั้งสองโฮสต์เว็บไซต์ฟิชชิง BeEF ทั่วไป และสามารถตรวจสอบบันทึกที่เกี่ยวข้องได้ใน ผลลัพธ์ urlscan.io
- แม้ IP เดียวกันจะเชื่อมโยงกับ Adidas, ISG Latam และการเล่นซ้ำทราฟฟิกโมเด็ม แต่ก็ยังไม่สามารถตัดความเป็นไปได้ทั้งหมดว่า IP อาจถูกจัดสรรใหม่ระหว่างเจ้าของหลายราย
การวิเคราะห์ที่กลับมาต่ออีกครั้งหลังผ่านไป 3 ปี
- ต้นปี 2024 เพื่อนในวงการความปลอดภัยสังเกตรูปแบบของ
limit742921.tokyoและjingoism44769.xyz - เมื่อค้นหา reverse IP จาก IP ของซับโดเมน
mx1ของlimit742921.tokyoพบโดเมนที่มีรูปแบบเดียวกัน มากกว่า 1,000 โดเมน - ชื่อโดเมนทั้งหมดอยู่ในรูปแบบ
[word][6 numbers].[TLD]- ตัวอย่าง:
acquire543225.biz - ตัวอย่าง:
battery935904.biz - ตัวอย่าง:
grocery634272.biz
- ตัวอย่าง:
- ด้วยการจดทะเบียนจำนวนมากและโครงสร้างที่ดูเป็นอัลกอริทึม ทำให้ดูเหมือน อัลกอริทึมสร้างโดเมน ที่ผู้ปฏิบัติการมัลแวร์ใช้เพื่อซ่อนที่อยู่เซิร์ฟเวอร์ C&C
- โดเมนล่าสุดที่พบถูกจดทะเบียนเมื่อวันที่ 17 มีนาคม 2023 และในขณะนั้นไม่มีโฮสต์ใด resolve ได้อีกแล้ว อีกทั้งไม่พบโดเมนคล้ายกันที่จดทะเบียนบน IP เดียวกัน
สมมติฐานที่เริ่มจากฟังก์ชันจัดการของ ISP และ TR-069
- เจ้าหน้าที่ซัพพอร์ตของ Cox สามารถอัปเดตโมเด็มจากระยะไกล เปลี่ยนรหัสผ่าน WiFi และดูอุปกรณ์ที่เชื่อมต่ออยู่ได้
- การจัดการจากระยะไกลนี้เกี่ยวข้องกับวิธีที่ ISP ใช้โปรโตคอล TR-069 ซึ่งถูกพัฒนาขึ้นในปี 2004 เพื่อจัดการอุปกรณ์ในเครือข่ายผ่านพอร์ต
7547 - ตัว TR-069 เองไม่ได้เปิดเผยสู่ภายนอก และเคยถูกพูดถึงในงาน DEF CON แล้ว ความสนใจจึงย้ายไปที่ เครื่องมือซัพพอร์ตและ API ภายใน ที่เจ้าหน้าที่ใช้
- หากผู้โจมตีต้องการบุกรุกโมเด็ม ก็อาจเล็งโครงสร้างพื้นฐานที่อยู่เบื้องหลังเครื่องมือซัพพอร์ต โดยเฉพาะ API ที่สามารถเปลี่ยนการตั้งค่าอุปกรณ์ลูกค้าหรือรันคำสั่งตามอำเภอใจได้
- การสืบสวนนี้จึงดำเนินไปในทิศทางของการตรวจสอบชั้นความไว้วางใจระหว่าง ISP กับอุปกรณ์ลูกค้า มากกว่าการยืนยันเส้นทางการบุกรุกจริงในปี 2021
โครงสร้าง API ของพอร์ทัล Cox Business
- ในไฟล์ JavaScript ฝั่งฟรอนต์เอนด์
main.36624ed36fb0ff5b.jsของพอร์ทัล Cox Business พบการเรียก API ที่อิงกับ/api/cbma/มากกว่า 100 รายการ - พาธ
/api/cbma/มีพฤติกรรมการตอบกลับแตกต่างจากพาธ/api/อื่น ๆ จึงดูเหมือนเป็น API ที่ถูกพร็อกซีไปยังแบ็กเอนด์แยกจากฟรอนต์เอนด์/api/anything_else/exampleส่งคืนการตอบกลับแบบ redirect/api/cbma/exampleส่งคืน500 Internal Server Error
- คำขอลงทะเบียนมีเฮดเดอร์อย่าง
clientid,Apikey,Cb_session,Authorizationและรูปแบบการตอบกลับดูเหมือนแบ็กเอนด์ที่ใช้ Spring - เมื่อเปลี่ยน HTTP method พบการตอบกลับข้อผิดพลาดของ Spring ยืนยันว่าแบ็กเอนด์ API ใช้ Spring
- ไม่พบพาธ actuator แต่พบพาธ Swagger UI
การโหลดเอกสาร Swagger แบบข้ามข้อจำกัดและ API 700 รายการ
- Swagger UI โหลดขึ้นมาได้ แต่ทรัพยากร static ติด redirect loop ทำให้เอกสารดูว่างเปล่า
- คำขอทรัพยากร static เช่น
.js,.css,.pngดูเหมือนถูก route ไปยังโฮสต์หลัก ไม่ใช่ API proxy - เมื่อเติม
%2fซึ่งเป็น/ที่ถูกเข้ารหัสไว้ท้าย URL ก็สามารถ โหลดทรัพยากร JavaScript แบบ static ผ่าน API proxy ได้ - เมื่อใช้ match-and-replace ของ Burp เติม
%2fให้คำขอทรัพยากร static เอกสาร Swagger ก็แสดงได้ตามปกติ - โดยรวมพบการเรียก API ราว 700 รายการ และส่วนที่เกี่ยวข้องกับฟังก์ชันอุปกรณ์และบัญชีมาก ได้แก่
accountequipment,datainternetgateway,account
การข้ามการยืนยันตัวตนและการเข้าถึงข้อมูลลูกค้า
- เมื่อลองส่งคำขอซ้ำไปยัง GET endpoint ทั้งหมด บางรายการตอบกลับข้อผิดพลาดการยืนยันตัวตน บางรายการตอบกลับ
200 OKและแม้แต่คำขอเดียวกันก็มีผลลัพธ์เปลี่ยนไปเมื่อส่งซ้ำ - endpoint
profilesearchตอนแรกส่งคืนผลการค้นหาว่าง และหลังจากนั้นคำขอเดิมก็สลับกันระหว่างข้อผิดพลาดการยืนยันตัวตนกับการตอบกลับสำเร็จ - เมื่อส่งคำขอซ้ำด้วยคำค้น
coxได้ผลลัพธ์ที่ดูเหมือนโปรไฟล์ลูกค้าธุรกิจของ Cox พร้อมprofileGuid - เมื่อค้นคำว่า
fbiผลลัพธ์ที่ส่งคืนมี ที่อยู่จริง ของสำนักงานภาคสนาม FBI หลายแห่งที่เป็นลูกค้าธุรกิจของ Cox - ปัญหาสิทธิ์เดียวกันส่งผลต่อ API อื่น ๆ ด้วย และหากเล่นคำขอซ้ำหลายครั้ง ก็สามารถเข้าถึงฟังก์ชันผู้ดูแลระบบได้แม้อยู่ในสถานะที่ยังไม่ยืนยันตัวตน
การดู MAC address ของอุปกรณ์และข้อมูลบัญชี
- เมื่อนำ MAC address ของโมเด็มตนเองจากบัญชี Cox ไปใส่ใน API ที่มีพารามิเตอร์
macAddressระบบส่งคืน ที่อยู่ IPv4 ของอุปกรณ์นั้น - ผลลัพธ์นี้ยืนยันว่า API ของเว็บไซต์ Cox Business สามารถสื่อสารกับอุปกรณ์จริงได้
- API รายการอุปกรณ์ที่ใช้ account ID ส่งคืนข้อมูลอุปกรณ์ที่ผูกกับบัญชี
- หมวดหมู่อุปกรณ์
- ชื่อรุ่น
- MAC address
- ข้อมูลพอร์ต
- หมายเลขซีเรียล
- API ค้นหาผู้ใช้ตามอีเมลส่งคืนข้อมูลบัญชีธุรกิจ เช่น ชื่อ หมายเลขโทรศัพท์ สถานะ ประเภทผู้ใช้ สถานะว่าเป็นเจ้าของโปรไฟล์หรือไม่ และอีเมลสำรอง
- คำขอ POST สำหรับอัปเดตบัญชีที่คล้ายกันก็ทำงานได้ ยืนยันว่า อ่านและเขียน บัญชีธุรกิจได้
encryptedValue และการเปลี่ยนการตั้งค่าอุปกรณ์
- คำขอเปลี่ยนการตั้งค่าอุปกรณ์ต้องมีพารามิเตอร์
encryptedValue - ฟังก์ชัน
encryptWithSaltandPaddingและdecryptWithSaltandPaddingภายใน JavaScript ถูกใช้เพื่อเข้ารหัสและถอดรหัสค่าด้วย AES - PIN 4 หลักที่ตั้งตอนลงทะเบียนบัญชีก็ถูกเข้ารหัสด้วยฟังก์ชันเดียวกัน จึงสามารถคว้าบริบทการทำงานของฟังก์ชันดังกล่าวใน browser debugger ได้
- เมื่อถอดรหัส
encryptedValueที่อยู่ในการตอบกลับของอุปกรณ์จากบัญชีของคนรู้จักที่ใช้ Cox Business พบว่ามีองค์ประกอบดังนี้- หมายเลขบัญชี Cox
- ชื่ออุปกรณ์
- ID อุปกรณ์
- ค่าที่ไม่ทราบ
- MAC address
- ป้ายกำกับ
- แม้ใส่ค่าใดก็ได้ในหมายเลขบัญชีและ ID อุปกรณ์ แล้วคงไว้เฉพาะ MAC address ที่ถูกต้องก่อนเข้ารหัสสตริงกลับไป คำขอก็ยังสำเร็จ ยืนยันว่าเซิร์ฟเวอร์ไม่ได้ตรวจสอบ ความสอดคล้องระหว่าง MAC address กับบัญชี
ความเป็นไปได้ในการเปลี่ยนการตั้งค่าโมเด็มตามอำเภอใจ
- เขาส่งคำขอ POST เพื่อเปลี่ยน WiFi SSID โดยกำหนดเป้าหมายเป็น MAC address ของอุปกรณ์ตนเอง
- การตอบกลับคือ
200 OKและSuccessจากนั้นเครือข่ายออฟไลน์ชั่วคราว - ประมาณ 5 นาทีต่อมา เครือข่ายรีบูตและ SSID ถูกเปลี่ยนเป็น
Curry - PoC นี้แสดงให้เห็นว่า API อัปเดตการกำหนดค่าอุปกรณ์ทำงานจริง และผู้โจมตีสามารถเขียนทับการตั้งค่าอุปกรณ์ผ่าน API ได้
- สิทธิ์ดังกล่าวอยู่ในระดับคล้ายฝ่ายเทคนิคซัพพอร์ตของ ISP และอาจกระทบอุปกรณ์ Cox หลายล้านเครื่องที่เข้าถึงได้ผ่าน API
ขอบเขตผลกระทบและลำดับการโจมตีที่เป็นไปได้
- การรวมกันของช่องโหว่สร้างเส้นทางที่ผู้โจมตีจากภายนอกโดยไม่ต้องมีเงื่อนไขล่วงหน้า สามารถ เปลี่ยนการตั้งค่าโมเด็มหลายล้านเครื่อง เข้าถึง PII ของลูกค้าธุรกิจ และได้สิทธิ์ระดับทีมซัพพอร์ตของ ISP
- Cox เป็นผู้ให้บริการบรอดแบนด์เอกชนรายใหญ่ที่สุดในสหรัฐฯ ผู้ให้บริการเคเบิลทีวีรายใหญ่อันดับสาม และผู้ให้บริการโทรศัพท์รายใหญ่อันดับเจ็ด มีลูกค้าหลายล้านราย และเป็น ISP ที่ได้รับความนิยมสูงสุดใน 10 รัฐ
- ลำดับการโจมตีที่เป็นไปได้มีดังนี้
- ค้นหาเป้าหมายธุรกิจ Cox ด้วยชื่อ หมายเลขโทรศัพท์ อีเมล และหมายเลขบัญชี
- ใช้ UUID ที่ส่งคืนเพื่อดู PII ของบัญชี, MAC address ของอุปกรณ์, อีเมล, หมายเลขโทรศัพท์ และที่อยู่
- ใช้ MAC address ของอุปกรณ์เพื่อดูรหัสผ่าน WiFi และอุปกรณ์ที่เชื่อมต่อ
- รันคำสั่งตามอำเภอใจ อัปเดตคุณสมบัติอุปกรณ์ และยึดบัญชีเหยื่อ
- API ที่เปิดเผยมี มากกว่า 700 รายการ และหลายรายการให้ฟังก์ชันผู้ดูแลระบบ เช่น การดูอุปกรณ์ที่เชื่อมต่อกับโมเด็ม
- API แต่ละรายการประสบปัญหาสิทธิ์แบบเดียวกัน ซึ่งสามารถรันคำสั่งที่ไม่ได้รับอนุญาตได้ด้วยการส่งคำขอซ้ำ
การรายงาน แพตช์ และข้อสงสัยที่ยังเหลือ
- ช่องโหว่ถูกรายงานผ่าน responsible disclosure program ของ Cox
- Cox ปิดการเรียก API ที่เปิดเผยภายใน 6 ชั่วโมง และในวันถัดมาก็ไม่สามารถทำซ้ำช่องโหว่ได้อีก
- จากการสืบสวนของ Cox ไม่พบประวัติการใช้เวกเตอร์นี้โจมตีในอดีต และบริการที่มีช่องโหว่เริ่มในปี 2023 จึงไม่สามารถถูกใช้ในการบุกรุกโมเด็มปี 2021 ได้
- Cox แจ้งว่าไม่มีความเกี่ยวข้องใด ๆ กับ IP ของ DigitalOcean ดังนั้นโมเด็มเดิมจึงยังคงเป็นกรณีที่ถูกบุกรุกด้วยวิธีอื่น ไม่ใช่วิธีที่เปิดเผยในบทความนี้
- เนื่องจากส่งคืนโมเด็มเดิมไปแล้ว จึงไม่สามารถทำ firmware dump หรือวิเคราะห์ forensic ได้ และยังไม่ทราบเหตุผลที่ต้องเล่นทราฟฟิกซ้ำ
ไทม์ไลน์การเปิดเผย
- 2024-03-04: รายงานช่องโหว่ผ่านโปรแกรม responsible disclosure ของ Cox
- 2024-03-05: ใช้ hotpatch โดย endpoint ธุรกิจที่ไม่จำเป็นส่งคืน
403และหยุดทำงาน - 2024-03-06: ส่งอีเมลถึง Cox ว่าไม่สามารถทำซ้ำช่องโหว่ได้อีกแล้ว
- 2024-03-07: Cox ตอบกลับว่าจะเริ่มการตรวจสอบความปลอดภัยอย่างครอบคลุม
- 2024-04-10: แจ้ง Cox ว่าตั้งใจจะเปิดเผยหลังรายงานครบ 90 วัน
- 2024-04-29: แชร์ลิงก์ร่างบล็อกกับ Cox
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
หวังว่า xrayarx จะโอเคกับเรื่องนี้ เรามีแผนจะทำระบบ แบ่งคาร์มา สำหรับกรณีแบบนี้ให้ถูกต้อง แต่ก่อนจะถึงตอนนั้น บางครั้งก็ต้องพึ่งวิธีทำมือแบบทื่อ ๆ อย่างนี้