BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

50 ล้าน USDT แลกกลับเป็น 35,000 ดอลลาร์ AAVE: ภัยพิบัติเกิดขึ้นได้อย่างไร? และเราควรโทษใคร?

Ethanzhang
Odaily资深作者
@ethanzhang_web3
2026-03-13 12:44
บทความนี้มีประมาณ 6410 คำ การอ่านทั้งหมดใช้เวลาประมาณ 10 นาที
เนื่องจากข้อบกพร่องร้ายแรงในเส้นทางการซื้อขาย การดำเนินการ DeFi มูลค่า 50 ล้านดอลลาร์ถูกดำเนินการโดยแทบไม่มีระบบป้องกันใดๆ ส่งผลให้เงินทุนเกือบทั้งหมดระเหยหายไปในสระสภาพคล่องขนาดเล็ก
สรุปโดย AI
ขยาย
  • ประเด็นหลัก: บทความนี้วิเคราะห์อย่างลึกซึ้งถึงเหตุการณ์การสูญเสียสินทรัพย์ครั้งใหญ่ที่เกิดจากข้อบกพร่องในการออกแบบระบบเส้นทางการซื้อขาย ชี้ให้เห็นว่าปัญหาหลักอยู่ที่กลไกการตรวจสอบหลายชั้นของระบบที่ล้มเหลวในระดับความสมเหตุสมผลทางเศรษฐกิจ ไม่ใช่ช่องโหว่ของโปรโตคอลพื้นฐานหรือความผิดพลาดของผู้ใช้
  • องค์ประกอบสำคัญ:
    1. เหตุการณ์นี้มีลักษณะเป็นผู้ใช้เริ่มต้นการหมุนเวียนหลักประกัน (aEthUSDT แลก aEthAAVE) มูลค่า 50.4 ล้านดอลลาร์ผ่านอินเทอร์เฟซของ Aave และได้รับ AAVE มูลค่าเพียง 35,900 ดอลลาร์ในท้ายที่สุด ส่งผลให้สูญเสียอย่างหนัก
    2. เส้นทางการซื้อขายได้นำเงินทุนจำนวนมหาศาลไปยังสระสภาพคล่องต่ำของ SushiSwap ที่มี AAVE ประมาณ 331 โทเค็นเท่านั้น ปริมาณ WETH ที่ป้อนเข้ามามีขนาดใหญ่กว่าสำรองในสระประมาณ 1,017 เท่า ส่งผลให้ราคาดำเนินการเบี่ยงเบนจากราคาสปอตเกิน 1,000 เท่า
    3. ช่องโหว่หลักอยู่ที่ตรรกะการแข่งขันการเสนอราคาของโปรโตคอล CoW ซึ่งการตัดสิน "ความสมเหตุสมผล" ขึ้นอยู่กับค่าธรรมเนียม Gas เป็นบวกและจำนวนเงินขาออกไม่เป็นศูนย์เท่านั้น ขาดการตรวจสอบความเบี่ยงเบนของราคาและการประเมินความเสี่ยงด้านสภาพคล่อง
    4. อินเทอร์เฟซส่วนหน้าของ Aave ได้ปิดใช้งานข้อมูลเฉพาะของอะแดปเตอร์เมื่อขอเสนอราคา ส่งผลให้การเสนอราคาไม่สอดคล้องกับเนื้อหาการดำเนินการสุดท้ายอย่างสมบูรณ์ และการเตือนความเสี่ยงจากการกระทบราคาสูงเป็นเพียงช่องทำเครื่องหมายยืนยัน ไม่ใช่การบล็อกแบบแข็ง
    5. มูลค่าที่ผู้ใช้สูญเสียไปถูกจับโดยผู้ค้าเก็งกำไร MEV ในบล็อกเดียวกัน การค้าเก็งกำไรแบบกลับทิศทางเกิดขึ้นทันทีหลังการดำเนินการซื้อขาย ซึ่งพิสูจน์ว่าการซื้อขายที่ผิดปกตินั้นเองที่สร้างความบิดเบือนของราคา
    6. ความรับผิดชอบหลักอยู่ที่ระบบเส้นทาง/การเสนอราคาของโปรโตคอล CoW ที่ขาดการตรวจสอบความสมเหตุสมผลทางเศรษฐกิจ และความรับผิดชอบรองอยู่ที่มาตรการควบคุมความเสี่ยงของอินเทอร์เฟซส่วนหน้าของ Aave ที่ไม่เพียงพอ

