跳到主要内容

常见漏洞

所有存在于以太坊的 EVM 安全问题也存在于 OXN。本页列出经典类别,配上 OXN 专属注意事项。

重入

描述。 合约在完成自己的状态更新前调出到不可信地址,被攻击者重入,观察或操纵半完成状态。

OXN 上。 与以太坊一致。机密性不阻止重入——攻击者的合约也在 enclave 内,看到的正是你合约在调用中 emit 的东西。

预防。ReentrancyGuard。遵循 checks-effects-interactions。

整数溢出 / 下溢

描述。 超出类型范围的算术操作发生环绕。

OXN 上。 与以太坊一致。Solidity 0.8+ 内建溢出即 revert 的检查。不要禁用。

访问控制失败

描述。 缺失或错误的授权检查允许未授权调用者调用特权函数。

OXN 上。 与以太坊一致。msg.sendertx.origin 行为相同。用 OpenZeppelin AccessControl 或显式检查。

预言机操纵

描述。 依赖外部价格 feed 的合约可以被喂坏价格操纵。

OXN 上。 与以太坊一致。加密不验证数据——通过明文预言机喂的谎话仍是谎话。

抢跑(OXN 上应用大减)

描述。 攻击者观察 mempool 里的交易,提交一笔竞争交易谋利。

OXN 上。 显著减少。加密 calldata 意味着攻击者看不到你的交易做什么。基础机密性关闭了大部分基于 mempool 的 MEV 向量。但注意:

  • 交易排序仍可见。
  • 可预测的模式(例如总是在 UTC 03:00 交易)仍可能被 proximity 攻击利用。

签名重放

描述。 在一条链上合法的签名在另一条链上重放做非预期操作。

OXN 上。 与以太坊一致。用 EIP-155(签名中带 chain ID)和 EIP-712(typed data)把签名绑到特定链与用途。

缺失输入校验

描述。 合约接受输入不校验。

OXN 上。 与以太坊一致。加密 calldata 里仍是攻击者可控数据。

OXN 专属:不安全的随机数使用

描述。block.timestampblock.numberPREVRANDAO 做随机数。

预防。Sapphire.randomBytes。见随机数

OXN 专属:通过明文调用发送方伪造

描述。 门控 msg.sender 的 view 函数在通过明文 eth_callmsg.sender = 0x0)调用时行为错误。

// 通过明文 eth_call 调用时 msg.sender 是 0x0,检查通过
function isAdmin() external view returns (bool) {
return msg.sender == owner; // owner 恰好是 0x0 时返回 true
}

预防。 不要用 view 函数的 msg.sender 做安全决策——只用它过滤返回什么数据。真正的授权需要签名查询并显式检查。

OXN 专属:通过 gas 或存储模式泄漏机密

详见机密性陷阱

下一步