Delegatecall的“隐形炸弹”,一次存储碰撞如何接管整个DeFi协议

[Web3] 基础第4篇: 区块链的组织结构 适用于大规模数据过滤(如 区块链、数据库、搜索引擎)低存储需求、高速查询的场景需要注意不能删除数据(标准版本) → 计数布隆过滤器解决存在误判(False Positive) → 适用于 非精确查询布隆过滤器以 高效存储和快速查询 在 区块链、分布式存储和大数据处理 领域有广泛应用。 阅读详情

在过去一年的 Web3 审计报告中,Delegatecall 存储碰撞(Storage Collision) 是出现频率非常高、但很多开发者仍然低估的漏洞类型。大量协议为了实现可升级架构或模块化系统,使用 delegatecall 执行外部逻辑代码,但如果存储布局设计不当,攻击者就可能通过一次调用直接篡改核心变量甚至接管协议。本文将从底层 EVM 机制、漏洞代码解析以及攻击流程进行一次专业级分析。

一、为什么 Delegatecall 危险

在 Ethereum Virtual Machine 中有四种常见调用方式:

call

delegatecall

staticcall

callcode (已废弃)

delegatecall 的关键特性是:

👉 代码来自目标合约,但存储来自当前合约

也就是说:

执行代码:外部合约

使用存储:当前合约

msg.sender:保持不变

这正是升级代理(Proxy Pattern)广泛使用 delegatecall 的原因。

但如果两个合约的 storage layout 不一致,就会产生灾难。

二、存储碰撞的本质

在 Solidity 中,变量按顺序存储:

slot 0

slot 1

slot 2

...

例如一个代理合约:

contract Proxy {

address public owner; // slot 0

address public implementation; // slot 1

}

而逻辑合约:

contract Logic {

uint256 public value; // slot 0

}

当 Proxy 执行:

implementation.delegatecall(data)

逻辑合约访问 slot0 时:

实际上访问的是 Proxy 的 slot0

也就是说:

Logic.value → Proxy.owner

这就是 Storage Collision。

三、漏洞示例代码

一个典型的代理合约:

contract VulnerableProxy {

address public owner;

address public implementation;

constructor(address impl) {

owner = msg.sender;

implementation = impl;

}

fallback() external payable {

(bool success, ) =

implementation.delegatecall(msg.data);

require(success);

}

}

逻辑合约:

contract LogicContract {

uint256 public value;

function setValue(uint256 v) public {

value = v;

}

}

乍看没有问题。

但如果攻击者部署一个 恶意逻辑合约。

四、攻击合约

攻击者逻辑:

contract AttackLogic {

address public attacker;

function setValue(uint256) public {

attacker = msg.sender;

}

}

存储布局:

slot0 → attacker

而 Proxy:

slot0 → owner

当执行:

setValue()

实际上发生的是:

attacker → Proxy.owner

攻击者直接成为 owner。

五、真实攻击流程

攻击流程通常如下:

1️⃣ 部署恶意逻辑合约

2️⃣ 诱导 Proxy 使用该实现

例如:

upgradeTo(maliciousImplementation)

3️⃣ 调用恶意函数

proxy.call(setValue())

4️⃣ 存储碰撞触发

Proxy.owner = attacker

5️⃣ 接管协议

六、为什么这个漏洞在 Web3 中如此常见

原因主要有三个。

1️⃣ 可升级架构非常普遍

大量项目使用 Proxy Pattern:

OpenZeppelin Proxy

Compound Labs Comptroller

Aave Upgradeable contracts

2️⃣ 开发者忽略 Storage Layout

很多开发者认为:

变量名不同 → 没问题

但 EVM 只看:

slot index

3️⃣ Solidity 升级带来变化

不同版本编译器:

storage packing

layout

都可能不同。

七、EVM 层面的解释

在 **Solidity 编译后,变量会映射到 storage slot。

例如:

owner -> slot0

implementation -> slot1

EVM 操作是:

SLOAD(slot)

SSTORE(slot)

delegatecall 不会改变 slot。

所以逻辑合约访问:

SSTORE(0)

其实修改的是 Proxy。

八、专业防御方案

