Web3 漏洞复盘:Verus 跨链桥 1158 万美元“数据结构错位“事件

[Web3] 预测市场实战:事件池、做市商、业务中台和撮合引擎是怎么拼起来的 把 18 讲预测市场课程里的工程部分摊开重讲一遍:事件池怎么把真实世界的比赛变成可结算的三级目录;做市商为什么先选定价机制、再谈三段策略;做市系统按 sync 打底、execution 收口怎么分层;业务中台里状态机为什么才是主角;撮合引擎的订单簿用 Order、OrderQueue、OrderSide、OrderBook 四层结构怎么落;以及结果公平、业务增长、入金这三块还没补上的洞。 阅读详情

2026 年 5 月 18 日,Verus-Ethereum Bridge 在一笔交易内被攻击者卷走 1625 ETH、103 tBTC 以及 14.7 万 USDC,合计约 1158 万美元。令人意外的是,这并不是一起私钥泄露或闪电贷操纵事件,而是一次典型的跨链序列化形态歧义导致的灾难。
一、事件速览 ⏱️
时间:2026 年 5 月 18 日 上午(UTC+8)
目标:Verus 与 Ethereum 之间的官方跨链桥
损失:约 1158 万美元
攻击特征:单笔交易完成,未触发任何异常告警
根因定性:跨链数据结构解析不一致 + 固定偏移读取 + 金额未与哈希绑定
二、漏洞核心:一套数据,两种「体型」🧩
问题的本质在于:Verus 侧链在导出跨链转账数据时,使用了名为 CCrossChainExport的结构体。这个结构体在序列化时存在两种形态:
第一种是默认的 Full Export,包含完整的转账元数据;第二种是 Supplemental Export,仅包含精简字段,通常用于补充信息。这两种形态的字段顺序和内存布局完全不同。
然而,以太坊端的智能合约在解析这些数据时,采用了固定偏移(Fixed Offset)的读取方式。这意味着合约假设自己收到的永远是 Full Export,并严格按照 Full Export 的字段位置去读取「转账金额」和「接收地址」。
📌 致命的疏忽就在这里:以太坊端没有校验数据头部的 FLAG_SUPPLEMENTAL标志位,也没有根据标志位切换解析逻辑。当 Supplemental Export 被提交时,合约依然按老规矩办事,结果把「非金额字段」错误解读成了「巨额转账金额」。
三、攻击链路拆解 🔓
Verus 桥的资金出口主要依赖 TokenManager.processTransactions。攻击者精心构造了以下攻击路径:
准备阶段:通过 Tornado Cash 获取 ETH 作为 Gas,抹去资金来源痕迹。
构造恶意 Export:在 Verus 侧构造一条带有 FLAG_SUPPLEMENTAL标志的交易导出数据。在 Verus 原生语义中,这是一条合法的补充导出,但在以太坊端看来,它的字段布局是错位的。
提交并欺骗验证:调用 submitImports将恶意数据提交到以太坊。在 proveImports阶段,由于数据本身的格式是合规的,Merkle 证明顺利通过,系统误以为这是一笔真实的跨链转账。
错位出金:TokenManager按照被错误解析出的「巨额数值」向攻击者地址打款。
如果用伪代码来还原这个漏洞,逻辑大致如下:
// 以太坊端存在缺陷的解析逻辑
function parseExport(bytes calldata raw) internal pure returns (address to, uint256 amount) {
    // ❌ 假设 raw 永远是 full export 形态
    // 偏移 64 处被硬编码认定为 amount
    to = address(uint160(bytes20(raw[32:52])));
    amount = uint256(raw[64:96]); 
}

