Lỗi trong phân nhánh Gains Network cho phép nhà giao dịch kiếm được 900% lợi nhuận trên mỗi giao dịch: Báo cáo

Có vẻ như hai lỗ hổng bảo mật đã được phát hiện bởi một nhóm có tên Zellic trong nhiều nhánh khác nhau của giao thức Gains Network. Lỗ hổng đầu tiên cho phép kẻ tấn công bỏ qua bước kiểm tra ngăn chặn việc mở giao dịch ở mức giá cực cao, có khả năng mang lại lợi nhuận đáng kể cho kẻ tấn công. Lỗ hổng này được tìm thấy trong một nhánh cụ thể chứ không phải trong phiên bản hiện tại của Gains Network.


Một báo cáo từ công ty bảo mật blockchain Zellic, được xuất bản vào ngày 19 tháng 4, đã tiết lộ rằng hai lỗ hổng riêng biệt trong một nhánh cụ thể của giao thức giao dịch Gains Network có thể cho phép các nhà giao dịch đảm bảo lợi nhuận thiên văn lên tới 900% cho mỗi giao dịch, bất kể giá của token là bao nhiêu. . Một trong những lỗi này đã được xác định trong phiên bản Gains trước đó và đã được khắc phục. Tuy nhiên, lỗ hổng thứ hai là duy nhất đối với nhánh giao thức cụ thể đó.

Dựa trên thông báo của Zellic, các nhà phát triển của Gambit Trade, Holdstation Exchange và Krav Trade đã được nhóm của Zellic thông báo về lỗ hổng trong các nhánh Gains tương ứng của họ. Kể từ đó, các nhóm này đã thực hiện các bước để giải quyết vấn đề và đảm bảo giao thức của họ không có những sai sót cụ thể này. Tuy nhiên, Zellic cảnh báo rằng các phiên bản khác của Gains fork vẫn có thể gặp rủi ro.

Dựa trên trang web riêng của mình, Gains Network đại diện cho một hệ thống tài chính phi tập trung (DeFi) cung cấp nhiều sản phẩm khác nhau trên Polygon và Arbitrum. Tên được đặt cho ứng dụng giao dịch có đòn bẩy của nó là “gTrade”. Kể từ khi ra mắt vào tháng 5 năm 2023, nó đã ghi nhận khối lượng giao dịch phái sinh hơn 25 tỷ USD, theo báo cáo của DefiLlama, một nền tảng phân tích blockchain.

Lỗi trong phân nhánh Gains Network cho phép nhà giao dịch kiếm được 900% lợi nhuận trên mỗi giao dịch: Báo cáo

Zellic khẳng định rằng nhiều ứng dụng giao dịch Tài chính phi tập trung (DeFi) được sử dụng rộng rãi đều được xây dựng dựa trên cơ sở mã nền tảng của Gains Network. Trong số này có Gambit Trade và Holdstation, cùng với nhiều giao thức khác. Trong khi kiểm tra một đợt phân nhánh cụ thể, họ đã xác định được một lỗ hổng nhưng chọn không tiết lộ nó nằm trong đợt phân nhánh nào.

Dựa trên những phát hiện trong báo cáo, người dùng Gains Network có tùy chọn đặt ba loại lệnh khác nhau cho tài sản giao dịch: thị trường, đảo chiều và động lượng. Lệnh thị trường được thực hiện ngay lập tức theo giá thị trường hiện tại, bất chấp mọi biến động giá.

Là một nhà đầu tư tiền điện tử, khi tôi thực hiện giao dịch theo đà hoặc đảo chiều thông qua hợp đồng thông minh, một “lệnh” sẽ được ghi lại với thông tin chi tiết về giá giao dịch mong muốn. Khi mức giá đó được đưa ra trên thị trường, bất kỳ người dùng nào cũng có khả năng kích hoạt lệnh bằng cách kích hoạt chức năng execLimitOrder. Điều quan trọng cần lưu ý là người dùng bắt đầu thực hiện không nhất thiết phải là người đặt lệnh ban đầu. Đổi lại vai trò của họ trong việc thực hiện giao dịch, người dùng sẽ nhận được một khoản thanh toán “phí thực hiện” nhỏ.

Người dùng có khả năng đặt lệnh giới hạn và lệnh dừng giới hạn giống như trên sàn giao dịch truyền thống mà không cần dựa vào một trung gian tập trung để thực hiện lệnh.

Là một nhà đầu tư tiền điện tử, tôi có thể sử dụng tính năng cho phép tôi xác định mức giá cụ thể để tự động đóng giao dịch của mình. Bằng cách đặt giá chốt lời, tôi đặt mục tiêu đảm bảo lợi nhuận khi giao dịch đạt đến mức đó, trong khi giá dừng lỗ nhằm hạn chế tổn thất có thể xảy ra nếu thị trường đi ngược lại với tôi. Mục đích của các lệnh này là cung cấp chiến lược thoát tự động dựa trên các điều kiện được xác định trước.

