20251123-Port3 攻击事件分析:签名验证绕过+跨链增发代币

20251123,攻击者利用 CATERC20 合约中签名验证过程中没有检查非零地址签名的漏洞,调用 registerChain 函数设置了其他链的代币合约。使得跨链代币增发,抛售代币进行获利。

Hacker:https://bscscan.com/txs?a=0xb13A503dA5f368E48577c87b5d5AeC73d08f812E

Exploit tx1:https://app.blocksec.com/explorer/tx/bsc/0xfaf450571541b95f924024ac3febd5cf6c16695ce787217ca8870350309051c1

输入的参数

msg.sender:"0xb13a503da5f368e48577c87b5d5aec73d08f812e"
	func:"registerChain"
	args:{
		chainId:"23"
		tokenContract:"0x00000000000000000000000092d7af0abac7128a5051b9a16b514e768e5b30f3"
		signatureArguments:[
		{
			custodian:"0xb13a503da5f368e48577c87b5d5aec73d08f812e"
			validTill:"9,999,999,999"
			signature:"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
		}
	]
}

当 msg.sender 不是 owner 时,会走到 else 分支验证签名情况。从输入可以看出 owner 为零地址,攻击者传入的 signature 为 0x00..00(未被使用过的签名)

image

在 verifySignature 函数中直接使用了 ecrecover 函数的返回值进行对比,没有检查 authority 的值是否为 0 地址。利用了验签失败的返回值为 0 地址,加上 owner 重置了为 0 地址这两个条件,绕过了签名检查。

image

image

posted @ 2025-11-23 19:54  ACai_sec  阅读(36)  评论(0)    收藏  举报