// 攻击者传入的是 supplemental export
// raw[64:96] 实际上存储的是其他控制字段
// 但 parseExport 毫无察觉,直接将其作为金额读出
攻击者甚至不需要破解任何私钥,也不需要伪造 Merkle 树,仅仅利用了两端对数据结构语义理解的割裂,就实现了千万美元级别的盗取。
四、为什么这个漏洞更具警示意义 ⚠️
回顾过去几年的跨链桥黑客事件,大多集中在 Guardian 签名验证绕过、多签私钥泄露或管理员权限滥用等传统安全领域。Verus 这次事件标志着攻击面的转移:
威胁已经从「谁能签证明」转向了「证明到底证明了什么」。​
当源链和目标链由不同团队开发、使用不同语言、采用不同序列化框架时,任何一个被忽略的 Flag、任何一个为了「兼容性」而保留的隐式行为,都可能成为突破口。在这个案例中,Merkle 证明本身是完美的,签名也是有效的,唯一失效的是人类对数据含义的共识。
五、防守建议 🛡️
针对此类「语义不一致」漏洞,BitsLab 提出了三点核心防御策略:
显式校验数据结构版本与 Flag
接收到跨链数据后的第一件事,必须是校验其形态标识。对于不支持或无法识别的数据结构,应当直接回滚(Revert),坚决杜绝「优雅降级」带来的隐性风险。
放弃固定偏移解析
严禁在代码中硬编码 raw[64:96]这类偏移量。应当使用带长度前缀的强类型反序列化方案(如 ABI 编码或 Scale Codec),让解析器在解码阶段自动拦截形态不匹配的数据。
金额与哈希双向绑定
在 proveImports阶段,不仅要证明数据存在,还要证明数据中的金额与后续出金逻辑中的金额完全一致。将 (amount, recipient, txHash)在证明阶段就进行强绑定,防止出金路径被恶意构造的 serializedTransfers劫持。
结语
Base 排序器事件是「执行层日志没清干净」,Verus 事件是「序列化 Flag 没校验」。两者相隔半个月,发生在不同层级,但根子上指向同一个真理:在 Web3 世界里,状态和数据结构的生命周期管理,容不得半点「差不多就行」的侥幸。
跨链桥作为连接万亿资产的超级枢纽,其安全边界早已不再局限于密码学证明,更在于代码对数据语义的精确掌控。🌐
维铂叁(Web3)是一家聚焦于区块链与数字资产领域法律前沿的专业研学与能力发展机构。我们专注于为律师、企业法务及司法从业者,提供该领域的系统性知识更新、实务技能研习与合规思维赋能。
在Web3技术浪潮与全球监管格局快速演进的背景下,我们深知法律人面临的挑战与机遇。维铂叁的核心价值在于 “前沿洞察、实务研习、生态链接” ,致力于搭建一个连接学界智慧与实务经验的跨界交流平台。
我们的课程与研学内容,由来自顶尖法学院校的学者,以及在该领域拥有丰富实践经验的专家共同设计研发。内容涵盖技术原理、全球监管动态比较、典型司法案例剖析及创新业务模式观察等多个维度,旨在帮助法律从业者构建系统性的知识框架,提升在该新兴领域的专业研判能力。
维铂叁坚信,专业的价值在于持续学习与深度思考。我们的使命是陪伴法律职业群体,在数字经济的变革中,夯实专业根基,拓展认知边界,以更完备的知识储备应对未来的挑战,共同促进区块链技术在合规框架内的创新与应用。
 

[Web3] 基础第3篇: 区块链的基础密码学原理 Hash 函数又称单向散列函数或者杂凑函数*图:哈希函数示意——任意长度消息映射为固定长度摘要,单向不可逆*定义:给定一个 Message M,对 M 进行 Hash 可以得到 H(M) = Hash(M)由 Message H Hash 之后可以得到 H(m), 但是不能从 Hash(m) 反推出 Message M, 由此可以看出 Hash 函数具备单向不可逆性。 阅读详情

相关推荐

[Web3] 基础第4篇: 区块链的组织结构

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

OxYGC 346

ME Group的AI+Web3跨赛道内容与工具布局如何支撑信息专业度

