<?php wp_title('|', true, 'right'); ?>

นักพัฒนาพบ “บั้กปั๊มตังค์” บนแพลตฟอร์ม Defi ที่ช่วยให้เทรดได้กำไร 900% ในทุก ๆ ครั้ง 

ติดตามสยามบล็อกเชนบนSiam Blockchain

เมื่อวันที่ 19 เมษายน Zellic บริษัทรักษาความปลอดภัยด้านบล็อกเชนรายงานว่า ได้พบ 2 ช่องโหว่ ในโปรโตคอลที่มีการ ‘Fork’ แยกมาจาก Gains Network leveraged trading ที่อาจอนุญาตให้เทรดเดอร์ทำกำไร 900% ในทุก ๆ การซื้อขาย โดยไม่คำนึงถึงราคาของโทเค็นที่เทรด 

‘Fork’ หมายถึง การสร้างแยกเครือข่ายพัฒนาที่ดีกว่าออกจากบล็อกเชนหลัก กลายเป็นบล็อกเชนใหม่ เพื่อจุดประสงค์ในการปรับปรุงจุดบกพร่องบางประการ เปรียบเสมือนการแยกสาขาออกจากต้นไม้ใหญ่ 

Zelic ยังได้เสริมอีกว่า ช่องโหว่ที่หนึ่งเคยปรากฎอยู่ใน Gains Network เวอร์ชันก่อนหน้าแต่ได้รับการแก้ไขแล้ว แต่อีกช่องโหว่หนึ่งพบเฉพาะในโปรโตคอลที่ Fork แยกมาเท่านั้น 

Zellic ได้แจ้งช่องโหว่ดังกล่าวไปยังนักพัฒนาของโปรเจกต์ต่าง ๆ ที่ Fork แยกมาจาก Gains Network อย่างเช่นเว็บเทรด Gambit Trade, Holdstation Exchange และ Krav Trade ทีมพัฒนาเหล่านี้ได้ยืนยันว่าโปรโตคอลของตนเองไม่มีช่องโหว่นี้แล้ว แต่อย่างไรก็ตาม Zellic ยังคงเตือนว่า Fork ตัวอื่น ๆ ของ Gains Network อาจยังคงมีความเสี่ยงหลงเหลืออยู่ 

ตามเว็บไซต์อย่างเป็นทางการของ Gains Network เป็นระบบนิเวศของแพลตฟอร์ม DeFi ที่รันอยู่บนเชน Polygon และ Arbitrum ชื่ออย่างเป็นทางการของแอปการซื้อขายแบบเลเวอเรจคือ “gTrade” ซึ่งมันมีปริมาณการซื้อขายอนุพันธ์มากกว่า 25,000 ล้านดอลลาร์สหรัฐฯ นับตั้งแต่ก่อตั้งขึ้นในเดือนพฤษภาคม 2023 ตามข้อมูลจาก DefiLlama 

gTrade: แอปเทรดเลเวอเรจบนเครือข่าย Gains Network แหล่งที่มา: Gains Network

Zellic อ้างว่าแอพซื้อขาย DeFi ยอดนิยมหลายตัวได้มาจากโค้ดพื้นฐานของ Gains Network อย่างเช่น Gambit Trade และ Holdstation ที่กล่าวถึงข้างต้น รวมถึงโปรโตคอลอื่น ๆ อีกมากมาย พวกเขาค้นพบช่องโหว่นี้ในขณะที่ศึกษาเรื่อง Fork โดยเฉพาะ แต่ Zelic ปฏิเสธที่จะระบุว่าพวกเขาค้นพบมาจากแพลตฟอร์มใด

ในรายงานระบุว่า สัญญา Smart Contract บน Gains Network อนุญาตให้ผู้ใช้เปิดออร์เดอร์เทรดได้ 3 แบบ: Market Order, Reversal Order ออร์เดอร์แบบสวนตลาด และออร์เดอร์แบบเก็งกำไรตามโมเมนตัม (Momentum Order) โดยออร์เดอร์แบบตลาดจะซื้อหรือขายสินทรัพย์ทันที ไม่ว่าราคาจะเป็นเท่าไร

เมื่อผู้ใช้ต้องการเปิดเทรดเก็งกำไรตามเทรนด์หรือสวนเทรนด์  สัญญา Smart Contract จะบันทึก “order” ที่ประกอบด้วยข้อมูลเกี่ยวกับราคาที่ผู้ใช้ยินยอมที่จะเทรด เมื่อราคาตลาดไปถึงจุดที่ผู้ใช้กำหนดไว้ ผู้ใช้ทุกคนจะสามารถเรียกฟังก์ชัน “executeLimitOrder” เพื่อทำการเทรดตามคำสั่งนั้น โดยผู้ใช้ที่เรียกฟังค์ชันนี้ไม่จำเป็นต้องเป็นคนเดียวกับผู้ที่วางคำสั่งไว้ ผู้ใช้ที่ทำการเทรดสำเร็จจะได้รับ “ค่าธรรมเนียมการเทรด” (Execution Fee) เป็นการตอบแทนสำหรับการทำหน้าที่ตรงนี้

สิ่งนี้ช่วยให้ผู้ใช้สามารถวางคำสั่ง Take-Profit หรือ Stop-Loss ได้เหมือนกับตลาดแลกเปลี่ยนแบบรวมศูนย์ (CEX) แตกต่างกันที่ ไม่จำเป็นต้องมีองค์กรแบบรวมศูนย์เพื่อดำเนินการเติมคำสั่ง

