คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด
แปลกใจที่พบช่องโหว่ระดับต่ำ? การวิเคราะห์สั้น ๆ ของเหตุการณ์ล็อคกองทุน Akutar ของโครงการ NFT
成都链安
特邀专栏作者
2022-04-24 02:40
บทความนี้มีประมาณ 1441 คำ การอ่านทั้งหมดใช้เวลาประมาณ 3 นาที
ขอแนะนำให้ใส่ใจกับความถูกต้องของการใช้โค้ดเมื่อออกแบบและดำเนินการตามสัญญา

23 เมษายน 2565Chengdu Lianan Chain Bing-Blockchain แพลตฟอร์มการรับรู้สถานการณ์ด้านความปลอดภัยชื่อระดับแรก

#1 ข้อมูลที่เกี่ยวข้องกับเหตุการณ์

เมื่อวันที่ 23 เมษายน foobar ผู้พัฒนา Solidity ทวีตว่า 11,539 ETH (มูลค่า 34 ล้านดอลลาร์) ถูกล็อคอย่างถาวรในสัญญา AkuDreams และผู้ใช้แต่ละคนหรือทีมพัฒนาไม่สามารถถอนเงินได้ ตั้งค่าสถานะการประมูลแต่ละรายการเป็น 1 หลังจากดำเนินการคืนเงินแล้ว ดังนั้น ผู้ใช้จึงไม่สามารถโทรเรียก EmergencyWithdraw() ได้ นอกจากนี้ ทีมไม่สามารถรับเงิน ซึ่งโดยพื้นฐานแล้วเทียบเท่ากับการทำลายล้าง

ทีมเทคนิคของ Chengdu LianAn ได้ทำการวิเคราะห์ในทันที

สัญญาที่มีช่องโหว่:

0xf42c318dbfbaab0eee040279c6a2588fa01a961d

#2 การวิเคราะห์ช่องโหว่

ช่องโหว่ที่หนึ่ง:

ช่องโหว่ที่หนึ่ง:

1. ช่องโหว่สัญญาแรกเข้ามาprocessRefundsผู้ออกแบบดำเนินการคืนเงินเป็นวงกลมตามตัวนับการคืนเงิน

2. ที่นี่ ฟังก์ชันการโทรจะใช้สำหรับการดำเนินการคืนเงิน และผลของการคืนเงินจะใช้เป็นเงื่อนไขการตัดสินของความต้องการ

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

ช่องโหว่ที่สอง:

ช่องโหว่ที่สอง:

บั๊กยังเป็นตัวการที่ทำให้สินทรัพย์ ETH มูลค่าประมาณ 34 ล้านดอลลาร์ถูกล็อคในสัญญา

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

2. ให้ความสนใจกับโค้ดบรรทัดที่ 620 ในฟังก์ชัน: need (refundProgress >= totalBids) โดยที่ refundProgress ระบุว่ามีการคืนเงินของผู้ใช้จำนวนเท่าใดที่ได้รับการประมวลผล และ totalBids ระบุว่าผู้ใช้ทั้งหมดประมูลไปกี่ NFT โปรดทราบว่าเนื่องจากผู้ใช้สามารถเสนอราคาสำหรับ NFT ได้หลายรายการ ความคืบหน้าในการคืนเงินอาจน้อยกว่าการเสนอราคาทั้งหมดในการเปรียบเทียบเชิงตัวเลข

มาดูกระบวนการของฟังก์ชันการคืนเงินRefunds: need(_refundProgress < _bidIndex); bidIndex หมายความว่าผู้ใช้ทั้งหมดที่เข้าร่วมในการเสนอราคา กระบวนการคืนเงินจะไม่สูงกว่า bidIndex

ณ จุดนี้ มาดูค่าของ bidIndex ซึ่งก็คือ 3669:

มูลค่าของ totalBids คือ 5495:

3. ดังนั้นการคืนเงินความคืบหน้า>= 5495 และการคืนเงินความคืบหน้าชื่อระดับแรก

#3 สรุป

ในการตอบสนองต่อเหตุการณ์นี้ ทีมเทคนิคของ Chengdu LianAn ได้แนะนำ:

1. นักพัฒนาควรมีความตระหนักด้านการพัฒนาความปลอดภัยขั้นพื้นฐานและคุ้นเคยกับประเด็นด้านความปลอดภัยที่ควรให้ความสนใจในการพัฒนาสัญญาอัจฉริยะ

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

NFT
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
สรุปโดย AI
กลับไปด้านบน
ขอแนะนำให้ใส่ใจกับความถูกต้องของการใช้โค้ดเมื่อออกแบบและดำเนินการตามสัญญา
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android