从AI+Web3跨赛道布局与工具配置的角度看,ME Group的信息专业度支撑体现在几个层面:AImpact的跨赛道内容沉淀能力覆盖AI、Web3、金融三大交叉领域,并面向AI智能体输出结构化行业资讯;ME Event精选Skill实现活动的自然语言查询、多维筛选与订阅提醒;AgentOn平台与AIMPACT产品构成AI产品线;GEO品牌优化服务对应生成式AI环境中的信息档案完善。

2601_96756757的博客 239

[Web3] 基础第1篇: 区块链与 Web3 的关系

区块链是Web3的底层技术支撑,二者关系如同TCP/IP与互联网——区块链提供去中心化、不可篡改的账本能力,Web3则在此基础上构建用户主导的金融、溯源等应用生态。当前Web3主要落地于金融领域,如跨境支付、DeFi、链上保险与跨链资产流转,显著提升结算效率与透明度。同时,溯源应用通过链式哈希记录商品全生命周期,增强信任。未来Web3将向六大趋势演进:身份主权、数据确权、AI+链上治理、跨链互操作、合规框架完善及可持续发展。技术虽成熟,但私钥安全、合规监管与链下可信仍需突破,推动其从概念走向规模化应用。

OxYGC 142

WEB3核心技术的一种实现:时间长河共识算法(TRC, Time-River Consensus)

时间长河共识 TRC,核心目标不是打造一条更快的公链,而是**在数字世界里复刻时间的底层本性:不可逆、先有事件才有刻度、历史一旦闭合便无法撤回**。 它摒弃多数投票共识:以固定 π 序列 + 固化历史交易量做零通信抽签,选出块人;以父哈希链式 “焊接” 区块,一环遮挡一环。 公共时间刻度并不预先流淌,**只有区块成功闭合,新的一格时间才诞生**;无事件闭合时,链可以静止,不存在强行推进的全局时钟。 系统不靠投票否决异常,而是依靠自证证据追责: 掉线失职仅失去出块抽签机会;欺诈(双签、透支、背书放水)则质

qq_20466509的博客 1万+

[Web3] 基础第5篇: 共识算法与 P2P 通信协议

CometBFT 采用Tentmint 共识,一种易于理解、基本异步的 BFT 共识算法。该算法遵循一个简单的状态机,如下所示:上图展示了 Tendermint BFT 共识流程,描述了一个区块从提议(Propose)到最终提交(Commit)的完整过程。Tendermint 共识采用三阶段投票机制(Prevote、Precommit、Commit) 来确保区块最终性。三阶段投票机制(Prevote → Precommit → Commit)需要 2/3 以上的投票支持 才能进入下一阶段。

OxYGC 309

[Web3] 基础第6篇: 联盟链、公链、跨链与模块化区块链

三者并不是"谁替代谁"的关系:私有链解决内部账本的效率问题,联盟链解决多机构之间的信任协作问题,公链解决开放、抗审查的全球状态问题。后文的跨链与模块化讨论,都建立在这三种形态并存的前提之上。

OxYGC 198

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 194

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

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

OxYGC 524

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 291

[Web3] 基础第2篇: 区块链发展史与区块特性

区块链的结构*图:区块链的链式结构示意,多个区块依次相连*由很多区块组成一个链式结构,区块与区块直接可以通过某种特殊的方式链接起来区块链里面的真实结构*图:区块之间通过哈希互相连接,当前区块记录上一区块的哈希*由很多区块组成一个链式结构,区块与区块直接可以通过区块 hash 互相连接起来,当前区块里面有上一个区块 hash, 这两个 Hash 是相等,若不相等,说明区块链发生了分叉。这里补充一个直观的理解:把每个区块想象成账本的一页,页眉都抄录了上一页的指纹(哈希)。

OxYGC 46

PINN内嵌物理知识神经网络入门及文献总结

