coincuatui-banner

Lỗi trên mạng Gains Network cho phép người chơi lời lãi 900 trên mỗi giao dịch, báo cáo

Lỗi trên Gains Network fork cho phép nhà giao dịch lời 900% trên mỗi giao dịch: Báo cáo

Một kẻ tấn công có thể đặt một lệnh mua giới hạn với giá mở bất kỳ cao nào để tự động chiến thắng mọi giao dịch, nền tảng bảo mật Zellic đã phát hiện.

Lỗi trên Gains Network fork cho phép người chơi lời lãi 900% trên mỗi giao dịch, báo cáo

Theo Zellic, nhân viên của họ đã thông báo cho các nhà phát triển của Gains forks là Gambit Trade, Holdstation Exchange và Krav Trade về lỗ hổng này, và các nhóm phát triển này đã đảm bảo các giao thức của họ không chứa hai lỗ hổng đó. Tuy nhiên, Zellic cảnh báo rằng các forks Gains khác vẫn có thể bị tổn thương.

Theo trang web chính thức của họ, Gains Network là một hệ sinh thái sản phẩm tài chính phi tập trung (DeFi) trên Polygon và Arbitrum. Tên chính thức của ứng dụng giao dịch đòn bẩy của họ là "gTrade." Nó đã hỗ trợ hơn 25 tỷ USD trong khối lượng tương lai từ lúc ra đời vào tháng 5 năm 2023, theo nền tảng phân tích blockchain DefiLlama.

Lỗi trên mạng Gains Network cho phép người chơi lời lãi 900 trên mỗi giao dịch, báo cáo
Giao diện người dùng cho gTrade, ứng dụng giao dịch đòn bẩy của Gains Network. Nguồn: Gains Network

Theo báo cáo, các hợp đồng của Gains Network cho phép người dùng mở một giao dịch thị trường, đảo chiều hoặc đà động. Lệnh thị trường mua hoặc bán tài sản ngay lập tức, không phụ thuộc vào giá.

Khi người dùng yêu cầu mở một giao dịch đà động hoặc đảo chiều, hợp đồng thông minh ghi lại một "lệnh" chứa dữ liệu về giá mà người dùng muốn giao dịch. Khi giá này được đạt đến, bất kỳ người dùng nào cũng có thể gọi hàm executeLimitOrder để điền vào lệnh. Người dùng gọi việc thực thi không cần phải là người đã đặt lệnh. Người dùng gọi việc thực thi được thanh toán một khoản "phí thực thi" nhỏ để thực hiện vai trò này. 

Điều này cho phép người dùng đặt lệnh giới hạn (đà động) và lệnh giới hạn dừng (đảo chiều) tương tự như họ có thể trong một sàn giao dịch tập trung, nhưng không cần một thực thể tập trung thực hiện điền lệnh.

Khi một người dùng đặt lệnh, họ có thể thiết lập một giá lấy lãi, giá dừng lỗ hoặc cả hai. Mục đích của thiết kế này là cho phép nhà giao dịch tự động thoát ra khỏi một giao dịch lợi nhuận tại điểm lấy lãi hoặc một giao dịch thua lỗ tại điểm dừng lỗ. 

Lỗi trên phân nhánh Gains cho phép lời 900% trên các lệnh mua

Trong phiên bản Gains mà họ nghiên cứu, Zellic phát hiện rằng khi một lệnh được mở, giá dừng lỗ đã được lưu trong biến "currentPrice" được sử dụng để tính lợi nhuận và lỗ. Điều này có nghĩa là nếu một người dùng có thể đặt lệnh dừng lỗ cao hơn giá mở, họ có thể tự động lời từ mọi giao dịch. 

Ví dụ, xem xét một kịch bản trong đó giá của Bitcoin là 63.000 đô la và người dùng nhập 62.000 đô la làm giá mở và 64.000 đô la làm giá dừng lỗ. Trong trường hợp này, nếu giá giảm xuống 62.000 đô la, lệnh sẽ được thực hiện. Nhưng giá sẽ ngay lập tức dưới giá dừng lỗ của nó, kích hoạt một thoát ra tự động.

