Cointime

Download App
iOS & Android

SharkTeam: การวิเคราะห์หลักการของ ERC2771 และช่องโหว่การปลอมแปลงที่อยู่แบบ Multicall โดยพลการ

เมื่อวันที่ 8 ธันวาคม 2023 OpenZeppelin ได้เผยแพร่การแจ้งเตือนด้านความปลอดภัยที่สำคัญแก่ชุมชนอย่างเป็นทางการ การแจ้งเตือนชี้ให้เห็นว่าเมื่อใช้มาตรฐาน ERC-2771 และวิธีการคล้าย Multicall ในการบูรณาการโครงการ อาจมีความเสี่ยงที่จะถูกโจมตีด้วยการปลอมแปลงที่อยู่ตามอำเภอใจ

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

เนื่องจากมีธุรกรรมการโจมตีหลายรายการที่เกี่ยวข้องกับช่องโหว่นี้ เราจึงเลือกธุรกรรมการโจมตีรายการใดรายการหนึ่งเพื่อการวิเคราะห์

ที่อยู่ของผู้โจมตี: 0xFDe0d1575Ed8E06FBf36256bcdfA1F359281455A

ธุรกรรมการโจมตี: 0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6

กระบวนการโจมตี:

1. อันดับแรก. ผู้โจมตี (0xFDe0d157) ใช้ 5 WETH เป็นครั้งแรกเพื่อแลกเป็นเงินประมาณ 3,455,399,346 TIME

2. ต่อจากนั้น ผู้โจมตี (0xFDe0d157) ได้สร้างพารามิเตอร์ calldata ที่เป็นอันตราย และเรียกฟังก์ชัน [Forwarder].execute

3. เมื่อเรียกใช้ฟังก์ชัน [Forwarder].execute calldata ที่เป็นอันตรายจะทริกเกอร์ฟังก์ชัน multicall ของสัญญา TIME ต่อจากนั้น ข้อมูลการโทรที่เหลือจะถูกนำมาใช้เพื่อทริกเกอร์ฟังก์ชันเบิร์นของสัญญา TIME และทำลายโทเค็น TIME ในพูล

ก่อนอื่น การโจมตีนี้เกี่ยวข้องกับหลายแง่มุมเป็นหลัก: ERC2771, Multicall และข้อมูลการโทรที่สร้างขึ้นอย่างระมัดระวัง เราสามารถค้นหาการสืบทอดที่เกี่ยวข้องได้จากสัญญาโทเค็น TIME:

ก่อนอื่น การโจมตีนี้เกี่ยวข้องกับหลายแง่มุมเป็นหลัก: ERC2771, Multicall และข้อมูลการโทรที่สร้างขึ้นอย่างระมัดระวัง เราสามารถค้นหาการสืบทอดที่เกี่ยวข้องได้จากสัญญาโทเค็น TIME:

1. ERC2771 มอบความสามารถในการมี msg.sender เสมือน ช่วยให้ผู้ใช้สามารถมอบหมายให้บุคคลที่สาม [Forwarder] ทำธุรกรรมเพื่อลดต้นทุนค่าน้ำมัน เมื่อส่งธุรกรรม ที่อยู่ msg.sender จะถูกเพิ่มลงใน calldata

สัญญาโทเค็น 2.TIME สืบทอด ERC2771Context เมื่อ [Forwarder] เรียกสัญญา _msgSender() จะตรวจสอบข้อมูลการโทรและเลื่อนไปทางขวา โดยตัดทอน 20 ไบต์สุดท้ายตาม msg.sender ที่คาดไว้

3.Multicall เป็นวิธีการที่แปลงการเรียกใช้ฟังก์ชันเดียวเป็นหลายฟังก์ชันที่เรียกว่าตามลำดับในสัญญาเดียวกัน ยอมรับอาร์เรย์ของการโทรที่ผู้ใช้เข้ารหัสและดำเนินการตามสัญญาของตัวเอง ฟังก์ชันนี้จะวนซ้ำผ่านอาร์เรย์การโทรและดำเนินการ delegatecall() ในแต่ละการดำเนินการ ช่วยให้ผู้ใช้สามารถรวมชุดการดำเนินการของตนเองและดำเนินการตามลำดับในธุรกรรมเดียวกัน โดยไม่ต้องกำหนดชุดการดำเนินการบางอย่างในโปรโตคอลล่วงหน้า วัตถุประสงค์หลักคือเพื่อประหยัดน้ำมัน

4. สำหรับ calldata ที่สร้างขึ้นอย่างระมัดระวัง ผู้โจมตีจะเรียกใช้ฟังก์ชัน [Forwarder].execute และส่งผ่านพารามิเตอร์ที่เกี่ยวข้อง