เมื่อผู้ใช้วางคำสั่งลงไป พวกเขาสามารถตั้งราคา Take-profit (ทำกำไร) , ราคา Stop-loss (หยุดขาดทุน) หรือทั้งสองอย่างได้ ความตั้งใจของการออกแบบนี้คือเพื่อให้นักเทรดสามารถออกจากการซื้อขายที่ทำกำไร หรือจากการซื้อขายที่ขาดทุนที่จุด Stop loss โดยไร้ตัวกลางได้นั่นเอง

ช่องโหว่ที่ 1 อนุญาตให้ทำกำไร 900% จากคำสั่งซื้อ

ในการศึกษาโปรเจกต์ที่ Fork มาจาก Gains Network  Zellic ตรวจพบว่าเมื่อคำสั่งถูกเปิดขึ้น ราคา Stop loss จะถูกเก็บไว้ในตัวแปร “currentPrice” ที่ใช้ในการคำนวณกำไรและขาดทุน นั่นหมายความว่าหากผู้ใช้สามารถตั้งราคาหยุดขาดทุนไว้เหนือราคาเปิดได้ พวกเขาสามารถทำกำไรจากการซื้อขายใด ๆ ได้โดยอัตโนมัติ

ตัวอย่างเช่น สถานการณ์ที่ราคาของ Bitcoin BTC ซื้อขายอยู่ที่ $63,000 และผู้ใช้ใส่ราคาเปิดที่ $62,000 และป้อนราคา Stop loss อยู่ที่ $64,000 ในกรณีนี้ หากราคาลดลงเหลือ $62,000 คำสั่งซื้อจะเริ่มทำการซื้อเข้ามา แต่ราคาจะต่ำกว่าจุดStop loss ซึ่งจะทำให้เกิดการปิดการเทรดโดยอัตโนมัติทันที 

นอกจากนี้ ราคา Stop loss ที่ผู้ใช้ตั้งไว้จะถูกบันทึกเป็นราคาปัจจุบัน ซึ่งหมายความว่าผู้ใช้จะได้กำไร $2,000 แม้ว่ากำไรที่ถูกต้องควรจะเป็นประมาณ $0 สิ่งนี้อาจทำให้ผู้โจมตีสามารถทำกำไรจากการซื้อขายทุกครั้งและในที่สุดอาจทำให้โปรโตคอลสูญเสียเงินทุนทั้งหมดได้.

แหล่งที่มา: Zellic

ช่องโหว่แรกที่ Zellic ค้นพบนี้ ไม่ได้ปรากฏอยู่ใน Gains Network เวอร์ชันหลัก แต่มีเฉพาะในฟอร์คแยกของโปรโตคอลที่พวกเขากำลังตรวจสอบอยู่นั่นเอง อย่างไรก็ตาม ในระหว่างการวิจัยปัญหานี้ พวกเขาได้พบช่องโหว่อีกช่องโหว่หนึ่ง ซึ่งเคยปรากฏอยู่ใน Gains เวอร์ชันก่อนหน้านี้ด้วย

ช่องโหว่ที่ 2 ทำช่วยให้สามารถได้กำไร 900% จากการเทรดทุกครั้ง

จุดบกพร่องดังกล่าวทำให้เทรดเดอร์สามารถทำกำไร 900% จาก sell order โดยไม่คำนึงถึงการเคลื่อนไหวของราคา

เมื่อมีการปิดเทรดบน Gains fork ระบบจะแปลงจุด stop-loss หรือ take-profit ของผู้ใช้ เป็นตัวแปรชื่อ “int” เพื่อนำไปคำนวณผลกำไรเป็นเปอร์เซ็นต์ แต่หากผู้ใช้ตั้งค่า stop-loss หรือ take-profit ที่เท่ากับ 2^256-1 ผลลัพธ์ของการคำนวณจะทำให้ค่า “int” ติดลบ

สาเหตุเป็นเพราะ 2^256-1 คือ ค่าสูงสุดสำหรับจำนวนเต็มบวกบนระบบ Ethereum ทำให้ค่าใดๆ ที่เกินกว่านี้เกิดการ “overflow” หรือทำให้ค่าเหล่านั้นกลับไปเป็นศูนย์อีกครั้ง เนื่องจากการคำนวณยังบวกราคาเปิด (open price) เข้าไปด้วย ซึ่งในภาษาโปรแกรม Solidity ค่า 2^256-1 ถูกเรียกว่า “type(uint256).max” 

ตามที่ Zellic กล่าว, ตราบใดที่ผู้โจมตีมีการใช้เลเวอเรจมากกว่า 9 เท่า พวกเขาจะสามารถทำกำไรได้ 900% จากการใช้ช่องโหว่นี้:

“มาพิจารณาคำสั่งขาย, โดยมี currentPrice เป็น type(uint256).max ค่าที่ได้ของ diff จะเป็น openPrice + 1 (int(type(uint256).max) = -1), และด้วยเหตุนี้เปอร์เซ็นต์ของกำไรจะใกล้เคียงกับ 100 * เลเวอเรจ ดังนั้น, หากเลเวอเรจมากกว่า 9, ฟังก์ชันจะคืนค่ากำไรเป็น 900%”

สัญญา Smart Contract มีการตรวจสอบเพื่อป้องกันการตั้งค่า “Take-Profit” เป็นตัวเลข 2^256-1 แต่ระบบตรวจสอบนี้ทำงานเฉพาะตอนวางคำสั่งเทรดในครั้งแรกเท่านั้น ดังนั้นหากผู้ใช้ปรับเปลี่ยนจุด Take Profit ในภายหลังจากวาง Order ระบบจะไม่สามารถทำการตรวจสอบได้ ทำให้ผู้ใช้สามารถเปลี่ยนค่าเป็น 2^256-1 ได้ และส่งผลให้ได้รับกำไร 900% ทุกครั้งที่มีการเทรดสำเร็จ

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

ที่มา:cointelegraph