บทความนี้มาจาก: @Ehsan1579

รวบรวมและเรียบเรียงโดย | Odaily (@OdailyChina) ; ผู้แปล | Ethan (@ethanzhang_web 3)

หากดูเพียงหัวข้อเหตุการณ์ อาจเข้าใจผิดคิดว่านี่เป็นการโจมตีโดยใช้ช่องโหว่

หัวใจของเหตุการณ์คือ: มีคนแลก USDT มูลค่า 50.4 ล้านดอลลาร์ และสุดท้ายได้ AAVE มูลค่าเพียง 35,900 ดอลลาร์เท่านั้น

ครั้งแรกที่ผมได้ยินเรื่องนี้ ผมตกใจมาก ดังนั้น ผมจึงได้ตรวจสอบเหตุการณ์ทั้งหมดอย่างละเอียด: การติดตามธุรกรรม เส้นทางของตัวแก้ปัญหา การเรียกใช้สัญญา สำรองข้อมูลในอดีต ข้อมูลการชำระเงิน กระบวนการอะแดปเตอร์ รหัสอินเทอร์เฟซของ Aave, CoW Flash Loan SDK และรหัสเส้นทางที่ตัดสินว่าคำเสนอราคา "สมเหตุสมผล" หรือไม่

นี่ไม่ใช่การแฮ็ก​ โปรโตคอลหลักของ Aave ไม่มีปัญหา การชำระเงินของ CoW ไม่มีปัญหา Uniswap ไม่มีปัญหา SushiSwap ไม่มีปัญหา ธุรกรรมนี้ใช้ได้ ลายเซ็นใช้ได้ สัญญาทั้งหมดทำงานตามโค้ดอย่างเคร่งครัด อย่างไรก็ตาม มูลค่าทางเศรษฐกิจเกือบทั้งหมดถูกทำลาย เพียงเพราะมันได้รับอนุญาตให้ใช้เส้นทางที่ไร้สาระอย่างยิ่ง

บล็อกเชนสาธารณะไม่มีปัญหา ปัญหาอยู่ที่เส้นทาง

ในมุมมองของผม การสรุปเรื่องนี้อย่างผิวเผินว่าเป็นเพียง "ความผิดพลาดของผู้ใช้" ไม่ใช่ทัศนคติที่ตรงไปตรงมาและเข้มงวด แน่นอนว่าผู้ใช้ได้ลงลายเซ็นในคำสั่งซื้อ แต่ระบบซอฟต์แวร์ทั้งหมดกลับอนุญาตให้ดำเนินการหมุนเวียนหลักประกันเกือบ 50 ล้านดอลลาร์ ตั้งแต่การเสนอราคา การลงลายเซ็น การวางแผนเส้นทาง ไปจนถึงการดำเนินการสุดท้าย และกระบวนการทั้งหมดชี้ไปที่พูลสภาพคล่องต่ำที่มี AAVE เพียงประมาณ 331 โทเค็น นี่ไม่ควรเป็นสิ่งที่เกิดขึ้นได้เลย อย่างน้อยระบบควรปฏิเสธและหยุดการดำเนินการก่อนขั้นตอนการชำระเงิน

การติดตามข้อมูลหลักของธุรกรรม

แฮชธุรกรรมผิดปกติครั้งนี้คือ: 0x9fa9feab3c1989a33424728c23e6de07a40a26a98ff7ff5139f3492ce430801f ยืนยันบน Ethereum Mainnet ที่ความสูงบล็อก 24643151 เมื่อวันที่ 12 มีนาคม 2026 ดัชนีธุรกรรมคือ 1 ใช้แก๊ส 3,780,570 หน่วย การดำเนินการธุรกรรมสำเร็จ ที่อยู่กระเป๋าสตางค์ที่เป็นเจ้าของคำสั่งซื้อขึ้นต้นด้วย 0x98b9 ที่อยู่ผู้แก้ปัญหาที่ดำเนินการธุรกรรมจริง (ผู้ส่งธุรกรรม) ขึ้นต้นด้วย 0x3980 ถูกทำเครื่องหมายว่าเป็น tsolver ในข้อมูลการแข่งขันของ CoW

