在过去一周(2026年1月25日至2月1日),BlockSec 检测并分析了六起攻击事件,估计总损失约为 1805万美元。下表总结了这些事件,详细分析见后续章节。
| 日期 | 事件 | 类型 | 估计损失 |
|---|---|---|---|
| 2026/01/25 | SwapNet 事件 | 输入验证不当 | ~$13.41M |
| 2026/01/25 | Aperture Finance 事件 | 输入验证不当 | ~$3.67M |
| 2026/01/27 | PGNLZ 事件 | 代币设计缺陷 | ~$100K |
| 2026/01/28 | XPlayer 事件 | 代币设计缺陷 | ~$717K |
| 2026/01/28 | Holdstation 事件 | 密钥泄露 | ~$100K |
| 2026/01/30 | Revert Finance 事件 | 业务逻辑缺陷 | ~$50K |
1. SwapNet 事件
简要概述
2026年1月25日,SwapNet 协议在 Base、BSC 和 Arbitrum 上遭到利用,造成约 1341万美元 的损失。该事件源于对用户输入验证不足,攻击者得以构造调用,利用控制的参数调用 transferFrom()。通过滥用现有的代币授权,攻击者有效地执行了 token.transferFrom(victim, attacker, amount) 形式的转账,使其能够耗尽受害者的已授权资产。
背景
SwapNet 协议是一个 DEX 聚合器,旨在通过聚合多个链上来源(包括 AMM 和场外做市商)的流动性来寻找最优的交易路径。该协议还允许用户在执行交易时指定自定义路由或池,提供额外的灵活性。
漏洞分析
此事件源于对用户输入验证不足,这使得攻击者能够使用任意参数触发 transferFrom() 调用。因此,先前已授权给受害者合约(例如 0x616000e384Ef1C2B52f5f3A88D57a3B64F23757e)的资产可以转移给攻击者。
根据反编译的字节码,函数 0x87395540() 似乎未能对关键输入进行适当验证。通过将预期的路由或池地址替换为代币地址(例如 USDC),合约会错误地将代币视为有效的执行目标。这会导致使用攻击者控制的 calldata 执行低级调用。
因此,受害者合约会执行类似 approvedAsset.transferFrom(victim, attacker, amount) 的调用,允许攻击者盗取所有已授权的资产。
攻击分析
对 SwapNet 进行了多次攻击。在此,我们以 Base 交易 0xc15df1d131e98d24aa0f107a67e33e66cf2ea27903338cc437a3665b6404dd57 为例。攻击者只是用恶意输入调用了受害者合约的函数 0x87395540()。此调用包含两个主要步骤。
-
一个内部关键变量(例如
v51)被设置为USDC,绕过了预期的路由逻辑。
-
使用攻击者控制的 calldata 执行了低级调用,导致调用
USDC.transferFrom()并耗尽了所有已授权的USDC。
结论
该事件由用户输入验证不足引起,为该函数添加适当的输入参数检查将有助于缓解此问题。
2. Aperture Finance 事件
简要概述
2026年1月25日,Aperture 协议在 Ethereum、Base 和 Arbitrum 上遭到利用,造成约 367万美元 的损失。根本原因是用户输入验证不足,这使得攻击者可以通过内部函数 0x1d33() 使用任意参数触发 transferFrom() 调用。因此,攻击者能够执行 approvedToken.transferFrom(victim, attacker, amount) 等调用,从而耗尽所有已授权的资产。
背景
Aperture Finance 是一个 DeFi 协议,代表用户管理集中式流动性头寸,例如 Uniswap V3 LP。其闭源合约(例如 0xD83d960deBEC397fB149b51F8F37DD3B5CFA8913)允许用户使用原生代币铸造和管理 Uniswap V3 头寸。
铸造 Uniswap V3 头寸的预期工作流程
通过函数 0x67b34120() 铸造 Uniswap V3 头寸时,合约遵循预期的三步工作流程:
-
包装原生代币
-
通过内部函数
0x1d33()交换包装代币 -
铸造 Uniswap V3 头寸
问题出现在第 2 步:内部函数 0x1d33() 通过低级调用执行自定义交换,其中关键参数(例如调用目标和 calldata)似乎由用户控制且验证不足,从而导致了非预期的外部调用。更多细节将在以下章节中提供。
漏洞分析
该事件是由低级调用上的输入验证不足引起的。当调用函数 0x67b34120() 时,内部函数 0x1d33() 会使用用户提供的 calldata 执行低级调用,而没有对调用目标或函数选择器强制执行严格的限制。

