อันดับแรก ทาง Wintermute ได้รับการว่าจ้างจากทาง Optimism Foundation เพื่อทำการบริการจัดเตรียมสภาพคล่องในการเปิดตัว $OP ในวันที่ 27 พฤษภาคม พ.ศ. 2565 โดยกองทุนพันธมิตรของมูลนิธิได้รับการจัดสรร OP จำนวน 20 ล้านเหรียญให้แก่ Wintermute อย่างไรก็ตาม Wintermute พบว่าตัวเองไม่สามารถเข้าถึงโทเค็นเหล่านี้ได้ เนื่องจากพวกเขาได้ให้ที่อยู่ Multisig ของ Ethereum (L1) ที่พวกเขายังไม่ได้นำไปใช้แก่ Optimism (L2) แต่โชคไม่ดีนัก เพราะผู้โจมตีพบสิ่งนี้และปรับใช้ Multisig Contract ด้วยที่อยู่เดียวกันกับ L2 ก่อนหน้าที่ Wintermute จะดำเนินการ
หลังจากเหตุการณ์ดังกล่าว ทั้งสองทีมได้ออกประกาศ ดังนี้:
- ข้อความถึงชุมชนจากมูลนิธิ Optimism: https://plaid-cement-e44.notion.site/A-Message-to-the-Community-from-the-Optimism-Foundation-f49b913bb0974d8a854a8bdd409a9dd6
- ข้อความถึงชุมชนจาก Wintermute:
https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595
โดยได้อธิบายวิธีการที่ผู้โจมตีสามารถควมคุมเหรียญ OP ทั้ง 20 ล้านเหรียญนี้
Address ต่าง ๆ ที่เกี่ยวข้อง
- Wintermute Multisig Wallet บน Ethereum (L1):
https://etherscan.io/address/0x4f3a120e72c76c22ae802d129f599bfdbc31cb81 - Attacker Multisig Wallet บน Optimism (L2): https://optimistic.etherscan.io/address/0x4f3a120e72c76c22ae802d129f599bfdbc31cb81
- Wallet ของผู้โจมตี #1:
https://optimistic.etherscan.io/address/0x8bcfe4f1358e50a1db10025d731c8b3b17f04dbb - Wallet ของผู้โจมตี #2:
https://optimistic.etherscan.io/address/0x60b28637879b5a09d21b68040020ffbf7dba5107 - Contract ของผู้โจมตี:
https://optimistic.etherscan.io/address/0xe7145dd6287ae53326347f3a6694fcf2954bcd8a - Gnosis Safe Proxy Factory Contract บน Ethereum (L1):
https://etherscan.io/address/0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b - Gnosis Safe Proxy Factory Contract บน Optimism (L2):
https://optimistic.etherscan.io/address/0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b
ขั้นตอนการโจมตี
- ผู้โจมตีใช้ Wallet ของผู้โจมตี #1 เพื่อปล่อย Attacking Contract
https://optimistic.etherscan.io/tx/0x69ee67800307ef7cb30ffa42d9f052290e81b3df6d3b7c29303007e33cd1c240 - ผู้โจมตีใช้ Wallet ของผู้โจมตี #2 เพื่อสร้างธุรกรรมจำนวน 62 ธุรกรรมในการสร้าง Gnosis Safe multisig contract (มีสัญญาจำนวน 162 สัญญา ถูกสร้างขึ้นต่อ 1 ธุรกรรม)
https://optimistic.etherscan.io/txs?a=0x60b28637879b5a09d21b68040020ffbf7dba5107&p=1 - Address ที่ถือเหรียญ OP 20 ล้านเหรียญถูกสร้างขึ้นที่ธุรกรรมที่ 55 (0x4f3a120e72c76c22ae802d129f599bfdbc31cb81)
https://optimistic.etherscan.io/tx/0x00a3da68f0f6a69cb067f09c3f7e741a01636cbc27a84c603b468f65271d415b
การวิเคราะห์หาสาเหตุ
OP 20 ล้านเหรียญบน Optimism (L2) ถูกโอนไปที่ Address “0x4f3a120e72c76c22ae802d129f599bfdbc31cb81” ซึ่งเป็นที่อยู่ที่ Wintermute เป็นเจ้าของใน Ethereum (L1) แต่ “ยังไม่” เป็นของใครใน Optimism (L2)
โดยกระเป๋าเงิน Multisig Wintermute บน L1 ถูกสร้างขึ้นด้วยฟังก์ชัน createProxy() ของสัญญา Gnosis Safe Proxy Factory สัญญา Proxy ถูกสร้างขึ้นด้วย Ketword ใหม่ ซึ่งใช้ CREATE opcode เป็นเบื้องหลัง
Address ของสัญญาอัจฉริยะที่ปรับใช้กับ CREATE opcode จะถูกคำนวณโดย keccak256 (senderAddress, nonce) ในกรณีนี้ senderAddress ที่สร้างสัญญานี้คือสัญญา Gnosis Safe Proxy Factory (0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b) และจำนวนสัญญาที่สร้างโดย Factory นี้ (ซึ่งจะเพิ่มขึ้นในทุกสัญญา Proxy ที่สร้างขึ้น)
นั่นหมายความว่า ถ้า senderAddess และ nonce บน L2 ตรงกัน นั่จะทำให้ตรงตามเงื่อนไขเหล่านี้บน L2 นั่นเอง
- สัญญา Gnosis Safe Proxy Factory ได้ถูกปรับใช้บน L2 โดยมี Address เดียวกันกับที่อยู่บน L1
- nonce บน L2 น้อยกว่า L1 (หมายถึงจำนวนของสัญญาที่สร้าง)
ด้วยเงื่อนไขเหล่านี้ ผู้โจมตีสามารถสร้างสัญญา Multisig จำนวนมากโดยใช้ Proxy Factory ที่มี Address เดียวกันจนกว่าจะถึง nonce เดียวกัน เพื่อสร้างสัญญา Multisig ด้วย Address เดียวกับ Wintermute Multisig wallet บน L1 และทำการเข้าควบคุม Address ที่ถือเหรียญ OP 20 ล้านเหรียญนั้นเอง
ผู้ปรับใช้ ProxyFactory
มีการพบว่าสัญญา Gnosis Safe Proxy Factory บน เครือข่าย Optimism (0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b) ถูกปรับใช้โดย Address ที่ถูกติดตามที่ชื่อว่า “Gnosis Safe: Deployer 3” บน Ethereum
(0x1aa7451dd11b8cb16ac089ed100afe605efa00)
ค่า Gas สำหรับการปรับใช้ouhถูกส่งไปยัง Address ของผู้ปรับใช้ (0x1aa7451dd11b8cb16ac089ed7fe05efa00100a6a) โดย Wallet ของผู็โจมตี #2 (0x60b28637879b5a09d21b68040020ffbf7dba5107) จากธุรกรรมเหล่านี้:
สิ่งนี้เกิดขึ้นก่อนการปรับใช้สัญญา ProxyFactory on Optimism (L2) ในธุรกรรมนี้:
ซึ่งเป็นไปได้ว่าผู้โจมตีอาจเข้าถึง Private Key ของ “Gnosis Safe: Deployer 3” และจงใจที่จะปรับใช้ ProxyFactory บน Address เดียวกันเพื่อทำการโจมตีครั้งนี้
สรุป
บนเครือข่าย EVM การเข้าถึงบัญชีที่เป็นเจ้าของภายนอก (EOA) นั้นถือโดยเจ้าของคีย์ส่วนตัว (Private Key) อย่างไรก็ตาม เมื่อมีการสร้างที่อยู่จากสัญญา (Contract) จะไม่มีการรับประกันว่าความเป็นเจ้าของที่กำหนดไว้ในสัญญาอัจฉริยะจะเหมือนกันหมดในทุก ๆ เครือข่าย และด้วยการโอน OP จำนวน 20 ล้านเหรียญไปยังที่อยู่ที่ไม่มีใครเป็นเจ้าของ ผู้โจมตีจึงได้ปรับใช้กระเป๋าเงิน Multisig จำนวนทั้งหมด 10,044 วอลเล็ตเพื่อควบคุมที่อยู่ที่ถือโทเค็นเหล่านั้น
Social Media Link ของ Inspex: WebsiteMediumTwitterFacebookLinkedIn