欢迎回到 Sherlock 的漏洞聚焦,我们在这里突出在 Sherlock 审计中发现的一个重要漏洞。 本周,我们审查了在 @GMX_IO 竞赛中由 @0xdeadbeef____ 和 @IllIllI000 发现的拒绝服务漏洞。 感谢 @int0x1catedCode 的详细分析。
漏洞摘要: 该漏洞允许攻击者通过提供与实际数据不匹配的虚假回退原因长度来操纵订单执行流程。这导致协议的错误处理读取不正确的内存区域,可能会干扰执行过程或在处理失败的订单时导致意外行为。
攻击步骤: 1. 设置阶段 部署一个实现自定义回退行为的恶意合约 该恶意合约应可被目标协议调用(例如,作为回调处理程序)。 2. 构造恶意回退数据 使用虚假的长度参数构造回退数据。 3. 通过协议执行订单 创建一个将触发与恶意合约交互的订单 当协议处理订单并调用恶意合约时,它会使用构造的数据回退。 协议的错误处理尝试使用虚假长度解码回退原因。 4. 触发内存读取溢出 协议根据虚假长度参数读取内存 这导致它读取超出实际回退数据边界。
影响是什么? 拒绝服务:订单可能无法正确执行,阻碍合法协议操作,例如清算不良头寸 订单执行中断:批量订单处理可能会被暂停,影响多个用户 Gas恶意攻击:处理格式错误的回退数据可能会消耗过多的Gas
根本原因: 1. 未检查的长度参数:协议在回退数据中信任提供的长度值而不进行验证 2. 缺少边界检查:没有验证声明的长度是否与实际数据大小匹配
缓解措施: 1. 始终验证回退数据长度 2. 实施最大长度限制
我们很自豪能够通过这一发现帮助确保 @GMX_IO 的安全。 当绝对需要安全时,Sherlock 是正确的选择。
2.38K