安全架构通常采用三种方法。

1️⃣ 固定 Proxy 存储布局

使用 EIP-1967 标准:

implementation slot =

keccak256("eip1967.proxy.implementation") - 1

这样不会与普通变量冲突。

这个标准被很多框架采用,例如:

OpenZeppelin Upgradeable Contracts

2️⃣ 使用 Storage Gap

逻辑合约预留 storage:

uint256[50] private __gap;

避免未来变量冲突。

3️⃣ 严格升级权限控制

升级函数必须限制:

require(msg.sender == owner);

并加入:

Timelock

Multisig

例如:

Gnosis Safe

九、审计人员如何检测

专业审计团队通常检查:

1️⃣ Proxy storage layout

2️⃣ Logic contract layout

3️⃣ delegatecall usage

典型检查点:

fallback delegatecall

upgrade function

storage slot mapping

很多审计工具也会自动检测,例如:

Slither

Mythril

十、总结

Delegatecall 存储碰撞漏洞的本质其实很简单:

delegatecall

+ storage layout mismatch

= critical privilege takeover

攻击者可以:

修改 owner

修改 admin

修改资金地址

这类漏洞往往:

🚨 一旦存在就是协议级灾难

也是 Web3 审计中 严重级别(Critical) 的问题。

ChainSafeAI(链熵科技)专注于区块链生态安全,以“数据驱动 + 技术赋能”构建360°全方位安全防护体系,服务于交易所、金融机构、OTC服务商及加密资产投资者。

公司提供覆盖KYT风险监测、智能合约审计、加密资产追踪、区块链漏洞测试等在内的全维度安全与合规技术解决方案,助力客户防范洗钱、诈骗等风险,保障业务合规运行。

通过实时风险预警、合规审查与资金溯源分析,协助客户识别链上异常行为、防范洗钱及诈骗风险、降低被盗损失并提升资产追回可能性。

html一号店项目代码,项目一号店素材(html模板) 【实例简介】【实例截图】【核心代码】oneShop├── css│ ├── ShopShow.css│ ├── base.css│ ├── load.css│ ├── logo.css│ ├── register.css│ └── style.css├── detail.html├── images│ ├── Thumbs.db│ ├── a_close.png│... 阅读详情

相关推荐

突发E层(Es层):短波通信中的“意外惊喜”与“隐形杀手”全解析

本文深入解析了突发E层(Es层)在短波通信中的双重作用,既可能带来超远距离通信的“意外惊喜”,也可能成为通信链路的“隐形杀手”。通过分析Es层的形成机制、时空分布规律及实战应用技巧,帮助通信爱好者与专业人员更好地利用或应对这一电离层现象,提升短波通信的可靠性与效率。

weixin_30443813的博客 823

深入理解 Leaf-Spine:从网络拓扑到 AI 数据中心 Fabric

传统数据中心网络以树形三层架构为主,但随着东西向流量激增,其层级多、路径长、扩展难等问题凸显。为此,Leaf-Spine叶脊架构应运而生,通过全互联的扁平化设计,实现多路径转发、高带宽、低时延与灵活横向扩展。结合ECMP负载分担、Underlay/Overlay分离架构及VXLAN/EVPN技术,该架构有效支撑云计算、AI训练等高密度内部通信需求。其核心价值在于:网络设计需匹配业务流量模型,强调可预测性、可靠性与可扩展性。未来,叶脊架构将持续演进,成为高性能数据中心的基石。

一名热爱技术、专注实践的工程师,拥有一项实用新型专利及一项软件著作权。曾获国家级奖项7项、省级奖项30余项。专注网络技术与 AI Infra 领域,持续探索技术创新与工程实践,记录学习成长,分享技术经验,在探索中突破,在实践中精进。 282

HexView 脚本自动化工具:从刷写文件处理到批量转换实战

本文详细介绍了如何利用HexView脚本自动化工具高效处理嵌入式刷写文件。通过实战演示,文章展示了如何使用bat脚本实现S19、HEX等格式文件的剪切、填充、合并与批量转换,构建自动化流水线,从而显著提升汽车电子等领域的开发与生产效率。

weixin_29237635的博客 356