如下图所示,用于触发低级调用的 calldata 完全基于攻击者的输入。

这使得攻击者能够构造恶意 calldata,导致在受害者合约的上下文中执行 approvedToken.transferFrom(victim, attacker, amount)。因此,不仅 ERC20 代币,而且已授权的 Uniswap V3 头寸 NFT 也可以被盗取。
攻击分析
对 Aperture Finance 进行了多次攻击。在本节中,我们使用 Ethereum 交易 0x8f28a7f604f1b3890c2275eec54cd7deb40935183a856074c0a06e4b5f72f25a 作为代表性示例。
-
攻击者创建了一个攻击合约
0x5c92884dFE0795db5ee095E68414d6aaBf398130。 -
攻击合约使用恶意输入和 100 wei ETHs(即 msg.value == 100)调用了函数
0x67b34120()。a. 通过
WETH.deposit()函数将原生 ETH 包装成 WETH。
b. 调用内部函数
0x1d33()执行低级调用。在此步骤中,在受害者合约的上下文中调用了WBTC.transferFrom(victim, attacker, amount),允许攻击者盗取已授权的代币。 值得注意的是,函数0x1d33()的末尾通过了一个余额检查。具体来说,函数0x1d33()将余额变化与攻击者指定的交换输出值(即varg2.word2)进行了比较。因此,这些交易成功执行,但没有收到任何东西。
c. 最后,调用函数 NonfungiblePositionManager.mint(),使用 100 wei WETH 为攻击者铸造头寸。
有趣的发现
通过比较正常和异常的铸造交易,我们观察到两笔交易都将代币授权给了相同的支出方(例如 OKX DEX: TokenApprove),但指定了不同的路由地址(即 DexRouter 和 WBTC)。这表明该合约可能对授权支出方进行验证,但未能验证实际的执行目标,留下了一个可以通过任意调用利用的关键漏洞。
正常交易:tx link1

异常交易:tx link2

结论
该事件由用户输入验证不足引起。添加适当的输入验证将有助于缓解此问题。
3. PGNLZ 事件
简要概述
2026年1月27日,BNB Smart Chain 上的 PancakeSwap V2 USDT–PGNLZ 池遭到利用,造成约 10万美元 的损失。根本原因是 PGNLZ 代币中存在一个有缺陷的销毁机制,该机制允许攻击者直接从池的余额中销毁 PGNLZ。这人为地减少了池的 PGNLZ 储备,造成了剧烈的储备失衡,并扭曲了链上价格。随后,攻击者利用被操纵的价格执行交易,耗尽了池中的 USDT。
背景
PGNLZ 代币引入了一个针对 PancakeSwap V2 池的销毁机制。在特定条件下可以触发销毁机制。具体而言,对于池中的每一次购买,代币会检查池中的 USDT 余额是否已达到预设阈值。一旦达到阈值,它就会从池中销毁一定数量的 PGNLZ,并将 tradingEnabled = true,之后普通用户就可以与池进行交互。当交易模式启用且用户在池中出售 PGNLZ 时,代币会根据先前用户的 PGNLZ 卖出量,首先销毁池中持有的 PGNLZ。

漏洞分析
核心问题在于 PGNLZ 代币引入的有缺陷的销毁机制,该机制容易受到价格操纵攻击。具体来说,攻击者可以通过将接收者设置为 isExcludedFromFee 地址(即 0xdEaD)来绕过交易模式限制,从而操纵池的储备(即购买 PGNLZ)。然后,攻击者利用销毁机制(即通过函数 _executeBurnFromLP())直接从池中销毁 PGNLZ,进一步操纵池的储备。结果是,攻击者可以通过在被操纵的池中执行反向交易(即出售 PGNLZ)来获利。