内嵌物理知识深度学习方法(PINN)已经成功用于解决各类科学计算问题,其本质是将物理先验知识嵌入神经网络训练中,将一个求解PDE的问题转化为一个优化问题。这篇博客主要记录PINN相关论文

山里娃的博客 7万+

数据结构的基本概念和算法的初步认识

本文系统阐述数据结构与算法的基础概念,涵盖数据、数据元素、数据对象的层次关系,数据结构的三要素(逻辑结构、存储结构、数据运算),以及抽象数据类型。重点解析算法的特性与设计要求,并深入讲解时间复杂度分析的核心——大O表示法,通过“只保留最高阶项、忽略常数系数、取最坏情况”三大原则,结合实例剖析O(1)、O(n)等常见时间复杂度,揭示算法效率的本质评估方法。

ACH_YYX的博客 190

【可信数据空间-部署方案】

此部署架构体现了以下几个核心原则:去中心化: 数据存储和处理完全分布在各个参与者端,运营方只提供核心的协调和信任基础设施。安全边界清晰: 通过VPC、DMZ、防火墙、K8s命名空间等技术,在每个层级都建立了严格的安全边界。高可用与弹性: 所有关键服务均以集群方式部署,避免单点故障,并能根据负载动态伸缩。云原生: 全面采用容器化和Kubernetes编排,简化部署、管理和运维复杂度。合规性: 架构设计天然满足数据驻留要求(数据留在企业本地),并为所有操作提供不可篡改的审计追踪能力。

u014716614的博客 771

数据结构:9.Map和Set

有的讲解会说这里key是标识作用,这种说法其实没有太大意义,就算知道了他是标识value的作用又如何,在实际的使用过程中,我们只会根据具体的效果选择使用的方法等,不会执着于“标识”这种说法。2.由于哈希函数的设计原则太过理论,它仅仅是在认为:这些通过关键码算出来的index不同 的情况下设计的,然而这种理论化的设计原则在遇到冲突时,恰恰就出现了问题,而我们能做的,就是降低冲突率。虽然哈希表的使用过程中存在冲突,但是在实际的使用过程中,哈希表的冲突率是不高的,冲突的个数是可控的。

2602_95646088的博客 204

TypeScript的安装与使用

TypeScript的安装与使用

qq_51589308的博客 600

用 SELECT FOR UPDATE 亲手制造典型数据库死锁——从 ABAP 视角揭秘 RDBMS 的锁争夺战

在日常 ABAP 开发中,多数人只在 ST22 里偶尔瞥见这行 dump,却对背后的原理知之甚少。本文借助社区前辈的经典实验,还原一个可复现的死锁现场,进一步讨论产生根因、检测手段与规避策略,并用真实业务案例串联起数据库、Open SQL 与 SAP NetWeaver 锁管理之间的逻辑链条。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 456

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 343

VN1640 CH5 I/O通道终极指南:【从硬件原理—>工程实战—>自动化测试实战】

摘要:本文详细解析Vector VN1640 CH5 I/O通道的硬件原理与工程应用,涵盖模拟输入(AIN)、数字输入(DIN)和数字输出(DOUT)三大功能模块的配置指南。通过硬件隔离设计实现高精度信号采集与驱动控制,重点分析开漏输出特性及保护机制。提供PWM控制、ECU上电时序测试、传感器闭环控制等实战案例的CAPL脚本代码,并强调多设备同步采集的精准性(时间偏差<1µs)。适用于汽车电子HIL测试、ECU信号监测等场景,所有方案均通过实际项目验证。

汽车控制器系统开发、VIL测试、HIL测试、MIL测试、EMS电喷系统标定与开发、热管理系统标定 759

排序算法深度笔记(上):比较类排序的思想演进与代码实现