Lỗi trong fork Gains cho phép lợi nhuận 900% trên các lệnh mua

Là một nhà nghiên cứu đang nghiên cứu hệ thống giao dịch nĩa Gains, tôi đã phát hiện ra một khám phá thú vị liên quan đến việc xử lý các lệnh dừng lỗ. Khi bắt đầu đặt lệnh, giá dừng lỗ sẽ được lưu trong biến “currentPrice” dùng để tính lãi và lỗ. Do đó, nếu nhà giao dịch đặt được giá dừng lỗ cao hơn giá mở cửa, họ sẽ tự động đảm bảo lợi nhuận từ bất kỳ biến động giá nào tiếp theo.

Với tư cách là một nhà phân tích tài chính, tôi sẽ diễn đạt lại như thế này: Khi giá Bitcoin (BTC) ở mức 63.000 USD và bạn đặt vị thế mở của mình ở mức 62.000 USD với mức dừng lỗ ở mức 64.000 USD, nếu giá giảm xuống còn 62.000 USD, lệnh của bạn sẽ được thực hiện. . Tuy nhiên, vì giá hiện ở ngay dưới mức dừng lỗ được chỉ định của bạn nên lệnh thoát tự động sẽ được bắt đầu.

Hơn nữa, giá dừng lỗ do người dùng chỉ định sẽ được ghi lại dưới dạng giá trị thị trường hiện tại. Do đó, người dùng sẽ bỏ túi khoản lợi nhuận 2.000 đô la, mặc dù mức lãi thực tế lẽ ra phải ở khoảng 0 đô la. Lỗ hổng này có khả năng cho phép kẻ tấn công tạo ra lợi nhuận trên mỗi giao dịch và cuối cùng làm cạn kiệt tiền của giao thức.

Với tư cách là nhà nghiên cứu đang điều tra các lỗ hổng tiềm ẩn trong các giao thức giao dịch, tôi khuyên bạn nên triển khai một biện pháp bảo vệ để ngăn người dùng đặt giá dừng lỗ cao hơn giá mua ban đầu của họ trên lệnh mua. Để đạt được điều này, giao thức phải bao gồm một cơ chế xác minh để kiểm tra sự không nhất quán và đưa ra thông báo lỗi có nhãn là “wrong_sl” khi người dùng thực hiện nỗ lực đó.

Lỗi trong phân nhánh Gains Network cho phép nhà giao dịch kiếm được 900% lợi nhuận trên mỗi giao dịch: Báo cáo

Tuy nhiên, các nhà điều tra phát hiện ra rằng việc kiểm tra này có thể bị bỏ qua trong một số trường hợp nhất định.

Khi người dùng bắt đầu đặt hàng lần đầu tiên, họ sẽ chỉ định giá vào lệnh mong muốn và giá này sẽ được lưu trong biến “openprice”. Ở giai đoạn này, việc kiểm tra được thực hiện. Tuy nhiên, hàm chịu trách nhiệm xử lý đơn đặt hàng sẽ thay đổi biến “openPrice” thành “a.Price” cộng với bất kỳ tác động giá nào từ giao dịch mới được bắt đầu. Nói một cách đơn giản hơn, khi người dùng bắt đầu đặt hàng, ban đầu họ sẽ đặt giá vào lệnh và giá này sẽ được ghi lại. Sau đó việc kiểm tra sẽ được tiến hành. Tuy nhiên, khi lệnh được thực hiện, giá vào lệnh ban đầu này sẽ được thay thế bằng giá thị trường hiện tại cộng với mọi chi phí bổ sung do quy mô lệnh (tác động đến giá).

Nếu người dùng nhập giá mở lệnh cao bất thường, hệ thống sẽ cho phép người thực thi xử lý lệnh mà không cần kiểm tra giá, dẫn đến việc thực hiện lệnh ở mức giá mở thấp hơn.

Ví dụ: Zellic đã cân nhắc về một kịch bản giả định liên quan đến một đối thủ có ý định mua một token có giá một triệu triệu đô la ($100000e10) và đặt mức dừng lỗ ở mức gần như nhau, cụ thể là ở mức $999,999999999998 nghìn tỷ đô la. Sau khi đặt lệnh này, đối thủ thực hiện giao dịch của riêng họ, dẫn đến sự thay đổi giá mở để phản ánh giá mới sau khi điều chỉnh giá của giao dịch.

Khi giao dịch được hoàn thành và hoạt động, nếu giá mở cửa tiếp theo giảm xuống dưới mức dừng lỗ được thiết lập ban đầu thì vị thế đó có thể bị chấm dứt bằng cách kích hoạt lệnh dừng lỗ. Khi đối thủ thực hiện giao dịch dừng lỗ, họ nhận được lợi nhuận từ khoảng cách giữa giá cuối cùng và giá mà lệnh dừng lỗ của họ được đặt.