攻击分析
以下分析基于交易:0xc7270212846136f3d103d1802a30cdaa6f8f280c4bce02240e99806101e08121
-
攻击者通过 Moolah 的闪电贷借入了
1,059e18 BTCB,并通过在 Venus 提供1,059e18 BTCB借入了30,000,000e18 USDT。 -
当交易模式禁用时,攻击者在 PancakeSwap V2 池中将
23,337,952e18 USDT兑换为978,266e18 PGNLZ。攻击者通过将接收者设置为0xdEaD使此交易成为可能,从而绕过了相应的验证。 -
攻击者用先前拥有的
17e18 PGNLZ在 PancakeSwap V2 池中兑换了USDT。在此交易期间,触发了函数_executeBurnFromLP(),从池中销毁了4,240e18 PGNLZ(即基于先前的PGNLZ卖出量)。此销毁过程使池的储备仅剩下0.00000001e18 PGNLZ,进一步操纵了池的PGNLZ储备。由于PGNLZ储备枯竭,攻击者仅用17e18 PGNLZ就从池中耗尽了23,438,853e18 USDT。 -
攻击者偿还了 Venus 中的头寸,最终获利
100,901e18 USDT。
结论
此事件的根本原因在于 PGNLZ 的销毁机制存在缺陷,该缺陷允许攻击者通过执行价格操纵攻击来耗尽池中的 USDT。因此,该事件总共造成约 10 万美元的损失。为了缓解此类问题,项目必须在系统内实施适当的访问控制,并对销毁机制进行全面测试,以避免潜在的价格操纵攻击。
4. XPlayer 事件
简要概述
2026年1月28日,BNB Smart Chain 上的 PancakeSwap V2 XPL/USDT 池遭到利用,造成约 71.7万美元 的损失。该事件是由 XPL 代币中存在缺陷的销毁机制引起的,该机制允许攻击者直接从池的余额中销毁 XPL。通过人为地减少池的 XPL 储备,攻击者造成了严重的储备失衡并扭曲了交易价格,然后利用被操纵的价格从池中耗尽 USDT。
背景
代币 XPL 引入了一个销毁机制,该机制会销毁相应池中的 XPL 代币,然后调用 sync() 函数刷新池的储备。具体而言,在 NodeDistributePlus 合约中,可以通过 DynamicBurnPool() 函数执行每日销毁任务,执行时间在某个窗口内。销毁数量不得超过剩余的每日销毁上限。
漏洞分析
此事件的根本原因在于 XPL 合约中存在缺陷的销毁机制。特别是,XPL 合约中的 DynamicBurnPool() 函数允许某些特权地址直接从流动性对中销毁 XPL。

其中一个特权地址是 NodeDistributePlus 合约(即 nodeShareAddress),它实现了每日销毁计划。在特权账户设置了每日销毁目标后,任何调用者都可以在 2 天的窗口内调用 NodeDistributePlus.DynamicBurnPool(),直到达到每日销毁上限。

