据慢雾地区消息,智能链投币(BSC)隐形金融项目遭遇闪电贷款攻击。慢雾安全小组**参与分析,分享结果如下:
攻击细节分析
隐形金融的DEX架构参考Uniswapv2,但是pair的实现是不同的。cheapswap和swap这两个接口是以不可能对的方式实现的。cheapswap函数仅限于由路由器契约调用,而swap函数可由任何用户调用以进行代币交换操作。此攻击的根本原因是这种特殊的代币交换体系结构。接下来,我们将对此攻击进行详细分析
首先,攻击者使用flash loan从pancakeswap借入大量wbnb,**将其转换为if(不可能的金融代币)。
然后,攻击者创建一个由自己控制的代币AAA(BBB),并向上一步获得的if代币添加流动性。
然后,攻击者传入一个自定义交换路径(AAA-gt;如果-gt;Busd)将AAA代币转换为Busd代币,问题就在这个过程中。通过链记录,我们很容易发现攻击者两次将AAA代币交换为if代币
为什么在一次交换的过程中要交换两次?
通过分析具体的内部调用过程,我们可以发现攻击者调用路由器契约中AAA契约的transfer-from函数将AAA代币转换成pair契约,并调用pair契约的swap函数一次(即在transfer-from函数中实现正常的转换调用逻辑)。然后,通过项目设计的预期交换,再次执行正常的代币交换操作。
通过以上分析可知,攻击者在一次代币交换过程中,调用swap函数和cheapswap函数两次交换代币,最终获得额外的busd代币。所以既然是交换操作,理论上,每次交换操作都会导致K值的变化,最终使得用户无法获得预期的代币。
然而,通过分析swap函数和cheapswap函数不可能对的具体逻辑,我们发现了一个惊人的情况:在swap函数中,检查K值,而在cheapswap函数中,不检查K值,直接执行更新操作。这会导致攻击者执行多个exchange操作并获取额外的busd。
攻击过程
1.攻击者首先通过pancakeswap flash loan借用wbnb,并将wbnb转换为if代币。
2.创建恶意代币契约AAA(BBB),添加AAA代币,如果代币不可能流动。
3.通过AAA-gt;如果-gt;Busd path进行AAA代币到Busd代币的交换,在AAA代币转换成成对契约并转换成if代币的过程中,if代币与Busd之间的交换操作进行一次,然后进行cheapswap的正常操作。**,获得了一个额外的busd代币。
4.然后重复上述操作以获取利润。
总结
这种攻击的核心是cheapswap函数中没有k值检查,因此攻击者可以通过在一个交换进程中执行多个交换操作来获取额外的代币。Slow-fog安全团队建议,在其他项目的基础上,在创新过程中对DeFi协议的新模进行充分的检查和验证,以避免此类安全事件的发生。
参考交易:
https://bscscan.com/tx/0x0220704a99ddfb982d26e65cc337f26b77dc057930b7aa1d848cc48ec77984a8
文章链接:https://www.btchangqing.cn/287923.html
更新时间:2021年06月21日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。