Ngoài ra, giá dừng lỗ do người dùng đặt sẽ được ghi nhận là giá hiện tại. Điều này có nghĩa là người dùng sẽ lời được 2.000 đô la, mặc dù lời nhuận chính xác phải là khoảng 0 đô la. Điều này có thể cho phép một kẻ tấn công lời từ mọi giao dịch và sau đó làm cạn kiệt giao thức của tất cả vốn của nó.

Để ngăn chặn lỗ hổng này, giao thức chứa một kiểm tra ném ra một lỗi "wrong_sl" nếu người dùng cố gắng đặt giá dừng lỗ cao hơn giá mở của họ trên một lệnh mua.

Lỗi trên mạng Gains Network cho phép người chơi lời lãi 900 trên mỗi giao dịch, báo cáo
Gains Network fork kiểm tra để ngăn lỗi lấy lãi hoặc dừng lỗ sai. Nguồn: Zellic

Khi một người dùng mở lệnh lần đầu tiên, họ đặt giá mà họ muốn mở giao dịch, và sẽ ghi lại vào biến "openPrice." Đó là lúc kiểm tra được thực hiện. Tuy nhiên, hàm được sử dụng để thực thi một lệnh đã thay đổi biến này thành giá "a.Price," là giá hiện tại cộng với ảnh hưởng giá từ việc mở lệnh. 

Điều này có nghĩa là nếu người dùng nhập một giá mở rất cao, một người thực thi có thể bỏ qua kiểm tra bằng cách thực thi lệnh. Điều này cũng cho phép người thực thi điền lệnh ở một giá mở dưới giá mà nó đã được thiết lập ban đầu. 

Ví dụ, Zellic xem xét ý tưởng về một kẻ tấn công đặt một lệnh mua một mã thông báo với giá 100000e10 đô la (1 tư).000 tỷ đô la) và đặt một giá dừng lỗ dưới một đô la so với hoặc 999.999999999999 triệu tỷ đô la. Sau khi đặt lệnh, kẻ tấn công sau đó thực thi lệnh của mình, gây ra thay đổi openPrice từ 100000e10 đô la thành giá hiện tại sau khi ảnh hưởng giá của giao dịch được tính. 

Giao dịch sau đó thực thi và trở nên mở. Miễn là giá mở kết quả dưới giá dừng lỗ được thiết lập ban đầu, nó có thể bây giờ bị đóng lại bằng cách thực thi giá dừng lỗ. Khi kẻ tấn công thực thi giá dừng lỗ của họ, họ lời từ sự khác biệt giữa giá đóng cửa và giá dừng lỗ.

Việc giao dịch sẽ dẫn đến 900% lời nhuận cho kẻ tấn công, Zellic tuyên bố.

Lỗi trên mạng Gains Network cho phép người chơi lời lãi 900 trên mỗi giao dịch, báo cáo
Ví dụ lợi nhuận từ lỗi phân nhánh Gains. Nguồn: Zellic

Lỗi này không xuất hiện trên Gains Network vào thời điểm nhóm Zellic phát hiện ra nó. Nó chỉ tồn tại trong phiên bản phân nhánh mà họ đang điều tra. Tuy nhiên, trong quá trình nghiên cứu vấn đề này, họ đã phát hiện ra một lỗ hổng thứ hai xuất hiện trong phiên bản trước đó của Gains.

Lỗi thứ hai cho phép lời 900% trên các lệnh bán

Lỗi thứ hai cho phép nhà giao dịch lời 900% trên các lệnh bán không phụ thuộc vào hành động giá.

Khi một giao dịch được đóng trong phân nhánh Gains, nó chuyển đổi điểm dừng lỗ hoặc lấy lãi

Nguồn: Cointelegraph

Xem thêm