期货保证金占用变多,怎样找出哪张合约增得最多?

盘中看了两次期货账户,第二次发现保证金占用多了。眼下占用最大的合约很显眼,但它不一定是这段时间增得最多的。如果复盘想知道“先查哪张”,要按前后差额排,不是按第二次的金额排。

weixin_49134609的博客 209

Python调用Google Trends官方数据接口实战指南

Google Trends作为全球最权威的搜索热度分析工具,其数据本质是公开、结构化、可编程访问的时序指标,而非需爬取的网页内容。其底层基于标准HTTP协议与JSON API交互,核心原理在于复现用户浏览器行为——通过/explore接口获取token,再凭token请求/widgetdata/multiline等端点获取归一化(0-100)时间序列数据。该技术路径规避了Selenium渲染依赖与非官方库的脆弱性,具备高稳定性、易调试、可监控等工程优势,广泛应用于竞品监测、内容选题验证、地域营销策略制定等业

weixin_29789925的博客 420

Flink on k8s 环境搭建(一)

Flink on Yarn的环境搭建过程中,需要进行配置较多,且需要搭建zookeeper Hadoop Yarn 等相关组件,安装流程比较复杂,集群出现问题重新安装的流程也比较复杂,且Yarn的3个节点中 只能起了 3个resourceManager和1个NodeManager,Flink 作业申请资源时只能 向NodeManager的节点申请资源,整体有资源瓶颈的隐患(后继flink作业会越来越多),现在尝试进行Flink on k8s 的环境搭建。

wangqiaowq的博客 3413

什么是加密货币凭证?

本文探讨了加密货币凭证对数字身份管理的变革性影响,强调了其核心优势,如增强的安全性和即时验证。它通过利用区块链的去中心化技术,解决了与凭证伪造、丢失和低效验证过程相关的问题。读者将了解到加密货币凭证如何在教育、专业认证和医疗等领域提供防篡改和全球可访问的解决方案。文章深入探讨了实际应用,展示了像麻省理工学院、项目管理协会和等组织为什么采用区块链凭证来简化流程并提升信任。

2301_77604523的博客 130

PCB光绘文件DFM检查:从Gerber验证到制造闭环

Gerber文件是PCB设计交付制造的核心数据载体,其准确性直接决定硬件可制造性与量产良率。理解Gerber格式规范、IPC网表比对原理及DFM(Design for Manufacturability)自动检测逻辑,是电子工程师保障设计落地的关键能力。通过电气连通性验证、物理DRC规则扫描与工艺兼容性分析,DFM工具能提前识别开路、短路、孔环不足、阻焊异常等典型问题,避免投板后返工甚至批量报废。在国产化替代趋势下,华秋DFM等平台已深度适配Altium Designer工作流,支持一键导入、智能报告与协同

weixin_42620563的博客 507

空圈容错・优快云 站点技术架构信任链诊断

本文为基于公开故障现象的黑箱架构推演报告,聚焦“监控健康但用户访问异常”共性问题。提出C/M/V/P四层可达性分析框架,强调V层需满足数据源、方法、环境三异才具仲裁能力。通过R1–R10探针识别架构风险,揭示同源校验、配置共担、降级粗放等隐患。诊断指出:进程存活≠链路通畅,200状态码≠内容正确。配套8问自测清单与∅_safe分级降级方案,推动从“全好/全崩”到“半坏可控”的可观测跃迁。所有推断假说需依赖图谱与压测验证,不构成线上定论。

Liaiyang66的博客 377

【Halcon 】Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?

本文介绍了Halcon中为XLD轮廓模板添加极性信息的实用技巧。通过先以"ignore_local_polarity"模式创建模板,首次匹配获得位置后,使用set_shape_model_metric运算符结合真实图像为模板注入极性信息(边缘明暗方向)。这种方法弥补了XLD模板初始不支持极性的缺陷,可显著提升后续匹配的精度和抗干扰能力。实验显示,添加极性信息后的模板匹配效果明显优于无极性的匹配结果。该技术特别适用于基于手动绘制或处理后的XLD轮廓创建模板的场景。

songhuangong123的博客 751

