20250709 - GMX V1 攻击事件中,重入漏洞如何导致总体仓位价值被操纵?

摘要:背景 2025 年 7 月 9 日,GMX V1 遭受黑客攻击,损失约 4200 万美元资产。攻击者利用 executeDecreaseOrder 函数发送 ETH 的行为进行重入,绕过 enableLeverage 检查和 globalS
背景 2025 年 7 月 9 日,GMX V1 遭受黑客攻击,损失约 4200 万美元资产。攻击者利用 executeDecreaseOrder 函数发送 ETH 的行为进行重入,绕过 enableLeverage 检查和 globalShortAveragePrices 的更新进行开仓,从而操纵全局空头平均价格(globalShortAveragePrices),抬高 GLP 代币的价值。最后将 GLP 以池内资产(BTC、ETH、USDC 等)的形式赎回完成获利。 GMX V1 是一个去中心化永续合约交易平台,允许用户以最高 30 倍杠杆交易加密资产(如 ETH、BTC)通过 GLP 池作为合约用户对手方。流动性提供者(LP)通过存入资产(如 USDC、ETH)获得 GLP 代币。合约用户可开多头或空头头寸,盈亏以 USD 计价。平台通过 Chainlink 预言机获取价格,Keeper 自动化执行清算和限价单,确保效率和安全性。 Attack contract:https://arbiscan.io/address/0x7d3bd50336f64b7a473c51f54e7f0bd6771cc355 整个攻击事件涉及 14 笔交易,其中 1-13 笔是准备交易,第 14 笔是攻击交易。 Prepare transaction [TX 1-13] 要把这些准备交易全部找出来排好序真的不容易啊,每笔交易的发起者是不同的,所调用的合约也不同的。所以只能够通过各种 Key 和 Index 来排查每笔交易之间的顺序关系,确保没有遗漏掉相关的交易。 positionKey 对应的是 position requestKey 对应的是 request increaseOrdersIndex 对应的是 order,从 0 开始 decreasePositionsIndex 对应的是 request,从 1 开始 TX 1 [355878385]https://app.blocksec.com/explorer/tx/arbitrum/0x0b8cd648fb585bc3d421fc02150013eab79e211ef8d1c68100f2820ce90a4712 Order Book.createIncreaseOrder(): 攻击者创建了一个 WETH increase order ,这个仓位是后续多次进行重入的关键。[increaseOrdersIndex = 0] TX 2 [355878605]https://app.blocksec.com/explorer/tx/arbitrum/0x28a000501ef8e3364b0e7f573256b04b87d9a8e8173410c869004b987bf0beef Order Book.executeIncreaseOrder(): Keeper 执行 TX 1 中的 order,创建 WETH long position [positionKey = 0x05d2] TX 3 [355878984]https://app.blocksec.com/explorer/tx/arbitrum/0x20abfeff0206030986b05422080dc9e81dbb53a662fbc82461a47418decc49af Order Book.createDecreaseOrder(): Hacker 创建了一个 WETH decrease order,这是利用重入漏洞的关键操作。[positionKey = 0x05d2, decreaseOrdersIndex = 0] TX 4 [355879148]https://app.blocksec.com/explorer/tx/arbitrum/0x1f00da742318ad1807b6ea8283bfe22b4a8ab0bc98fe428fbfe443746a4a7353 Order Book.executeDecreaseOrder(): Keeper 执行 WETH decrease order,触发重入漏洞。
阅读全文