
BlockSec: Phân tích nguyên lý tấn công GMX
Tuyển chọn TechFlowTuyển chọn TechFlow

BlockSec: Phân tích nguyên lý tấn công GMX
Cuộc tấn công này đã phơi bày những thiếu sót nghiêm trọng trong cơ chế đòn bẩy và thiết kế bảo vệ chống tái nhập của GMX.
Tác giả: BlockSec
GMX đã bị tin tặc tấn công, thiệt hại hơn 40 triệu USD. Kẻ tấn công đã lợi dụng một lỗ hổng tái nhập (reentrancy) và mở vị thế bán khống khi chức năng đòn bẩy được kích hoạt trên hợp đồng để thực hiện cuộc tấn công.
Nguồn gốc vấn đề nằm ở việc sử dụng sai hàm executeDecreaseOrder. Tham số đầu tiên của hàm này lẽ ra phải là tài khoản ngoài (EOA), nhưng kẻ tấn công lại truyền vào một địa chỉ hợp đồng thông minh. Điều này cho phép kẻ tấn công tái nhập vào hệ thống trong quá trình hoàn vốn, thao túng trạng thái nội bộ, cuối cùng rút về lượng tài sản vượt xa giá trị GLP thực tế mà chúng nắm giữ.
Cơ chế hoàn vốn GLP bình thường
Trong GMX, GLP là token của nhà cung cấp thanh khoản, đại diện cho phần sở hữu trong các tài sản kho bạc (như USDC, ETH, WBTC). Khi người dùng gọi hàm unstakeAndRedeemGlp, hệ thống tính toán lượng tài sản cần hoàn trả theo công thức sau:
redeem_amount = (user_GLP / total_GLP_supply) * AUM
Trong đó AUM (tổng tài sản dưới quản lý) được tính như sau:
AUM = Tổng giá trị tất cả các pool token + Lỗ chưa thực hiện từ vị thế bán toàn cục - Lãi chưa thực hiện từ vị thế bán toàn cục - Số tiền đã dự phòng - Khoản giảm cố định (aumDeduction)
Cơ chế này đảm bảo rằng người nắm giữ GLP nhận được phần tài sản thực tế tương ứng từ kho bạc.
Vấn đề khi bật đòn bẩy
Khi enableLeverage được bật, người dùng có thể mở vị thế có đòn bẩy (mua hay bán khống). Kẻ tấn công đã mở một vị thế bán khống WBTC lớn trước khi hoàn vốn GLP.
Vì việc mở vị thế bán khống làm tăng ngay lập tức quy mô vị thế bán toàn cục, nên ngay khi mở lệnh – dù giá chưa thay đổi – hệ thống mặc định rằng vị thế này đang thua lỗ. Phần lỗ chưa thực hiện này được tính như một "tài sản" của kho bạc, khiến AUM bị đẩy lên cao một cách nhân tạo. Mặc dù kho bạc không thực sự có thêm giá trị nào, nhưng việc hoàn vốn lại dựa trên AUM ảo này, dẫn đến việc kẻ tấn công nhận được lượng tài sản vượt xa mức đáng lẽ được hưởng.
Quy trình tấn công
Giao dịch tấn công
https://app.blocksec.com/explorer/tx/arbitrum/0x03182d3f0956a91c4e4c8f225bbc7975f9434fab042228c7acdc5ec9a32626ef?line=93


Kết luận
Sự cố này phơi bày những thiếu sót nghiêm trọng trong thiết kế cơ chế đòn bẩy và bảo vệ chống tái nhập của GMX. Vấn đề cốt lõi nằm ở việc logic hoàn vốn quá tin tưởng vào AUM, mà không kiểm tra an ninh đầy đủ các thành phần cấu thành nó (ví dụ như lỗ chưa thực hiện). Đồng thời, các giả định về danh tính người gọi hàm then chốt (EOA hay hợp đồng) cũng thiếu xác minh bắt buộc. Sự việc nhắc nhở một lần nữa các nhà phát triển rằng, khi xử lý các thao tác liên quan đến tiền, phải đảm bảo trạng thái hệ thống không thể bị thao túng; đặc biệt khi đưa vào các logic tài chính phức tạp (như đòn bẩy, phái sinh), cần phải ngăn chặn nghiêm ngặt rủi ro hệ thống do tái nhập và ô nhiễm trạng thái gây ra.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