หลังจากที่เราจัดรูปแบบค่าข้อมูลในลักษณะที่อ่านได้ เราจะได้รับ:

ผู้โจมตี (0xFDe0d157) รับค่าข้อมูลใหม่ผ่านการดำเนินการออฟเซ็ตของข้อมูลการโทรปัจจุบัน และส่งค่าไปยังฟังก์ชัน multicall(bytes[]) ข้อมูลใหม่ 4 ไบต์แรกคือตัวเลือกของฟังก์ชันเบิร์น (uint256) และพารามิเตอร์จำนวนคือ 62227259510000000000000000000

5. ในฟังก์ชัน multicall(bytes[]) ให้เรียกใช้ฟังก์ชัน burn(uint256) ผ่านทาง delegatecall ในบรรทัด 0x20 ที่อยู่ 0x760dc1e043d99394a10605b2fa08f123d60faf84 จะถูกเพิ่มในตอนท้ายเมื่อสร้าง calldata ที่อยู่นี้สอดคล้องกับกลุ่มสภาพคล่อง TIME-ETH บน Uniswapv2 ซึ่งเป็น msg.sender ที่คาดไว้ข้างต้น

6. เหตุใด msg.sender ที่กล่าวถึงตอนนี้จึงกลายเป็นที่อยู่พูลสภาพคล่องของ TIME-ETH เหตุผลก็คือ msg.sender เป็นที่อยู่สัญญา [Forwarder] ในตอนต้น เพื่อตรวจสอบว่าเป็น [Forwarder ที่เชื่อถือได้หรือไม่ หากเป็น [Forwarder ที่เชื่อถือได้] ให้ตั้งค่า msg.sender เป็น 20 ไบต์สุดท้ายของ calldata

6. เหตุใด msg.sender ที่กล่าวถึงตอนนี้จึงกลายเป็นที่อยู่พูลสภาพคล่องของ TIME-ETH เหตุผลก็คือ msg.sender เป็นที่อยู่สัญญา [Forwarder] ในตอนต้น เพื่อตรวจสอบว่าเป็น [Forwarder ที่เชื่อถือได้หรือไม่ หากเป็น [Forwarder ที่เชื่อถือได้] ให้ตั้งค่า msg.sender เป็น 20 ไบต์สุดท้ายของ calldata

สาเหตุของการโจมตีนี้: ใน ERC-2771 [Forwarder] ไม่ได้ออกแบบมาโดยเฉพาะสำหรับการโทรหลายสาย ผู้โจมตีเพิ่มพารามิเตอร์ที่เกี่ยวข้องในฟังก์ชัน _msgSender() ให้กับการโทรภายนอกของ multicall ซึ่งก็คือฟังก์ชัน [Forwarder].execute ของเหตุการณ์นี้ ในฟังก์ชัน multicall บางฟังก์ชันจะเพิ่มพารามิเตอร์ที่เกี่ยวข้องใน _msgSender() อีกด้วย ทำให้ผู้โจมตีสามารถปลอมแปลง _msgSender() ได้ ดังนั้น ผู้โจมตีสามารถเลียนแบบการเรียกไปยังที่อยู่ใดๆ โดยใช้การเรียกหลายสายเพื่อเรียกฟังก์ชันที่เกี่ยวข้อง ในที่สุด โทเค็น TIME ในพูลจะถูกทำลายผ่านการอนุญาต

เพื่อตอบสนองต่อเหตุการณ์นี้ สามารถใช้มาตรการบรรเทาและป้องกันดังต่อไปนี้:

1. ใช้เวอร์ชันใหม่หลังจากแก้ไขข้อบกพร่อง Multicall เวอร์ชันใหม่ของ OpenZeppelin มีความยาวส่วนต่อท้ายบริบทของข้อมูลบริบท ERC2771 ซึ่งใช้เพื่อระบุความยาวส่วนต่อท้ายบริบทที่คาดหวังของ ERC-2771 ดังนั้นการโทรใดๆ จาก [Forwarder] ที่เชื่อถือได้จะถูกรับรู้และปรับให้เข้ากับการเรียกฟังก์ชันย่อยแต่ละครั้ง

ต่อไปนี้เป็นแผนภูมิเปรียบเทียบระหว่างเวอร์ชันข้อบกพร่องและเวอร์ชันที่อัปเดต:

2. ห้ามสัญญาใด ๆ ที่จะเรียก multicall เพื่อป้องกันไม่ให้ [Forwarder] ใช้งาน ยกตัวอย่าง ThirdWeb วิธีนี้เปรียบเทียบกับโซลูชันของ OpenZeppelin OpenZeppelin ยังคงอนุญาตให้ multicall ผ่านสัญญา ต่อไปนี้เป็นแผนภูมิเปรียบเทียบเวอร์ชันข้อบกพร่องที่เกี่ยวข้องและเวอร์ชันอัปเดตของ ThirdWeb

วิสัยทัศน์ของ SharkTeam คือการรักษาความปลอดภัยให้กับโลกของ Web3 ทีมงานประกอบด้วยผู้เชี่ยวชาญด้านความปลอดภัยที่มีประสบการณ์และนักวิจัยอาวุโสจากทั่วโลก ซึ่งมีความเชี่ยวชาญในทฤษฎีพื้นฐานของบล็อคเชนและสัญญาอัจฉริยะ ให้บริการต่างๆ เช่น การวิเคราะห์บิ๊กดาต้าบนเชน คำเตือนความเสี่ยงบนเชน การตรวจสอบสัญญาอัจฉริยะ การกู้คืนสินทรัพย์ crypto และบริการอื่น ๆ และได้สร้างการวิเคราะห์บิ๊กดาต้าบนเชนและแพลตฟอร์มเตือนความเสี่ยง ChainAegis แพลตฟอร์มดังกล่าวรองรับระดับของ การวิเคราะห์กราฟเชิงลึกและสามารถต่อสู้กับ Advanced Persistent Threat (APT) ในโลก Web3 ได้อย่างมีประสิทธิภาพ ได้สร้างความสัมพันธ์ความร่วมมือระยะยาวกับผู้เล่นหลักในด้านต่างๆ ของระบบนิเวศ Web3 เช่น Polkadot, Moonbeam, polygon, Sui, OKX, imToken, ChainIDE เป็นต้น

เว็บไซต์อย่างเป็นทางการ: https://www.sharkteam.org

ทวิตเตอร์: https://twitter.com/sharkteamorg

ดิสคอร์ด: https://discord.gg/jGH9xXCjDZ

โทรเลข: https://t.me/sharkteamorg

ความคิดเห็น

ความคิดเห็นทั้งหมด

Recommended for you

  • BTC ร่วงลงต่ำกว่า 100,000 USDT ชั่วครู่ โดยลดลง 1.13% ในช่วง 24 ชั่วโมง

    BTC ร่วงลงต่ำกว่า 100,000 USDT ชั่วครู่ และขณะนี้ซื้อขายอยู่ที่ 99,977.9 USDT ลดลง 1.13% ในช่วง 24 ชั่วโมง (จดหมายข่าวนี้สร้างขึ้นด้วยความช่วยเหลือจาก AI)

  • BTC ร่วงต่ำกว่า 101,000 ดอลลาร์

    ตลาดแสดงให้เห็นว่า BTC ตกลงมาต่ำกว่า 101,000 ดอลลาร์ และขณะนี้ซื้อขายอยู่ที่ 100,994.94 ดอลลาร์ โดยราคาเพิ่มขึ้นในช่วง 24 ชั่วโมงที่ผ่านมาลดลงเหลือ 2.02% ตลาดมีความผันผวน ดังนั้นโปรดควบคุมความเสี่ยงให้ดี

  • GTE ซึ่งเป็นศูนย์แลกเปลี่ยนแบบกระจายอำนาจได้ระดมทุน Series A มูลค่า 15 ล้านเหรียญสหรัฐ โดยมี Paradigm เป็นผู้นำโดยเฉพาะ

    Paradigm ประกาศเมื่อไม่นานนี้ว่าได้ดำเนินการระดมทุนรอบ Series A มูลค่า 15 ล้านเหรียญสหรัฐสำหรับ GTE (Global Token Exchange) ซึ่งเป็นแพลตฟอร์มการซื้อขายแบบกระจายอำนาจ แพลตฟอร์มดังกล่าวเรียกตัวเองว่า "DEX ที่เร็วที่สุดในโลก" และมุ่งหวังที่จะท้าทายประสิทธิภาพของการแลกเปลี่ยนแบบรวมศูนย์ เช่น Binance และ Coinbase Enzo Coglitore ผู้ก่อตั้งร่วมของ GTE กล่าวว่าแพลตฟอร์มนี้สร้างขึ้นบนสมุดคำสั่งจำกัดแบบส่วนกลาง (CLOB) และความล่าช้าในการจับคู่คำสั่งนั้นเทียบได้กับการแลกเปลี่ยนแบบรวมศูนย์ แต่ยังคงรักษาคุณสมบัติหลัก เช่น "การกระจายอำนาจ การไม่ต้องขออนุญาต ความสามารถในการจัดทำ และการไม่ต้องดูแล" และมุ่งมั่นที่จะแก้ไขปัญหาทั่วไปของ DEX ในปัจจุบัน ได้แก่ "ความล่าช้าของคำสั่งที่สูงและต้นทุนการทำธุรกรรมที่สูง" Charlie Noyes และ Caitlin Pintavorn ซึ่งเป็นหุ้นส่วนของ Paradigm กล่าวว่าพวกเขามีความหวังดีเกี่ยวกับทีมงานและการผสมผสานเทคโนโลยีของ GTE และเชื่อว่ามีศักยภาพในการแข่งขันกับการแลกเปลี่ยนแบบรวมศูนย์และโปรโตคอล AMM (เช่น Uniswap และ PancakeSwap) ปัจจุบัน GTE ถูกสร้างขึ้นบนเครือข่ายสาธารณะ MegaETH ที่เข้ากันได้กับ EVM เครือข่ายทดสอบของ GTE เปิดตัวเมื่อต้นปีและดึงดูดผู้ใช้ประมาณ 700,000 รายให้เข้าร่วมการทดสอบ มีรายงานว่าก่อนหน้านี้ GTE ได้ระดมทุนได้ทั้งหมด 10 ล้านเหรียญสหรัฐจากรอบก่อนการระดมทุน รอบการระดมทุนเริ่มต้น และรอบชุมชน โดยมีผู้สนับสนุน ได้แก่ สมาชิกชุมชนในช่วงเริ่มต้นและผู้ใช้แพลตฟอร์ม

  • BCGame Coin (BC) ทะลุ 0.007 ดอลลาร์ เพิ่มขึ้นมากกว่า 89% ใน 24 ชั่วโมง

    ตามข้อมูลตลาดของ GMGN เมื่อวันที่ 23 มิถุนายน 2025 ราคาของโทเค็น BC ของแพลตฟอร์ม BC.GAME ทะลุ 0.007 ดอลลาร์ โดยเพิ่มขึ้น 89.07% ในช่วง 24 ชั่วโมง เมื่อต้นเดือนนี้ มูลค่าตลาดของ BC ได้ทะลุจุดสูงสุดในประวัติศาสตร์

  • ผู้ว่าการเฟด โบว์แมน: ตอนนี้เป็นเวลาที่ต้องพิจารณาปรับอัตราดอกเบี้ยของนโยบาย

    ผู้ว่าการคณะกรรมการธนาคารกลางสหรัฐฯ โบว์แมน: ขณะนี้เป็นเวลาที่ต้องพิจารณาปรับอัตราดอกเบี้ยในนโยบาย

  • Binance Alpha เตรียมรายชื่อ Newton Protocol (NEWT)

    Binance Alpha จะเปิดตัว Newton Protocol (NEWT) และการซื้อขายจะเริ่มขึ้นในวันที่ 24 มิถุนายน เวลาที่แน่นอนจะประกาศให้ทราบในภายหลัง ผู้ใช้ที่มีสิทธิ์สามารถไปที่หน้ากิจกรรม Alpha ได้หลังจากเปิดการซื้อขาย Alpha แล้ว และใช้คะแนน Binance Alpha เพื่อรับ Airdrop รายละเอียดจะประกาศให้ทราบในวันที่ 24 มิถุนายน

  • BTC ร่วงต่ำกว่า 101,000 ดอลลาร์

    ตลาดแสดงให้เห็นว่า BTC ร่วงต่ำกว่า 101,000 ดอลลาร์ และขณะนี้ซื้อขายอยู่ที่ 100,980 ดอลลาร์ โดยลดลง 0.05% ในช่วง 24 ชั่วโมง ตลาดมีความผันผวน ดังนั้นโปรดควบคุมความเสี่ยงให้ดี

  • ประธาน ECB ลาการ์ด: สมาชิกรัฐสภาสหภาพยุโรปควรปูทางสู่ยูโรดิจิทัล

    คริสติน ลาการ์ด ประธานธนาคารกลางยุโรป เรียกร้องให้สมาชิกรัฐสภายุโรปผ่านกฎหมายเพื่อปูทางสู่การเปิดตัวยูโรดิจิทัลอีกครั้งเมื่อวันจันทร์ที่ผ่านมา โดยลาการ์ดกล่าวว่า “ควรจัดตั้งกรอบกฎหมายโดยเร็วเพื่อปูทางสู่การเปิดตัวยูโรดิจิทัลที่อาจเกิดขึ้นได้ หากเราเลือกนโยบายที่ถูกต้อง เราก็สามารถใช้ประโยชน์จากโมเมนตัมในปัจจุบันและส่งเสริมโอกาสทางเศรษฐกิจของยุโรปและพลเมืองได้” (จินชิ)

  • Binance Wallet เปิดตัว Codatta Pre-TGE และงานพิเศษเฉพาะของ Booster

    ตามข่าวอย่างเป็นทางการ Binance Wallet ได้เปิดตัวการสมัครสมาชิก Pre-TGE และกิจกรรม Booster rewards อย่างเป็นทางการสำหรับโครงการ Codatta ผู้ใช้สามารถสมัครสมาชิก Codatta governance token XNY ผ่าน Binance Wallet ในช่วง Pre-TGE ผู้ใช้รายเดียวสามารถสมัครสมาชิก BNB ได้สูงสุด 3 BNB โทเค็นที่ได้รับจะถูกแจกจ่ายตามสัดส่วนและมีช่วงเวลาล็อค นอกจากนี้ กิจกรรม Booster จะกินเวลานาน 12 สัปดาห์ ผู้ใช้ที่ทำภารกิจรายสัปดาห์เสร็จสิ้นจะมีโอกาสแบ่งปัน XNY airdrops ทั้งหมด 6% เงื่อนไขในการเข้าร่วมคือต้องถือคะแนน Alpha 61 คะแนนขึ้นไป

  • บริษัทจดทะเบียน Nano Labs วางแผนที่จะสมัครขอใบอนุญาตธุรกิจ stablecoin สกุลเงินดอลลาร์ฮ่องกงและหยวนนอกประเทศ

    NanoLabs Ltd (รหัสหุ้น: NA) ประกาศในวันนี้ว่าบริษัทมีแผนที่จะทำงานร่วมกับนิติบุคคลอื่น ๆ เพื่อยื่นขอใบอนุญาตในการดำเนินธุรกิจที่เกี่ยวข้องกับสกุลเงินดอลลาร์ฮ่องกงและสกุลเงินหยวนในต่างประเทศ หลังจากที่พระราชบัญญัติสกุลเงินดอลลาร์ฮ่องกง (ต่อไปนี้จะเรียกว่า "พระราชบัญญัติสกุลเงินดอลลาร์ฮ่องกง") มีผลบังคับใช้อย่างเป็นทางการ ในเวลาเดียวกัน NanoLabs ยังวางแผนที่จะสร้างกรอบทางเทคนิคสำหรับสกุลเงินดอลลาร์ฮ่องกง โดยเน้นที่การสนับสนุนเครือข่ายบล็อคเชน เช่น Bitcoin และ BNB NanoLabs หวังว่าจะได้สร้างความร่วมมือเชิงกลยุทธ์เพื่อช่วยให้ระบบนิเวศสกุลเงินดอลลาร์ฮ่องกงและอุตสาหกรรม Web3.0 ที่กว้างขึ้นพัฒนาได้ เมื่อวันที่ 21 พฤษภาคม 2025 สภานิติบัญญัติฮ่องกงได้ผ่านพระราชบัญญัติสกุลเงินดอลลาร์ฮ่องกง ซึ่งได้จัดตั้งระบบการออกใบอนุญาตสำหรับผู้ออกสกุลเงินดอลลาร์ฮ่องกงที่ผูกกับสกุลเงินทั่วไป (FRS) ซึ่งช่วยเสริมสร้างตำแหน่งของฮ่องกงให้แข็งแกร่งยิ่งขึ้นในฐานะศูนย์กลางทางการเงินด้านสินทรัพย์ดิจิทัลระดับโลก เมื่อวันที่ 6 มิถุนายน 2025 รัฐบาลฮ่องกงได้เผยแพร่ประกาศในราชกิจจานุเบกษา โดยประกาศว่าพระราชบัญญัติดังกล่าวจะมีผลบังคับใช้อย่างเป็นทางการในวันที่ 1 สิงหาคม 2025 NanoLabs Ltd เป็นผู้ให้บริการโครงสร้างพื้นฐานและโซลูชันผลิตภัณฑ์ Web3.0 ที่ทุ่มเทให้กับการวิจัยและพัฒนาชิปคอมพิวเตอร์ประสิทธิภาพสูง (HTC) และชิปคอมพิวเตอร์ประสิทธิภาพสูง (HPC) บริษัทได้สร้างสถาปัตยกรรมหน่วยประมวลผลสตรีม (FPU) ที่สมบูรณ์ โดยผสานรวมคุณลักษณะทางเทคนิคของ HTC และ HPC เพื่อมอบโซลูชันแบบบูรณาการให้กับตลาด

ต้องอ่านทุกวัน