ตามข่าวกรองของ Slow Mist District เมื่อวันที่ 28 มกราคม 2022 QBridge ของโครงการ Qubit ถูกโจมตี ทำให้สูญเสียเงินไปประมาณ 80 ล้านดอลลาร์สหรัฐ ทีมรักษาความปลอดภัยของ SlowMist ได้ทำการวิเคราะห์และแบ่งปันกับคุณในรูปแบบของการวิเคราะห์สั้นๆ
วิเคราะห์สั้นๆ
1. ผู้โจมตีดำเนินการฝากเงินผ่านสัญญา QBridge บน ETH และส่งผ่านข้อมูลซึ่งประกอบด้วย ID ปลายทางของโดเมนเป้าหมายที่จะข้าม, รหัสทรัพยากรสินทรัพย์ของสินทรัพย์ข้ามโซ่ที่จะถูกข้าม, จำนวนของการข้าม กองทุนลูกโซ่และที่อยู่รับเงินเมื่อฝาก
2. ผู้โจมตีระบุว่ารหัสทรัพยากรขาเข้าเป็นค่าที่โทเค็นข้าม ETH ต้องการ แต่จะเรียกใช้ฟังก์ชันฝากของ QBridge แทนฟังก์ชันฝาก ETH ดังนั้นการตรวจสอบจำนวนเงินข้ามสายโซ่และ msg.value คือ ข้ามครั้งแรก ฟังก์ชันการฝากเงินจะนำที่อยู่ของตัวจัดการออกจากการแมปตามทรัพยากร ID เพื่อเติมเงิน เนื่องจากผู้โจมตีส่งผ่านค่าที่ต้องการโดยโทเค็นข้าม ETH จริง ฟังก์ชันการฝากเงินของสัญญาตัวจัดการจึงสามารถเรียกใช้ได้สำเร็จ
3. ฟังก์ชันการฝากของสัญญาตัวจัดการจะตรวจสอบว่า Token ที่จะเติมตาม ResourceID นั้นอยู่ใน Whitelist หรือไม่ เนื่องจาก ResourceID ที่ผู้โจมตีส่งมานั้นสอดคล้องกับ ETH Token ที่จะเติมในการแมปจึงเป็น 0 ที่อยู่และจะถือว่าเป็นการเติม ETH และผ่านการตรวจสอบรายการที่อนุญาต อย่างไรก็ตาม ฟังก์ชันการฝากเงินไม่ได้ตรวจสอบที่อยู่โทเค็นที่จะเติมเงินอีกครั้ง (การเติม ETH ควรเป็นแบบข้ามสายโซ่ผ่านฟังก์ชัน ฝาก ETH) จากนั้นจึงเรียกฟังก์ชัน TransferFrom ของโทเค็นโดยตรงเพื่อชาร์จผ่าน safeTransferFrom
4. เนื่องจากที่อยู่โทเค็นที่จะเติมเงินคือที่อยู่ 0 และผลการดำเนินการของการเรียกไปยังที่อยู่ EOA โดยไม่มีขนาดรหัสจะเป็นจริงและค่าที่ส่งคืนจะว่างเปล่า ดังนั้นการดำเนินการโอนผ่านการโอนจากผ่านการตรวจสอบ safeTransferFrom และในที่สุดก็ทำให้เกิดเหตุการณ์เติมเงิน Deposit Cross-chain
5. เนื่องจากรหัสทรัพยากรขาเข้าเป็นค่าที่จำเป็นสำหรับการข้าม ETH เหตุการณ์การฝากที่ทริกเกอร์จะเหมือนกับเหตุการณ์การเติมเงินจริงของ ETH ซึ่งทำให้ QBridge คิดว่าผู้โจมตีดำเนินการข้ามสาย ETH ดังนั้นจึงถูกส่งต่อไป ห่วงโซ่ BSC สำหรับผู้โจมตี โทเค็น qXETH จำนวนมาก ผู้โจมตีใช้ข้อมูลรับรอง qXETH นี้เพื่อระบายแหล่งเงินกู้ของ Qubit
การวิเคราะห์ MistTrack
สรุป
สรุป
เหตุผลหลักสำหรับการโจมตีครั้งนี้คือ เมื่อมีการรีชาร์จโทเค็นธรรมดาและโทเค็นดั้งเดิมแยกกัน เมื่อโทเค็นในรายการที่อนุญาตถูกถ่ายโอน ที่อยู่จะไม่ถูกตรวจสอบอีกครั้งเพื่อดูว่าเป็น 0 หรือไม่ ส่งผลให้การชาร์จซ้ำควรดำเนินการผ่าน ฟังก์ชันการชาร์จแบบเนทีฟ อย่างไรก็ตาม การดำเนินการสามารถผ่านตรรกะการเติมโทเค็นทั่วไปได้อย่างราบรื่น ทีมรักษาความปลอดภัยของ SlowMist แนะนำว่าหลังจากตรวจสอบรายการที่อนุญาตพิเศษของโทเค็นที่รีชาร์จแล้ว ยังจำเป็นต้องตรวจสอบว่าโทเค็นที่รีชาร์จนั้นเป็นโทเค็นดั้งเดิมหรือไม่
ลิงค์ต้นฉบับ
https://etherscan.io/tx/0x478d83f2ad909c64a9a3d807b3d8399bb67a997f9721fc5580ae2c51fab92acf
https://bscscan.com/tx/0x33628dcc2ca6cd89a96d241bdf17cdc8785cf4322dcaf2c79766c990579aea02