今天看啥  ›  专栏  ›  3072

智能合约漏洞入门(7)- 调用注入

3072  · 公众号  ·  · 2024-06-22 13:25
    

主要观点总结

描述了TokenWhale合约中的不安全调用漏洞,该漏洞存在于approveAndCallcode函数中,允许执行任意调用并可能导致潜在的安全风险和意外后果。

关键观点总结

关键观点1: 漏洞描述

TokenWhale合约的approveAndCallcode函数使用低级调用(_spender.call(_extraData))执行代码,没有对提供的_extraData进行任何验证或检查。这可能导致意外行为、可重入攻击或未经授权的操作。

关键观点2: 漏洞影响

如果调用数据是可控的,很容易引发任意函数执行,可能导致TokenWhale合约被清空。

关键观点3: 测试方法

通过测试函数testUnsafeCall来模拟攻击者利用该漏洞,尝试对TokenWhaleContract进行不安全的调用以转移资产。

关键观点4: 缓解措施

应尽可能避免使用低级的"call"。在必须使用时,应确保对提供的调用数据进行严格的验证和检查。


文章预览

名称: 不安全调用漏洞 描述: 在TokenWhale合约的approveAndCallcode函数中。该漏洞允许执行任意调用,带有任意数据,导致潜在的安全风险和意外后果。该函数使用低级调用(_spender.call(_extraData))从_spender地址执行代码,而没有对提供的_extraData进行任何验证或检查。这可能导致意外行为、可重入攻击或未经授权的操作。 这个练习是关于对合约的低级调用,其中输入和返回值都没有被检查 如果调用数据是可控的,就很容易引发任意函数执行。 缓解措施: 应尽可能避免使用低级的"call"。 参考: https://blog.li.fi/20th-march-the-exploit-e9e1c5c03eb9 TokenWhale合约: contract TokenWhale {     address player;     uint256 public totalSupply;     mapping( address  =>  uint256) public balanceOf;     mapping( address  =>  mapping( address  =>  uint256)) public allowance;     string public name =  "Simple ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览