结果是,这种设计允许任何人从相应池中销毁 XPL 并强制更新储备。攻击者可以利用此设计来操纵池储备,并执行反向交易以耗尽池中的 USDT。
攻击分析
以下分析基于交易:0x9779341b2b80ba679c83423c93ecfc2ebcec82f9f94c02624f83d8a647ee2e49
-
攻击者通过闪电贷借入了约
239,523,169e18 USDT。
-
攻击者将
100e18 USDT兑换为69e18 XPL。此步骤将池的储备与当前余额同步。
-
攻击者将
217,118,801e18 USDT兑换为约691,022e18 XPL。此步骤经过精心计算,以便为后续的储备操纵设置池的状态。
-
攻击者调用
DynamicBurnPool()函数从池中销毁了3,078e18 XPL。此销毁过程进一步将池的XPL储备操纵为极小值(例如 1 wei)。
-
攻击者用
69e18 XPL兑换了218,083,490e18 USDT,利用了被操纵的储备。
-
攻击者偿还了闪电贷,获利
718,844e18 USDT。
结论
此事件是由一个有缺陷的销毁机制引起的,该机制允许任何人直接从池中销毁 XPL 来操纵其储备。因此,这种有缺陷的设计允许攻击者进行价格操纵攻击,耗尽池中的有价值资产。为了缓解类似问题,项目应阻止从池中任意销毁资产。
5. Holdstation 事件
简要概述
2026年1月28日,Holdstation 报告了一起涉及项目控制钱包被盗的事件,估计总损失约为 10万美元。攻击者耗尽了 World Chain、BSC、Berachain 和 zkSync 上价值约 6.6万美元 的多种资产,包括 WLD、USD1、BNB 和 BERA,然后将收益汇总到 Ethereum 约 22.41 ETH,最后桥接到 Bitcoin 约 0.755 BTC。该事件追溯到一名团队成员的设备被盗用,据称是通过恶意 IDE 或浏览器扩展实现的,从而导致了钱包被盗。
漏洞分析
此次泄露源于一名核心开发者安装了恶意的或不受信任的 IDE/浏览器扩展,这代表了操作层面的失误。具体来说,该开发者安装了一个恶意的、不受信任的 IDE/浏览器扩展,导致了账户被盗用和财务损失。
攻击分析
相关地址和桥接交易列于下文:
攻击者地址
0x54e127b8dbf3bebf64bb1d62a195a6f60113130d0x9d3a398cc667b97841a2a92ba808ee8dd368a1f2bc1qykmc6mllm3s4zpldww764v6vcgtqwshyw02k9c
受害者地址
- (World Chain)
0xa92e09e0a52b7EdEaD75d3125e21bDFB9752C69e - (World Chain)
0xD768da05e0E6771Ea81b441026CE9355421eF7c9 - (World Chain)
0xA581ED1dEB42E8496E5275468C79D250b91d6a75 - (World Chain)
0x9BD647B2C8Fed689ADd2e7AA8b428d3eD12f75cb - (BSC)
0x2Edf158DDCe35733d6f7D9D7227610ca0531f0AD - (BSC)
0xA581ED1dEB42E8496E5275468C79D250b91d6a75 - (Bera Chain)
0xA581ED1dEB42E8496E5275468C79D250b91d6a75 - (Bera Chain)
0x628cEf732301aDF6d62bB2bcDFeBB291750C4D9a - (zkSync)
0xA581ED1dEB42E8496E5275468C79D250b91d6a75 - (zkSync)
0x8C826F795466E39acbfF1BB4eEeB759609377ba1 - (zkSync)
0x4Cf7baB01b8D3572b3dC08642ebbE2AD1aCF3B99 - (zkSync)
0x2Edf158DDCe35733d6f7D9D7227610ca0531f0AD - (zkSync)
0x2D2D047c50d7828Aedb6A151bA1717766606Bf33
桥接交易
-
World Chain → Ethereum
- 金额:
114,308 WLD → 15.317 ETH - 发送方:
0x54e127b8dbf3bebf64bb1d62a195a6f60113130d - 接收方:
0x54e127b8DBF3BEBf64bB1d62A195A6f60113130dhttps://relay.link/transaction/0x3c9ca5e83151a4ee146a3a5bb0eacc5614ca7b746b39672b36ac665c5f1ac216
- 金额:
-
BSC → Ethereum
- 金额:
10.09 BNB → 2.992 ETH - 发送方:
0x54e127b8dbf3bebf64bb1d62a195a6f60113130d - 接收方:
0x54e127b8DBF3BEBf64bB1d62A195A6f60113130dhttps://relay.link/transaction/0x60534c760f5233b02630e7ebda98511807421d6a475f0de12e502b2c1c85f67a
- 金额:
-
BSC → Ethereum
- 金额:
6,101.6 USD1 → 2.027 ETH - 发送方:
0x54e127b8dbf3bebf64bb1d62a195a6f60113130d - 接收方:
0x54e127b8DBF3BEBf64bB1d62A195A6f60113130dhttps://relay.link/transaction/0xdddc9df8398727e7ccab44a9d904cfb60bac55ed8cc5c79fdbfc0523e3d84440
- 金额:
-
Berachain → Ethereum
- 金额:
7,185 BERA → 1.45 ETH - 发送方:
0x54e127b8dbf3bebf64bb1d62a195a6f60113130d - 接收方:
0x54e127b8dbf3bebf64bb1d62a195a6f60113130dhttps://www.gas.zip/scan/tx/0x80aea4b294aef92a5eb45d257a5b1f1125d2d74c8373d0b5ba9fc9b069522bdd
- 金额:
-
Ethereum → Ethereum
- 金额:
22.41 ETH → 22.41 ETH - 发送方:
0x54e127b8dbf3bebf64bb1d62a195a6f60113130d - 接收方:
0x9D3A398cC667B97841a2A92ba808ee8dD368a1f2https://app.blocksec.com/phalcon/explorer/tx/eth/0xf4ddf8f50a09e845f273e0a6368cece215f565233f5034a4a6c63ca038959c3c https://app.blocksec.com/phalcon/explorer/tx/eth/0x5d45d28236a0d76a69dd27e78b05f6baf6378e674734a136b6141dbf80687480
- 金额:
-
Ethereum → Bitcoin
- 金额:
22.41 ETH → 0.755 BTC - 发送方:
0x9d3a398cc667b97841a2a92ba808ee8dd368a1f2 - 接收方:
bc1qykmc6mllm3s4zpldww764v6vcgtqwshyw02k9chttps://relay.link/transaction/0xafd628dd1e0d508c40d3e3c2895f39902d14d42f9760b25beacdcc25c3419143
- 金额:
结论
此事件的根本原因在于密钥泄露。管理员密钥,特别是与核心合约中的关键角色(例如所有者)相关的密钥,应妥善管理。建议使用多重签名钱包,以避免单点故障并增强系统稳健性。
6. Revert Finance 事件
简要概述
2026年1月30日,Base 上的 Revert Finance 遭到利用,造成约 5万美元 的损失。根本原因是 GaugeManager 合约中存在业务逻辑缺陷,允许攻击者在不偿还相应债务的情况下提取抵押品。通过滥用 executeV3UtilsWithOptionalCompound(),攻击者绕过了预期的债务偿还流程并提取了资金。
背景
Revert Finance 是一个为自动做市商 (AMM) 流动性提供者 (LP) 设计的全面工具平台。它主要提供分析、管理、自动化和借贷功能,以帮助 LP 提高资本效率和风险控制。
在该协议中,用户可以将他们的 Uniswap v3 头寸作为抵押品存入,以从 Revert Finance 的借贷池中借入资产。此外,该协议允许用户质押他们的头寸(用作抵押品),以通过 stakePosition() 函数赚取额外奖励。
漏洞分析
该事件的根本原因在于取消质押作为抵押品的头寸时缺乏偿付能力检查。具体来说,executeV3UtilsWithOptionalCompound() 函数允许用户通过指示相应的指令(即 whatToDo = 1)来取消质押头寸。然而,此函数在取消质押已抵押头寸时缺少偿付能力检查。因此,攻击者可以在不偿还未偿债务的情况下赎回已抵押头寸。

