GCSA 洞察: 日常巡检发现的9项未公开智能合约风险

GCSA 洞察: 日常巡检发现的9项未公开智能合约风险

GCSA found 9 smart contract flaws across Ethereum, PEPU L2, Asset Chain, QIE, and Lens Chain. Issues include missing callback auth, unbound signatures, replay claims, clone reinitialization, weak randomness, and unsafe EIP-7702 delegations. No exploits were broadcast on production chains.

前言

随着 Web3 生态持续发展,智能合约安全风险已从传统代码缺陷延伸至协议交互、签名验证、账户权限及链上链下协同等多个环节。部分看似细微的实现偏差,也可能在特定条件下形成实际的资产风险。


2026 年 11 月初,全球网络安全联盟(Global Cybersecurity Alliance,GCSA)旗下 Web3Labs Agent 在日常安全巡检中,对 Ethereum、Asset Chain、PEPU L2、QIE、Lens Chain 等多条区块链上的智能合约开展自动化检测,并结合人工只读复核与本地 Anvil fork 验证,筛选出 9 项具有代表性的漏洞与风险发现。


本期「GCSA 洞察」涉及回调鉴权、ERC-4337 签名绑定、奖励重复领取、合约初始化、弱随机数、EIP-7702 委托执行及账户权限控制等多个安全场景。部分问题已在本地 fork 环境中完成资金转移或业务逻辑复现,另一些则受到特定权限、历史协议状态或第三方组件等条件限制。


需要说明的是,本次研究未向生产链广播利用交易。相关发现反映的是检测与验证时点的技术状态,不代表漏洞已被实际利用,也不意味着相关风险在本文发布时仍然存在。

以下为原始技术报告。

总览

编号

项目 / 目标

链

漏洞类型

1

PEPU PoolSwapper

PEPU L2

回调未鉴权

2

Particle Paymaster

Ethereum

签名未绑定 UserOp

3

Manta TokenDistributor

Ethereum

大小写重复领取

4

Asset Chain Moonpie

Asset Chain

Clone 重初始化

5

Ren 1.0 Darknode

Ethereum

重注册提取历史奖励

6

QIE Lottery

QIE

弱随机强制中奖

7

BitMart 标签账户

Ethereum

EIP-7702 execute 无鉴权

8

Lens Account

Lens Chain

Manager 越权转原生代币

9

Push Distributor

Ethereum

第三方 EIP-7702 危险委托


分项观察

1. PEPU PoolSwapper 回调未鉴权

PEPU L2 上的PoolSwapper(0xEfAb…2689)在实现uniswapV3SwapCallback时,将msg.sender 无条件当作可信Uniswap V3 池使用,同时从不可信的data 字段解码payer 地址,两处安全边界同时失效。任意第三方合约只需让自己的token0() 返回目标代币地址,再主动调用该回调并指定已授权用户为payer,即可让PoolSwapper 以自身spender 身份划走受害者代币。整个过程不需要受害者在线或进行任何新交互。



图1:PoolSwapper 回调函数,msg.sender 和payer 均未校验


在当前生产状态的本地fork 上已端到端复现:攻击者部署伪造池合约,主动调用PoolSwapper 回调,成功以PoolSwapper 的spender 身份将两个真实授权地址的代币划走。受害者地址全程未发送任何交易。实际可触及范围取决于仍保留有效allowance且持有对应代币的地址,随用户操作实时变化。建议项目方在回调中通过工厂getPool()验证msg.sender,将payer 与外层swap 上下文绑定,并通知历史授权用户撤销allowance。


2. Particle Paymaster 签名未绑定UserOperation

Ethereum 主网上的Particle ERC-4337 Paymaster(0x4A0F…0266)为用户赞助gas,但其签名摘要实质上只绑定了chainId、Paymaster 地址、senderNonce、validUntil 和validAfter 五个字段,而sender、callData、三项gas limit 和两项fee 参数均未被纳入。攻击者可先为低成本操作取得合法赞助签名,再将preVerificationGas篡改为极高值,把EntryPoint 从Paymaster 存款中扣除的gas 补偿结算到自己控制的beneficiary 地址。



图2:Paymaster 签名摘要仅绑定5 个字段,gas 参数全部缺失


在最新主网fork 中,攻击者将preVerificationGas 篡改为45,000,000 并提交handleOps,Paymaster 因弱摘要仍接受原始赞助签名,EntryPoint 从Paymaster 存款中扣除gas 补偿并发送给攻击者beneficiary。扣款与beneficiary 增量精确相等,证明是存款向攻击者地址的直接价值转移而非估算误差。建议使用EntryPoint 规范UserOperation 哈希或完整EIP-712 结构对全部安全关键字段签名,修复前暂停赞助或撤出EntryPoint 存款。


3. Manta TokenDistributor 大小写重复领取

Manta 奖励API 对protocolType 查询不区分大小写,但链上TokenDistributor(0x04c7…a10d)以包含原始大小写的digest 作为唯一防重键。以"symbiotic" 为例,9 个字母产生512 个大小写变体,API 视为同一协议返回同额签名,链上却当作512 份独立记录。正常路径领完后其余511 个变体键仍为0,可继续领取。



图3:TokenDistributor 以digest 为唯一防重键,大小写变体产生独立记录


对一个今天仍有出账活动的历史EOA 验证:canonical digest 已领完全部奖励,提交protocolType="SYMBIOTIC" 后API 返回同额但不同digest 的有效签名,eth_call成功,干净fork 实际支付同等金额。该地址仍有511 个未使用的变体键,合约提供batchClaimToken 且签名无deadline,可分批完成。攻击者限于仍控制历史奖励地址的既有参与者,新地址当前无法获得奖励资格。建议API 在digest 构造前对protocolType 做严格规范化,链上replay key 绑定稳定业务身份,并立即暂停Distributor 或撤销signer。


4. Asset Chain Moonpie/SafeLaunchV2 Clone 重初始化

Asset Chain 上两个已初始化的clone 的__initialize 缺少一次性锁,任意EOA 可覆盖token/paymentToken/owner 等关键参数,但totalTokensSold 不会清零。攻击者将token 改为自铸假币、paymentToken 保持为真实xRWA,即可用假币通过sellTokens 换走clone 中的真实资产。Moonpie clone 还可通过owner 覆盖触发endBonding() 建池,将剩余余额通过LP NFT 取出。在干净fork 中两条路径均已端到端复现,最终通过现役DEX 池兑换为桥接USDT。建议所有clone initializer 使用不可重复的初始化锁并限制只能由可信factory 调用,对仍持有资产的旧clone 立即暂停或清空。


图4:__initialize 无一次性锁,token/paymentToken/owner 均可被覆盖

5. Ren 1.0 DarknodeID 重注册劫持历史奖励

Ren 1.0 的DarknodeRegistry 允许已退款ID 被新地址重新注册,DarknodePayment.withdraw 按当前operator 支付历史奖励。Registry 退款时清空operator 但不结清PaymentStore 旧债权,形成可被抢注的身份key。扫描器枚举了1,694 个已退款或可退款且仍有奖励余额的目标ID,生产只读调用确认register 入口未被暂停、withdraw 按当前operator 支付。Ren 官方于202