基于matlab的CNN物体识别物体分类系统

主要对物体进行识别,搭建一个物体分类系统本次实验选择规模稍大的 CIFAR-10 数据集进行分类识别,对应图像的大小设计 VggNet、ResNet 进行网络训练。在实际操作过程中,受限于数据规模和硬件配置,对于大小放缩、批次参数、训练步数等进行了多次调试,这也对以后的图像分类任务具有较高的参考意义,并通过对 CIFAR-10 数据集进行训练和评测,采用网络修改的方式来得到新的 CNN 结构,适用于对网络进行配置、融合等相关研究。读者可以通过自行设计或选择其他网络、加载其他数据等方式进行实验的延伸。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2006

期货合约还有历史K线,就表示现在还能交易吗?

打开以前保存的期货研究资料,某个合约的K线仍能正常显示,过去的价格、成交量也都在。看着熟悉的图,容易顺势觉得:既然还能看,这个合约应该仍可作为当前交易对象。但图里保存的是过去发生过什么,当前合约状态回答的是它现在处于什么生命周期。历史K线仍在,与合约已经下市可以同时成立。对研究者来说,更有用的处理不是在“继续盯它”和“删掉旧图”之间二选一,而是把历史档案与当前关注对象分开。TqSdk提供的合约下市标志,可以帮助把这层区别标明白。

weixin_49134609的博客 183

化工过程控制软件:Siemens PCS 7二次开发_(8).过程控制算法

在化工过程控制中,过程控制算法是实现自动化控制的关键技术之一。Siemens PCS 7 提供了丰富的控制算法库,但为了满足特定的工艺需求,往往需要进行二次开发。本节将详细介绍如何在 Siemens PCS 7 中进行过程控制算法的二次开发,包括常见的控制算法原理、实现方法和具体示例。

kkchenjj的博客 502

FPGA 与加密行业:从算法加速到可信硬件的完整技术图谱

本文系统探讨FPGA与密码学的深度交叉,揭示其在加密加速、区块链基础设施、零知识证明及后量子密码中的关键作用。从底层硬件特性到工程实践,分析对称加密、公钥算法、零知识证明等负载的FPGA加速优势,强调其高能效、低延迟与灵活可重构的特性。结合当前密码学复杂度上升与硬件竞争加剧的趋势,指出FPGA是算法验证与高性能实现的理想载体,为安全计算提供高效硬件支撑。

weixin_49780322的博客 245

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

期货成交额变大,为什么成交手数反而少了?

比较同一期货合约两个交易日的成交情况,可能看到:成交额比前一天高,成交手数却少了。若把成交额大直接理解成“交易得更多”,这两项看起来就会互相打架。其实,金额和手数不是同一把尺子。手数描述成交数量,金额还包含成交价格及相应计量口径的影响。两者反向变化并不构成逻辑矛盾。用TqSdk整理这类观察,关键不是挑一个看起来更大的数,而是把原始量、额及各自口径留下来,回答不同的问题。

shinnyringo的博客 145

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

期货分钟线中间少了一段,怎么查是不是休市?

复盘一份已经保存的期货分钟线,10:14 后直接跳到 10:30,另一处却是 10:42 后跳到 10:44。屏幕上两处都没连起来,处理起来并不一样:如果当天确实在第一段休息,不用补;如果 10:43 落在交易时段里,则要回查原始记录和样本覆盖。

lisiccwss的博客 137

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【量化实战】VeighNa 全图谱:从零到一,由浅入深打通多品种量化

本文系统梳理了VeighNa量化平台的四阶进阶路径:从接口与数据分离(第一阶段),到策略逻辑对齐(第二阶段),再到数据平替与自动化执行(第三阶段),最终拓展至多市场实战(第四阶段)。针对新手常见痛点,提供免费数据源(如AKShare、天勤)、交易规则避坑指南及参数配置建议,强调A股仅支持做多、乘数需匹配品种特性。最后给出可落地的行动路线图,助力用户由浅入深打通全市场量化体系。

qq_72758246的博客 281

美股行情API遇上冬令时:盘前盘后时间怎么对齐?