与。本文聚焦前者 —— 也就是通过元素间两两比较来确定相对顺序的排序算法,从最朴素的 O (n²) 基础排序,到工业级主流的 O (nlogn) 进阶排序,逐层拆解设计思想、带注释的代码实现与边界细节。当我们理解了比较排序的性能边界,也就自然引出了非比较排序的存在意义。所有代码均遵循统一的实现规范:入口函数前置空数组与单元素边界校验,基于数组原地修改,主函数附带可直接运行的测试用例,与练习代码风格完全对齐。

2401_87069538的博客 626

lammps教程:官方自带eam_database程序拟合EAM势方法介绍

使用lammps模拟金属体系,最常用的势函数为eam、meam势。 对于大多数金属或者合金来说,可以从网上下载相对应的eam或meam势力场文件。 而对于一些新的合金材料,可能就找不到相对应的力场文件。 解决的方法有两种,一是采用混合势(pair_style hybrid),第二种方法是自己拟合势函数文件。 混合势的写法在前面文章中已经介绍过,本文介绍一种拟合EAM势的方法。 该方法是运行Xiaowang Zhou编写的一个拟合程序,该程序可自动生成所需要的合金势。 这个程序能够拟合的合金元素有: Cu,

lammps_jiayou的博客 4616

【Claude】Extra inputs are not permitted 错误:代理剥离 Beta 标头的解决方案 bug报错已解决

深入分析Claude Code Extra inputs are not permitted 400错误的技术原理,解析代理剥离Beta标头的根因与多种修复方案。

一键难忘的博客 146

CF2283F[数据结构]

首先考虑一种暴力解法,当我们建好i之前的图后,当我们添加i的时候,区间[li,ri]中的点都会向i建边,但是这些点中,如果有某两个顶点l,r,满足l<r,那么l就可以通过r间接到达i,因此可以删除l到i的边;初始时我们令所有点放入set中,然后对于每一个i的处理,我们将集合中仍在[l,r]的范围的点弹出,并且将f设置为i,这样我们就得到了所有点的最小跳板;对于每个区间[l,r] 我们要计算这下下标中的f(v)中大于r的数目有多少个;我们令f(v)表示顶点v可到达的最小的顶点;

蒟蒻 144

C#上位机3D可视化:HelixToolkit.Wpf集成点云/模型(机器人臂姿态实时监控)

核心控件是3D可视化的核心,需搭配和网格辅助定位;模型加载:按关节拆分机械臂模型,通过组合平移+旋转实现姿态控制;姿态更新:将机器人关节角度转换为3D模型的旋转变换,工业场景需从控制器实时获取角度;点云渲染:通过实现点云加载,需注意坐标系转换和性能优化。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 716

笔记-论数据结构2

typedef 数据类型 别名return 0;typedef也经常用在结构体上:每次声明结构体变量都要写struct关键字,很麻烦,而且逻辑上也很难受,typedef可以解决这个问题。int x;int y;p.x = 5;p.y = 10;return 0;而利用typedef解决有两种解法:typedef struct 结构体名数据类型 变量名;数据类型 变量名;……}别名;数据类型 变量名;数据类型 变量名;……}别名;实际的运用int x;

fish_zzzz的博客 113

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 85

IEM模型,地表粗糙度模拟

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

【数据结构-2】顺序表的实现

线性表是一种数据结构,它分为逻辑结构和物理结构,在逻辑结构上线性表是呈线性的,数据是是连续存储的;在物理结构(物理空间)上,线性表不一定是连续存储的。线性表的实现,主要分为数组和链式结构。顺序表是线性表的一种实现方式,顺序表在逻辑结构和物理结构上都是连续的。顺序表的底层实现是数组。

weixin_44218929的博客 211

VB摄像头监控

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

上一篇: 维铂叁科普知识丨数字防伪印章
下一篇: 区块链安全公司系列丨输入<think>能偷看别人聊天记录?DeepSeek这个「漏洞」被严重误读了
ChainSafeAI001
博客等级 码龄1年 0粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值