ก่อนอื่นต้องเข้าใจว่านี่ไม่ใช่การแลกเปลี่ยน USDT เป็น AAVE ระดับกระเป๋าสตางค์อย่างง่าย โทเค็นที่ขายคือ aEthUSDT ซึ่งเป็นใบรับรองการฝาก USDT ที่ให้ผลผลิตบนแพลตฟอร์ม Aave โทเค็นที่ซื้อคือ aEthAAVE ซึ่งเป็นใบรับรองการฝาก AAVE ที่ให้ผลผลิตบนแพลตฟอร์ม Aave ดังนั้น นี่คือการหมุนเวียนหลักประกัน Aave ผ่านระบบการชำระเงินของโปรโตคอล CoW และกระบวนการอะแดปเตอร์ Flash Loan

ก่อนทำธุรกรรม กระเป๋าสตางค์นี้มี aEthUSDT ประมาณ 50,432,693.075254 โทเค็น และ aEthAAVE 0 โทเค็น หลังทำธุรกรรม เหลือ aEthUSDT เพียง 4.980399 โทเค็น และได้รับ aEthAAVE 327.241335505966487788 โทเค็น อันที่จริง กระเป๋าสตางค์นี้ขายตำแหน่งเกือบทั้งหมดออกไป

เมตาดาต้าชี้ให้เห็นชัดเจนยิ่งขึ้นว่า เส้นทางนี้เป็น "พิษ" ก่อนการดำเนินการ คำสั่งซื้อมาจากกระบวนการ aave-v3-interface-collateral-swap API ของ CoW แสดงว่าเป็นคำสั่งขายที่ลงลายเซ็นแล้ว และเมตาดาต้าแอปพลิเคชันระบุว่าเป็นการสลับหลักประกันแบบตลาดโดยใช้ Smart Slippage 121 จุดพื้นฐาน จำนวนขายที่ลงลายเซ็นคือ aEthUSDT 50,432,688.41618 โทเค็น จำนวนซื้อขั้นต่ำที่ลงลายเซ็นคือ aEthAAVE 324.949260918413591035 โทเค็น การชำระเงินจริงจ่าย aEthAAVE 327.241335505966487788 โทเค็น

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

เส้นทางที่นำไปสู่การล่มสลายอย่างสมบูรณ์

เมื่อคุณติดตามการติดตามธุรกรรม กระบวนการทั้งหมดจะตรงไปตรงมาอย่างโหดร้าย

การไหลของเงินระดับบนหลักๆ อาศัยสัญญาการชำระเงิน GPv2Settlement ของโปรโตคอล CoW ที่ขึ้นต้นด้วย 0x9008 ก่อนอื่น สัญญา HooksTrampoline ที่ขึ้นต้นด้วย 0x60bf ดำเนินการอนุญาต aEthUSDT ทำให้ตัวรีเลย์คลังของ CoW สามารถถอนสินทรัพย์ของผู้ใช้ได้โดยไม่ต้องมีการอนุญาตธุรกรรมแยกต่างหาก จากนั้น สัญญา GPv2VaultRelayer ที่ขึ้นต้นด้วย 0xc92e ถอน aEthUSDT 50432688.41618 โทเค็นจากกระเป๋าสตางค์ของผู้ใช้เข้าสู่กระบวนการชำระเงิน จนถึงขั้นตอนนี้ การดำเนินการทั้งหมดเป็นไปตามตรรกะปกติ

สัญญาการชำระเงินจากนั้นมอบสิทธิ์การดำเนินการ aEthUSDT ให้กับสัญญาช่วยเหลือที่ไม่ได้เปิดเผยซอร์สโค้ดที่ขึ้นต้นด้วย 0xd524 และเริ่มการเรียกผ่านฟังก์ชันเซเลกเตอร์ 0x494b3137; สัญญาช่วยเหลือนี้ส่งต่อสิทธิ์การดำเนินการไปยังสัญญาตัวดำเนินการที่ไม่ได้เปิดเผยซอร์สโค้ดที่ขึ้นต้นด้วย 0x699c ณ จุดนี้ ภาพรวมของเส้นทางธุรกรรมที่ผิดปกติทั้งหมดถูกเปิดเผยอย่างสมบูรณ์

การเรียกที่มีประสิทธิภาพครั้งแรกชี้ไปที่สัญญาพูล Aave ที่ขึ้นต้นด้วย 0x87870 ผ่านฟังก์ชัน withdraw (เซเลกเตอร์ 0x69328dec) เพื่อเผา aEthUSDT และไถ่ถอน USDT ดั้งเดิมพื้นฐาน จากนั้นเส้นทางกระโดดไปยังพูลแลกเปลี่ยน USDT/WETH แบบลึกของ Uniswap V3 ที่ขึ้นต้นด้วย 0x4e68 เพื่อแลกเปลี่ยน USDT ทั้งหมด 50432688.41618 โทเค็นเป็น WETH 17957.810805702142342238 โทเค็น

