GMX遭受攻击,攻击者通过项目合约的一个可重入漏洞实施了攻击,获利约4200万美元。Beosin安全团队对本次攻击事件进行了漏洞分析和资金追踪,并将结果分享如下:
详细攻击步骤
攻击者首先利用OrderBook合约中executeDecreaseOrder函数中退还保证金机制,发起重入攻击来绕过项目Timelock合约的杠杆开关:

然后,攻击通过闪电贷借入USDC进行质押铸造GLP,同时以USDC为保证金增加BTC的short仓位,导致GLPmanager合约的AUM值虚高,此值的计算会影响GLP的价格。

最后,攻击者以异常价格赎回GLP获利,并指定兑换为其他代币。
漏洞分析
通过以上攻击流程,我们可以看到整个事件的漏洞利用原因有以下两点:
- 缺少可重入保护,导致在赎回过程重入修改内部状态。
- 赎回逻辑比较复杂,缺少足够的安全校验。
虽然GMX经历了多次安全审计,但这个可重入漏洞还是被忽略了。而如果对赎回逻辑进行更严格的检查,并考虑到可能存在的重入漏洞,有可能避免此类安全事件的发生。
被盗资金追踪
Beosin Trace对被盗资金进行追踪发现:攻击者地址0x7d3bd50336f64b7a473c51f54e7f0bd6771cc355 获利约4200万美元,随后DeFi协议将稳定币和山寨币兑换成ETH和USDC,通过多个跨链协议将被盗资产转移至Ethereum网络。目前被盗资产中价值约3200万的ETH分别存放在以下4个以太坊网络地址:
- 0xe9ad5a0f2697a3cf75ffa7328bda93dbaef7f7e7
- 0x69c965e164fa60e37a851aa5cd82b13ae39c1d95
- 0xa33fcbe3b84fb8393690d1e994b6a6adc256d8a3
- 0x639cd2fc24ec06be64aaf94eb89392bea98a6605
约1000万美元的资产存放在Arbitrum网络的地址0xdf3340a436c27655ba62f8281565c9925c3a5221。Beosin Trace已将黑客相关地址加入黑地址库,后续将持续追踪。

据Beosin Trace分析,所有被盗资金仍存放在攻击者的多个地址中
总结
本次攻击的核心在于GMX合约存在重入漏洞,导致攻击者可通过虚假增加的AUM值赎回大量资产获利。像GMX此类复杂的DeFi协议,需要通过多方面、多层次的安全审计,对合约代码进行详尽的测试和审查。此前,Beosin安全团队已完成多个DeFi协议(如Surf Protocol、SyncSwap、LeverFi、Owlto Finance)的安全审计,专注于发现合约逻辑缺陷和可能被忽略的极端情况,确保DeFi协议经过全方位的检测。