Truebit Protocol ถูกแฮก 26.44 ล้านดอลลาร์ การวิเคราะห์ช่องโหว่สัญญา
- ประเด็นหลัก: Truebit Protocol ถูกโจมตีโดยแฮกเกอร์เนื่องจากช่องโหว่ Integer Overflow
- องค์ประกอบสำคัญ:
- สูญเสีย ETH ประมาณ 26.44 ล้านดอลลาร์
- ช่องโหว่เกิดจากข้อบกพร่องในตรรกะการคำนวณของ Solidity เวอร์ชันเก่า
- ผู้โจมตีกระตุ้นให้เกิด Overflow โดยการป้อนค่าที่มีขนาดใหญ่มาก
- ผลกระทบต่อตลาด: เป็นการเตือนให้ตรวจสอบความปลอดภัยอย่างเร่งด่วนสำหรับโปรโตคอล DeFi ที่เก่า
- ป้ายกำกับความทันเวลา: ผลกระทบระยะสั้น
8 มกราคม 2026, Truebit Protocol ถูกแฮ็ก สูญเสีย 8,535.36 ETH (ประมาณ 26.44 ล้านดอลลาร์สหรัฐ) และทีมงานอย่างเป็นทางการของ Truebit Protocol ได้ยืนยันเรื่องนี้ในโพสต์ช่วงเช้ามืดของวันถัดมา ทีมความปลอดภัย ExVul ได้ทำการวิเคราะห์ช่องโหว่โดยละเอียดสำหรับเหตุการณ์โจมตีครั้งนี้ ผลการวิเคราะห์มีดังนี้:
ขั้นตอนการโจมตี
ที่อยู่ของผู้โจมตี:
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
แฮชธุรกรรมการโจมตี:
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
ผู้โจมตีดำเนินการโจมตีโดยเรียกธุรกรรม getPurchasePrice→0xa0296215→0xc471b10b เป็นวงจร 4 รอบ มาวิเคราะห์โดยใช้รอบแรกเป็นตัวอย่าง
1. ผู้โจมตีเรียกฟังก์ชัน getPurchasePrice(240442509453545333947284131) ก่อน ซึ่งส่งคืนค่า 0

2. ผู้โจมตีเรียกฟังก์ชัน 0xa0296215(c6e3ae8e2cbab1298abaa3) โดยที่ msg.value เป็น 0 สุดท้ายก็铸造 (mint) TRU จำนวน 240442509453545333947284131 เหรียญสำเร็จ

3. ผู้โจมตีเรียกฟังก์ชัน 0xc471b10b(c6e3ae8e2cbab1298abaa3) สุดท้ายก็ทำลาย (burn) TRU จำนวน 240442509453545333947284131 เหรียญ และได้รับ ETH จำนวน 5105.06 เหรียญ
การวิเคราะห์ตรรกะการโจมตี
จากการทำความเข้าใจขั้นตอนการโจมตีข้างต้น จะเห็นได้ชัดว่ามีปัญหาตรรกะในฟังก์ชัน getPurchasePrice และฟังก์ชัน 0xa0296215 ต่อไปนี้จะเริ่มวิเคราะห์อย่างลึกซึ้ง (เนื่องจากสัญญาไม่ได้เปิดซอร์สโค้ด โค้ดด้านล่างทั้งหมดเป็นโค้ดที่ถอดรหัสแล้ว)


จากการเปรียบเทียบจุดร่วมของฟังก์ชันทั้งสอง เราจะพบว่าฟังก์ชัน 0x1446 ใช้เพื่อคำนวณว่า需要多少 ETH ในการซื้อ TRU จำนวนที่กำหนด ชัดเจนว่าตรรกะของฟังก์ชัน 0x1446 มีปัญหา ทำให้การคำนวณ ETH ผิดพลาด ต่อไปจะวิเคราะห์ตรรกะในฟังก์ชัน 0x1446 โดยละเอียด

จากการสังเกตตรรกะในฟังก์ชัน 0x1446 เนื่องจากผลลัพธ์การคำนวณสุดท้าย v13 == 0 ดังนั้นปัญหาต้องเกิดจากตรรกะการคำนวณข้างต้น สิ่งที่ต้องเข้าใจคือฟังก์ชัน 0x18ef มีฟังก์ชันการทำงานเหมือนกับ _SafeMul ดังนั้นปัญหาจึงอยู่ที่การใช้การบวกแบบเนทีฟ v12 + v9 (เวอร์ชันสัญญาคือ ^0.6.10 ดังนั้นจึงไม่มีตรวจสอบการล้น)
v12 และ v9 แทนค่าดังต่อไปนี้:

จากการวิเคราะห์ข้างต้น แนวคิดการโจมตีของผู้โจมตีคือการป้อนค่า _amountIn ที่ใหญ่มาก ทำให้ v12 + v9 ล้น (overflow) กลายเป็นค่าที่น้อยมาก สุดท้ายทำให้ (v12 + v9) / v6 == 0
สรุป
สาเหตุพื้นฐานของเหตุการณ์โจมตี Truebit Protocol ครั้งนี้อยู่ที่ตรรกะการคำนวณราคาซื้อโทเค็นที่มีช่องโหว่การล้นของจำนวนเต็ม (integer overflow) ร้ายแรง เนื่องจากสัญญาใช้ Solidity เวอร์ชัน ^0.6.10 และไม่ได้ตรวจสอบความปลอดภัยสำหรับการดำเนินการทางคณิตศาสตร์ที่สำคัญ สุดท้ายจึงก่อให้เกิดความสูญเสียครั้งใหญ่ 8,535.36 ETH ปัจจุบัน Solidity เวอร์ชันใหม่ได้บรรเทาช่องโหว่การล้นในตัวแล้ว เหตุการณ์โจมตีครั้งนี้น่าจะเป็นช่องโหว่ที่แฮ็กเกอร์ค้นพบโดยใช้ AI สแกนอัตโนมัติในโปรโตคอล DeFi เก่าที่เปิดตัวไปแล้วบางส่วน (รวมถึงการโจมตี Balancer และ yETH เมื่อไม่นานมานี้) เราคิดว่าเหตุการณ์โจมตีที่ใช้ AI โจมตีโปรโตคอล DeFi เก่าบางส่วนเช่นนี้จะมีมากขึ้นเรื่อยๆ ในช่วงเวลาที่ใกล้เข้ามา ดังนั้นจึงแนะนำให้ทีมโครงการสามารถทำการตรวจสอบความปลอดภัยใหม่สำหรับโค้ดสัญญา หากพบช่องโหว่ จำเป็นต้องอัปเกรดสัญญาหรือโอนย้ายสินทรัพย์โดยเร็วที่สุด และควรทำการตรวจสอบบนเชน (on-chain monitoring) เพื่อตรวจจับความผิดปกติได้ทันเวลา และลดความสูญเสียให้เหลือน้อยที่สุด