ธุรกรรมในขั้นตอนนี้เป็นปกติโดยสมบูรณ์: อัตราแลกเปลี่ยนประมาณ 2808.4 USDT ต่อ WETH 1 โทเค็น สอดคล้องกับสภาพตลาดในเวลานั้น ไม่มีปัญหาสภาพคล่องไม่เพียงพอ ไม่มีข้อผิดพลาดในการคำนวณ ไม่มีความผิดปกติใดๆ ในลิงก์ธุรกรรมขั้นแรก

ปัญหาอยู่ที่ขั้นตอนที่สอง เมื่อคุณเห็นปริมาณสำรองสภาพคล่อง เรื่องที่เหลือก็หลีกเลี่ยงไม่ได้

หลังจากตัวดำเนินการได้รับ WETH 17957.810805702142342238 โทเค็นแล้ว ก็โอนเงินทั้งหมดไปยังพูลแลกเปลี่ยน SushiSwap V2 AAVE/WETH ที่อยู่ 0xd75ea151a61d06868e31f8988d28dfe5e9df57b4

ผมตรวจสอบข้อมูลปริมาณสำรองสภาพคล่องในอดีตของพูลแลกเปลี่ยนนี้ในช่วงเวลาก่อนเกิดธุรกรรมผิดปกติ (ความสูงบล็อก 24643150) พูลมีเพียง:

AAVE 331.631982538108027323 โทเค็น, WETH 17.653276196397688066 โทเค็น

นี่ไม่ใช่ข้อผิดพลาดในการป้อนข้อมูล แต่เป็นข้อเท็จจริงที่แน่นอน

เส้นทางธุรกรรมนี้ ฉีด WETH เกือบ 17958 โทเค็นทั้งหมดเข้าสู่พูลแลกเปลี่ยนขนาดจิ๋วที่มีปริมาณสำรอง WETH เพียง 17.65 โทเค็น และสินค้าคงคล่อง AAVE ทั้งหมดที่สอดคล้องกันเพียง 331.63 โทเค็น ปริมาณ WETH ที่ป้อนเข้ามามีขนาดประมาณ 1017 เท่าของปริมาณสำรอง WETH ในพูล

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

พูลแลกเปลี่ยน AMM ดำเนินการตามอัลกอริธึมที่กำหนด ใช้สินค้าคงคล่อง AAVE ในพูลเกือบทั้งหมด

คู่เทรด SushiSwap ทริกเกอร์เหตุการณ์ Swap หลัก: ตัวดำเนินการโอนเข้า WETH 17957.810805702142342238 โทเค็น และแลกกลับมาเป็น AAVE เพียง 331.305315608938235428 โทเค็น หลังทำธุรกรรม พูลนี้เหลือสภาพคล่องประมาณ:

AAVE 0.326666929169791895 โทเค็น, WETH 17975.464081898540030304 โทเค็น

พูดง่ายๆ คือ ประมาณ 99.9%​ ของสินค้าคงคล่อง AAVE ในพูลถูกดูดออกในขั้นตอนเดียว

จากปริมาณสำรองก่อนทำธุรกรรม ราคาโดยนัยของ AAVE ในพูลอยู่ที่ประมาณ 149.50 ดอลลาร์ ราคาดำเนินการจริงของผู้ใช้อยู่ที่ประมาณ 154,114.66​ USDT ต่อ AAVE 1 โทเค็น ซึ่งแตกต่างจากราคาสปอตก่อนทำธุรกรรมมากกว่า 1000 เท่า

จากนั้น AAVE เหล่านี้ถูกจัดหาให้กลับไปยังพูล Aave โดยใช้เซเลกเตอร์ 0x617ba037 นั่นคือ supply(address,uint256,address,uint16) ผลลัพธ์คือ aEthAAVE ที่เพิ่งสร้างใหม่ถูกส่งกลับไปยังสัญญาการชำระเงิน สัญญาการชำระเงินสุดท้ายโอน aEthAAVE 327.241335505966487788 โทเค็นให้กับผู้ใช้ aEthAAVE ประมาณ 4.06398010297174764 โทเค็น ยังคงอยู่ในสัญญาการชำระเงินในฐานะส่วนเกินเมื่อเทียบกับที่ผู้ใช้จ่าย