攻击分析
以下分析基于交易:0x10429eaeb479f9149854e4aeb978a35ac02d9688f6e22371712b3878c63a64ab
-
攻击者通过闪电贷借入了
10e8 cbBTC和10,000,000e6 USDC以铸造头寸(即 NFT)。 -
攻击者将 NFT 作为抵押品质押,并借入了
49,000e6 USDC。 -
攻击者通过
stakePosition()函数质押了已抵押的 NFT。 -
攻击者立即使用
executeV3UtilsWithOptionalCompound()函数取消了已抵押 NFT 的质押。具体而言,已抵押头寸被销毁,相应的底层资产被攻击者收取。由于取消质押过程中缺乏偿付能力检查,已抵押头寸在未结清相应债务的情况下被销毁。

- 攻击者偿还了闪电贷,获利
49,000e6 USDC。
结论
事件的根本原因在于取消已抵押头寸时缺乏偿付能力检查。此事件强调了在借贷类协议中进行偿付能力检查的重要性。为每次头寸使用实施健全的偿付能力措施对于确保稳定性和可靠性至关重要。
参考资料
[1] SwapNet & Aperture https://blocksec.com/blog/17m-closed-source-smart-contract-exploit-arbitrary-call-swapnet-aperture
[2] PGNLZ: https://x.com/Phalcon_xyz/status/2016154398817505595
[3] XPlayer: X Player Official https://x.com/XPlayer_Media/status/2016700861578403910
[4] XPlayer: X Blocksec Phalcon https://x.com/Phalcon_xyz/status/2016521384609067103
[5] Holdstation: https://x.com/Phalcon_xyz/status/2016823122373296583
[6] Revert Finance: https://paragraph.com/@revertfinance/post%E2%80%91mortem-aerodrome-lend-vault-incident-on-base?referrer=0x8cadb20A4811f363Dadb863A190708bEd26245F8



