长亭百川云 - 文章详情

智能合约漏洞复现-特权提升漏洞

漏洞推送

71

2024-07-13

源码地址:

https://github.com/code-423n4/2023-12-autonolas

安全审计报告:

https://github.com/0xEVom/audits/blob/main/code4rena/2023-12-autonolas.md

本文为根据0xEVom的审计报告对漏洞进行的梳理和复现。这位小哥在对Olas合约的审计中获得了$29,515.84

GuardCM.sol

合约文件: governance/contracts/multisigs/GuardCM.sol

根据项目中的governance/test/GuardCM.js文件来看,整体结构如下:

GuardCM实现了GnosisSafe合约中的安全检查功能。

而GnosisSafe是一个多签钱包的智能合约,在通过GnosisSafe合约执行交易的时候,会通过调用Guard的checkTransaction来进行检查,如果再checkTransaction中没有发生revert,则执行交易execute

在checkTransaction函数中主要逻辑是,如果目标地址是timelock,那么不允许进行delegatecall操作,并且只允许执行timelock中的SCHEDULESCHEDULE_BATCH两个函数,如果目标地址是GnosisSafe则直接revert。

但是这里存在一个问题,只有在对timelock和GnosisSafe进行delegatecall的才会revert。

在execTransaction函数中,如果guard地址不等于0,才会进行checkTransaction

guard是通过setGurad函数在合约部署的时候就进行设置的

但是checkTransaction函数中有一个非常严重的问题就是,没有限制对第三方合约进行delegatecall。

所以可以通过部署恶意合约,然后调用GnosisSafe的函数进行执行,将Gurad设置为空地址。绕过checkTransaction函数对合约交互的检查。

利用方式如下:

1.部署合约

pragma solidity ^0.8.0;

2.调用execTransaction函数执行

3.调用timelock执行对Gura合约的pause函数delegatecall,因为guard==address(0)执行成功

造成特权升级漏洞

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2