ดังนั้น การชำระเงินไม่ได้บิดเบือนผลลัพธ์ที่ดีให้กลายเป็นผลลัพธ์ที่แย่ในทันที มันเพียงแค่ทำให้ผลลัพธ์ที่เส้นทางสร้างขึ้นแล้วเป็นที่สิ้นสุด

นี่คือจุดสำคัญที่ควรพูดออกมาอย่างชัดเจน:​ ผลลัพธ์ที่หายนะได้ถูก "ตั้งโปรแกรม" ไว้ในนั้นก่อนที่เส้นทางจะถูกดำเนินการ

ในข้อมูลการเรียกสัญญาช่วยเหลือที่ฝังอยู่ในเส้นทาง จำนวนเป้าหมายด้านซื้ออยู่ที่ประมาณ 331.272185078031026739 โทเค็น จำนวนซื้อขั้นต่ำที่ตกลงโดยลายเซ็นของผู้ใช้คือ 324.949260918413591035 โทเค็น จำนวนการชำระเงินจริงคือ 327.241335505966487788 โทเค็น ค่าหลักทั้งหมดถูกล็อคไว้ที่ระดับหลายร้อย AAVE ก่อนการชำระเงิน

เส้นทางนี้เกิดมาพร้อมกับความเสียหาย

ช่องโหว่อยู่ที่ไหน?

คำตอบคือ: กลไกการตรวจสอบทุกชั้นในระบบ กำลังตรวจสอบมิติที่ผิด

ทุกระดับตรวจสอบเพียงว่าธุรกรรมสามารถดำเนินการได้หรือไม่ ลายเซ็นใช้ได้หรือไม่ จำนวนไม่ใช่ศูนย์หรือไม่ แต่แทบไม่มีระดับหลักใดตรวจสอบว่าเส้นทางธุรกรรมมีความสมเหตุสมผลในเชิงเศรษฐกิจหรือไม่ นี่คือรากเหง้าของความล้มเหลวของกลไก

ข้อบกพร่องของโค้ดในเส้นทางการเสนอราคาของอะแดปเตอร์อินเทอร์เฟซ Aave

จุดผิดปกติที่ชัดเจนแรก ปรากฏในกระบวนการเสนอราคาของอะแดปเตอร์ CoW ของอินเทอร์เฟซ Aave: ฟังก์ชันที่เดิมใช้เพื่อแนบเมตาดาต้าแอปพลิเคชันเฉพาะของอะแดปเตอร์เมื่อขอคำเสนอราคาถูกปิดใช้งานโดยตรง

ที่มา: rates.helpers.ts:93 และ adapters.helpers.ts:194

ซึ่งหมายความว่าเมื่ออินเทอร์เฟซ Aave ขอคำเสนอราคาจาก CoW ไม่ได้แนบเมตาดาต้า Flash Loan และ Hook ที่จะแนบเมื่อส่งคำสั่งซื้อจริง กล่าวอีกนัยหนึ่ง สิ่งที่ถูกเสนอราคาไม่ใช่สิ่งที่กำลังจะถูกดำเนินการอย่างสมบูรณ์ ความคิดเห็นในโค้ดแม้แต่บอกว่าจุดประสงค์ของฟังก์ชันตัวช่วยนี้คือเพื่อให้คำเสนอราคาของอะแดปเตอร์แม่นยำยิ่งขึ้น แต่ฟังก์ชันนี้กลับถูกปิดใช้งานอย่างแข็งขัน

ตรรกะการตัดสินความสมเหตุสมผลของการแข่งขันเสนอราคาของ CoW อ่อนแอเกินไป (ช่องโหว่หลัก)

ปัญหาที่สองและร้ายแรงที่สุด อยู่ในตรรกะการแข่งขันเสนอราคาของโปรโตคอล CoW: ในโค้ดบริการสาธารณะ ตราบใดที่ค่าแก๊สของคำเสนอราคาเป็นบวกและจำนวนผลลัพธ์ไม่ใช่ศูนย์ จะถูกตัดสินว่าเป็น "คำเสนอราคาที่สมเหตุสมผล"

ที่มา: quote.rs:31

สำหรับระบบเส้นทางที่จัดการคำสั่งซื้อแปดหลัก นี่เป็นคำจำกัดความของ "ความสมเหตุสมผล" ที่อ่อนแออย่างน่าตกใจ

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

ข้อบกพร่องของตรรกะการสร้างแบบจำลองสภาพคล่องแบบ Uniswap V2
ETH
USDT
Aave
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk

ค้นหา
สารบัญบทความ
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android