摘要:负责美股行情页和开盘提醒的产品经理,冬令时切换后需要一起核对交易时段、北京时间和交易日期。本文结合TickDB交易时段、交易日历的真实返回,解释盘前盘后怎样换算,为什么凌晨收盘仍属于美国前一个交易日,并提供时间对照表、可运行换算示例与页面检查清单,处理半日交易等容易遗漏的例外。

2511_94663557的博客 273

国内哪些平台提供比较全的金融数据接口?Python 量化开发如何选型?

国内金融数据接口众多,选型需结合量化需求,避免仅凭名气选择。以QuantDash为例,通过SDK获取前复权日K线后,必须严格校验日期排序、价格有效性及字段完整性,再进行动量计算。关键在于:数据质量决定分析可靠性,接口能力≠实际可用性,需建立数据验证流程,确保研究结果可信。

quantdash_cc的博客 246

从 NEAR Intents 事件看 NEAR 智能合约安全

2026年9月29日至10月1日,攻击者利用NEAR Intents存款退款处理中的校验缺陷,通过填充代币和恶意receiver合约触发超额退款请求,使回调失败后内部余额未被撤销,造成缺乏资产支持的可花费余额。攻击者据此从BNB Chain上的HOT Bridge金库七笔提现共转出3,865,021 USDT。项目方于10月2日部署修复、10月7日移除存款通知功能,并于同日宣布资金全额归还,后续事后报告确认受影响用户已获补偿。

BlockSec的博客 263

去哪里下载股票历史 K 线数据?Python 获取日线行情与本地保存实践

通过QuantDash SDK获取600519.SH历史日K线数据,结合pandas完成字段验证、价格逻辑检查与异常处理,确保数据完整性与一致性后,将清洗后的行情数据保存为CSV文件,并附带元信息(如复权方式、下载时间等),实现可复现、可追溯的量化数据管理。

2601_96694965的博客 231

期货期权想对照看涨和看跌,怎样挑出能配成一对的合约?

想把看涨和看跌放在一起观察,同一个行权价往往能搜出好几条。最容易认错的是标的和行权价都对,只差了到期批次的一条。两边简称看着很像,放进同一行以后,价格差却混进了不同到期条件,已经不是原来想看的那一对。

zhangnihi的博客 71

期货期权复盘,标的那张K线该怎么找?

复盘一张以前观察过的期货期权,自选里可能同时有同品种的近月、远月和主连。哪张走势最热闹,并不决定它是不是这张期权的标的。要解释那段期权记录,先找到它对应的具体期货合约,再找那张合约的图。

zhangnihi的博客 138

期货委托对账,该看程序里的委托号还是交易所单号?

程序留存的期货委托号是SDK-A17,回单上却写着000542。两串号码不一样,未必是两笔委托。反过来,两张回单上都有000542,也不能只凭这个就合成一笔。对账前先分清:是要在程序里找回原单,还是要证明外部回单指向这张单?

shinnyringo的博客 148

[Web3] 基础第7篇: 说透比特币的基本框架与原理

08 年的金融危机,中心金融,美元崩塌会导致全球经济崩溃,全球的国家为美国的经济买单;比特币全球流通性,资产去中心化发行,强调去中心化性和全球性,不会因为局部经济崩塌而崩溃,比特币崩溃全球经济才会崩溃;数字来取代传统金融,提高资产主权和全球性经济问题。比特币是第一个区块项目,也是目前为止去中心化程度最高,市值,受欢迎程度最高公链和数字货币,甚至已经成为全球各国央行的储备货币。Bitcoin 具备银行功能:产币的方式传统银行是中心化的,比特币产币是去中心化的,人人都可以参与的。

OxYGC 518

期货自选表更新后,怎样核对哪张合约的规格记录变了?

期货自选表刷新以后,行顺序可能换了,手头的旧档也未必覆盖今天要核的每张合约。按行号比,容易把两张不同合约的步距和乘数放在一起。

shinnyringo的博客 155
上一篇: 什么是区块链技术?香港区块链安全公司排行榜前5都有哪些?
下一篇: Web3区块链最危险的代理升级漏洞解析
ChainSafeAI003
博客等级 码龄1年 2粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值