การสูญเสียมากกว่า 150 ล้านดอลลาร์ โปรโตคอลสะพานข้ามโซ่ การวิเคราะห์การวิเคราะห์การแฮ็คของ
ผู้เขียนต้นฉบับ:Samczsun, หุ้นส่วนที่ Paradigm
รวบรวมข้อความต้นฉบับ: The Way of DeFi
รวบรวมข้อความต้นฉบับ: The Way of DeFisamczsunเมื่อวันที่ 2 สิงหาคม Nomad โปรโตคอล cross-chain bridge ถูกโจมตี และเงินของผู้ใช้มากกว่า 150 ล้านดอลลาร์ถูกโอนโดยแฮ็กเกอร์
เหตุการณ์ด้านความปลอดภัยนี้ได้รับการวิเคราะห์

Nomad เพิ่งเสียเงินไป 150 ล้านดอลลาร์จากการแฮ็ก Web3 ที่ยุ่งเหยิงที่สุดเท่าที่เคยมีมา แล้วสิ่งนี้เกิดขึ้นได้อย่างไร และอะไรคือสาเหตุที่แท้จริง? ให้ฉันพาคุณไปเบื้องหลังการโจมตีครั้งนี้

ทุกอย่างเริ่มต้นด้วยทวีต @spreekaway ที่แชร์โดย @officer_cia ในช่องโทรเลข ETHSecurity และในขณะที่ฉันไม่รู้ว่าเกิดอะไรขึ้นในเวลานั้น จำนวนทรัพย์สินที่ออกจาก Nomad cross-chain bridge นั้นไม่ใช่สัญญาณที่ดี .

ความคิดแรกของฉันคือมีการกำหนดค่าจุดทศนิยมของโทเค็นผิดพลาด ท้ายที่สุดแล้ว สะพานข้ามโซ่ดูเหมือนจะมีโปรโมชั่น "ส่ง 0.01 WBTC รับ 100 WBTC คืน"
https://moonscan.io/tx/0xcca9299c739a1b538150af007a34aba516b6dade1965e80198be021e3166fe4c
https://etherscan.io/tx/0xa5fe9d044e4f3e5aa5bc4c0709333cd2190cba0f4e7f16bcf73f49f83e4a5460


อย่างไรก็ตาม หลังจากการขุดด้วยตนเองที่เจ็บปวดบนเครือข่าย Moonbeam ฉันยืนยันว่าธุรกรรม Moonbeam ทำธุรกรรมข้ามเชน 0.01 WBTC แต่ธุรกรรม Ethereum ข้ามเชน 100 WBTC

นอกจากนี้ การทำธุรกรรมข้ามเครือข่ายของ WBTC ไม่ได้พิสูจน์อะไรเลย มันแค่เรียก `กระบวนการ ' โดยตรง ซึ่งเป็นเรื่องที่แย่มากที่จะสามารถประมวลผลข้อความโดยไม่พิสูจน์ก่อน

ในขณะนี้ มีความเป็นไปได้สองประการ ไม่ว่าจะเป็นการพิสูจน์ที่ส่งแยกกันในบล็อกก่อนหน้า หรือมีช่องโหว่ร้ายแรงในสัญญาแบบจำลอง อย่างไรก็ตาม ยังไม่มีวี่แววว่าจะมีอะไรได้รับการพิสูจน์เมื่อเร็วๆ นี้

นั่นทำให้มีความเป็นไปได้เพียงอย่างเดียว นั่นคือมีช่องโหว่ร้ายแรงในสัญญาแบบจำลอง แล้วเกิดอะไรขึ้น? การดูอย่างรวดเร็วแสดงให้เห็นว่าข้อความที่คอมมิตต้องเป็นของรูทที่ยอมรับได้ มิฉะนั้น การตรวจสอบในบรรทัดที่ 185 จะล้มเหลว

โชคดีที่มีวิธีง่ายๆ ในการตรวจสอบสมมติฐานนี้ ฉันรู้ว่ารูทของข้อความที่ไม่ผ่านการรับรองจะเป็น 0x00 เนื่องจากข้อความ[_messageHash] จะไม่ได้รับการเตรียมใช้งาน สิ่งที่ฉันต้องทำคือตรวจสอบว่าสัญญาจะยอมรับสิ่งนี้หรือไม่

ทำไม……


ปรากฎว่าระหว่างการอัปเกรดตามปกติ ทีม Nomad เริ่มต้น root of trust เป็น 0x00 เพื่อให้ชัดเจน เป็นเรื่องปกติที่จะใช้ศูนย์เป็นค่าเริ่มต้น น่าเสียดายที่ในกรณีนี้ มีผลข้างเคียงเล็กน้อยในการตรวจสอบทุกข้อความโดยอัตโนมัติ
นี่คือสิ่งที่ทำให้การแฮ็กยุ่งเหยิง คุณไม่จำเป็นต้องรู้อะไรเช่น Solidity หรือ Merkle tree สิ่งที่คุณต้องทำคือค้นหาธุรกรรมที่ถูกต้อง ค้นหา/แทนที่ที่อยู่ของบุคคลอื่นด้วยที่อยู่ของคุณ และเผยแพร่ใหม่
โดยรวมแล้ว การอัปเกรดตามปกติทำเครื่องหมายแฮชเป็นศูนย์ว่าเป็นรูทที่ถูกต้อง ซึ่งมีผลทำให้สามารถปลอมแปลงข้อความบน Nomad ได้ ผู้โจมตีใช้ฟีเจอร์นี้ในทางที่ผิดเพื่อคัดลอก/วางธุรกรรม และทำให้เงินทุนหมดอย่างรวดเร็วในการต่อสู้ระยะประชิดที่บ้าคลั่ง สะพานโซ่


