当前位置: 首页 > news >正文

智能合约安全 - 重入攻击 - 常见漏洞(第一篇)

重入攻击

简单来说:在合约状态还没发生改变前,不停的进行对合约进行套利操作。

存在场景:

1、单函数重入(Single-Function Reentrancy)

简单来说:在一个函数中进行多次获取钱财操作。一般发生在先给他人转账,再进行修改状态。

流程
• 攻击路径:Victim.funcA → Attacker.receive/fallback → Victim.funcA → …
• 经典案例:The DAO(2016)。
• 关键不变量:funcA 在每次外部调用前必须先完成「余额扣减或状态迁移」。

解决方案:

先修改状态,再进行转账。

2、跨函数重入(Cross-Function Reentrancy)

简单来说:A和B函数共享一个Mapping数据,A进行执行了操作,但是还没有更新Mapping中的数据。攻击者立即调用B函数进行再次操作获利。A和B函数在同一个合约中。

流程:
• 攻击路径:Victim.funcA → Attacker.receive → Victim.funcB。
• 共享状态:funcA 与 funcB 操作同一个 storage 变量(如全局余额 mapping)。
• 案例:Uniswap v1 的 ERC-777 重入(2020)。

解决方案:

  1. CEI 顺序

先调整状态,再进行转账

function withdrawAll() external {uint bal = balanceOf[msg.sender];require(bal > 0);balanceOf[msg.sender] = 0;   // ① 先清零(bool ok,) = msg.sender.call{value: bal}(""); // ② 再转账require(ok);
}
  1. 互斥锁
contract Victim is ReentrancyGuard {...function withdrawAll() external nonReentrant { ... }
}
  1. 状态机拆分
    如果业务必须在外部调用后更新状态,可引入「提款申请 → 延迟期 → 最终提取」两阶段模型,将重入面缩小到可控范围。
3、跨合约重入(Cross-Contract Reentrancy)

简单来说:两个合约共用同一份余额记录,A 合约还没扣账就把钱打出去,B 合约立刻利用未扣账的余额再把这笔钱提一次。

流程:
• 攻击路径:VictimA.funcA → Attacker.receive → VictimB.funcB。
• 共享状态:VictimA 与 VictimB 通过外部合约或 delegatecall 共享同一状态槽(如代理-实现模式)。
• 案例:Siren Protocol 抵押品计算漏洞(2021)。

4、只读重入(Read-Only Reentrancy)

流程:
• 攻击路径:Victim.funcA(尚未退出)→ Attacker.view → 读取中间状态 → 套利。
• 特点:攻击者并不修改状态,而是利用 view 函数返回的「脏数据」在外部协议中获利。
• 案例:Curve read-only reentrancy(2022),导致多个借贷协议价格预言机被操纵。

闪电贷治理攻击

用户进行闪电贷,使得自己所占份额变大在这一刻。那么如果 这一刻进行投票,该用户会获得大量选票,做一些恶意事件。

为什么说是这一刻,因为可能这个用户无法支付闪电贷的全部费用。

http://www.lryc.cn/news/594584.html

相关文章:

  • taro微信小程序的tsconfig.json文件说明
  • Taro 本地存储 API 详解与实用指南
  • Typecho目录树插件开发:从后端解析到前端渲染全流程
  • 使用pymongo进行MongoDB的回收
  • Kali MSF渗透Windows 11电脑
  • Taro 路由相关 API 详解与实战
  • taro+pinia+小程序存储配置持久化
  • 微美全息(WIMI.US)聚焦多元哈希锁机制,为链上链下数据可信交互按下加速键
  • 快速入门SwiftUI
  • 【大模型】结构化提示词:让AI高效完成复杂任务的“编程语言”
  • JavaEE初阶第十期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(八)
  • 经典神经网络(vgg resnet googlenet)
  • LiteCoT:难度感知的推理链压缩与高效蒸馏框架
  • Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析
  • 卫朋:华为流程体系拆解系列之高阶流程L1-L3分解三阶七步法
  • 深入详解随机森林在放射治疗计划优化中的应用及实现细节
  • 【Elasticsearch】BM25的discount_overlaps参数
  • Qt中的网络通信
  • Lua:小巧而强大的脚本语言,游戏与嵌入式的秘密武器
  • 搭建前端页面,介绍对应标签
  • wordle game(猜词游戏)小demo【react + ts】
  • 搭建种草商城框架指南
  • Protein FID:AI蛋白质结构生成模型评估新指标
  • MCP协议解析:如何通过Model Context Protocol 实现高效的AI客户端与服务端交互
  • 基础神经网络模型搭建
  • 【Linux】3. Shell语言
  • 双8无碳小车“cad【17张】三维图+设计说名书
  • XTTS实现语音克隆:精确控制音频格式与生成流程【TTS的实战指南】
  • XSS GAME靶场
  • 仙盟数据库应用-外贸标签打印系统 前端数据库-V8--毕业论文-—-—仙盟创梦IDE