Zellic tuyên bố giao dịch này sẽ mang lại lợi nhuận 900% cho kẻ tấn công.

Lỗi trong phân nhánh Gains Network cho phép nhà giao dịch kiếm được 900% lợi nhuận trên mỗi giao dịch: Báo cáo

Lỗ hổng đầu tiên mà chúng tôi phát hiện không phải là một phần của Gains Network ban đầu khi nhóm Zellic xác định được nó. Thay vào đó, nó xuất hiện trong biến thể phân nhánh mà chúng tôi đang kiểm tra. Tuy nhiên, trong quá trình điều tra vấn đề này, chúng tôi đã phát hiện ra vấn đề thứ hai đã xuất hiện trong phiên bản trước của Gains.

Lỗi thứ hai cho phép kiếm được 900% lợi nhuận trên các lệnh bán

Lỗi thứ hai cho phép các nhà giao dịch kiếm được 900% lợi nhuận từ các lệnh bán bất kể hành động giá.

Trong phân nhánh Gains, khi giao dịch được kết thúc, nền tảng sẽ chuyển đổi mức dừng lỗ hoặc chốt lời được chỉ định của người dùng thành một biến có tên là “int”. Biến này sau đó được sử dụng để xác định lợi nhuận theo phần trăm. Tuy nhiên, nếu người dùng đặt giá trị dừng lỗ hoặc chốt lời bằng 2^256-1 thì các phép tính tiếp theo sẽ dẫn đến giá trị âm cho “int”.

Trong Ethereum, giá trị tối đa cho số dương được biểu thị bằng 2^256-1. Khi cố gắng thêm một giá trị trên giới hạn này vào tổng trong ngôn ngữ lập trình Solidity, phép tính sẽ dẫn đến “tràn”, khiến nó phải khởi động lại từ 0. Giá trị này còn được gọi là “type(uint256).max.”

Dựa trên phát hiện của Zellic, nếu kẻ tấn công sử dụng đòn bẩy lớn hơn 9 lần khoản đầu tư ban đầu, chúng có khả năng thu được lợi nhuận hơn 900%.

“Hãy xem xét một lệnh bán, với currentPrice là loại(uint256).max. Giá trị kết quả của diff sẽ là openPrice + 1 (int(type(uint256).max) = -1 ), và do đó phần trăm lợi nhuận sẽ gần bằng đòn bẩy 100 *. Do đó, nếu đòn bẩy lớn hơn 9, hàm sẽ trả về lợi nhuận là 900%.”

Là một nhà nghiên cứu nghiên cứu các điều khoản hợp đồng trong giao dịch tài chính, tôi đã tìm thấy một điều khoản nhằm ngăn chặn việc nhập 2^256-1 làm mức chốt lời. Việc kiểm tra này được thiết kế để thực hiện khi lệnh ban đầu được đặt. Tuy nhiên, tôi đã phát hiện ra một lỗ hổng: nếu người dùng thay đổi cài đặt chốt lời sau khi lệnh được mở, họ có thể bỏ qua hạn chế này và nhập 2^256-1 làm mức lợi nhuận mong muốn. Sự giám sát này cho phép người dùng có khả năng đạt được lợi nhuận tự động khoảng 900% mỗi lần họ giao dịch.

Trong lần lặp lại Gains trước đó, đã xảy ra sự cố với lỗi thứ hai đã được giải quyết thông qua bản cập nhật. Giờ đây, phiên bản sửa đổi đã tránh được vấn đề này vì nó thực hiện quy trình xác minh không chỉ khi mức chốt lời và mức dừng lỗ được điều chỉnh mà còn khi thiết lập ban đầu.

Zellic bị cáo buộc đã chia sẻ thông tin về hai lỗ hổng bảo mật được xác định với tất cả các nhánh được đề cập và liên hệ với Liên minh bảo mật tiền điện tử để khám phá các giao thức có khả năng bị ảnh hưởng khác. Tuy nhiên, một lưu ý cảnh báo đã được đưa ra vì một số phiên bản fork của Gains vẫn có thể chứa những lỗi này, có khả năng khiến tiền của người dùng gặp rủi ro.

Với tư cách là một nhà đầu tư tiền điện tử, tôi đã liên hệ với CryptoMoon để hỏi về nỗ lực liên hệ với Gains Network, Gambit Trade, Holdstation Exchange và Krav Trade của họ để nhận xét. Tuy nhiên, tại thời điểm đăng bài viết này, tôi chưa nhận được bất kỳ phản hồi nào từ các sàn giao dịch này.

Theo Gains Network, họ đưa ra giá thị trường đích thực cho các tài sản được niêm yết thay vì những gì họ cho là những số liệu kém chính xác hơn bắt nguồn từ các hợp đồng vĩnh viễn. Hơn nữa, họ tự hào về việc có khả năng giao dịch ngoại hối tốt hơn so với đối thủ cạnh tranh.

2024-05-09 23:40