安全生产简析下meerkat跑路事件
一、核心问题
1.AdminUpgradeabilityProxy天然的负面影响一代理的逻辑合约可以被替换
2.AdminUpgradeabilityProxy权限没有移交timelock一项目方不受时间锁约束,可以随意使用1。所说的能力,替换逻辑合约最终项目方无限制地将正常合约替换成了攻击合约,卷款跑路。
安全公司:AurumNodePool合约遭受漏洞攻击简析:金色财经报道,据区块链安全审计公司Beosin EagleEye监测显示,2022年11月23日,AurumNodePool合约遭受漏洞攻击。
Beosin分析发现由于漏洞合约的changeRewardPerNode函数未进行验证,导致攻击者可以调用该函数进行任意值设置。
攻击者首先调用changeRewardPerNode函数将每日奖励值设置成一个极大数,接下来调用claimNodeReward函数提取节点奖励,而节点奖励的计算取决于攻击者设置的rewardPerDay值,导致计算的节点奖励非常高。而在这一笔交易之前,攻击者便通过一笔交易(0xb3bc6ca257387eae1cea3b997eb489c1a9c208d09ec4d117198029277468e25d)向合约存入了1000AUR,创建了攻击者的节点记录,从而使得攻击者能够提取出该节点奖励。最终攻击者通过该漏洞获得约50个BNB($14,538.04)。[2022/11/23 8:01:04]
二、现场还原(以BUSD池为例)?
安全团队:LPC项目遭受闪电贷攻击简析,攻击者共获利约45,715美元:7月25日,据成都链安“链必应-区块链安全态势感知平台”安全舆情监控数据显示,LPC项目遭受闪电贷攻击。成都链安安全团队简析如下:攻击者先利用闪电贷从Pancake借入1,353,900个LPC,随后攻击者调用LPC合约中的transfer函数向自己转账,由于 _transfer函数中未更新账本余额,而是直接在原接收者余额recipientBalance值上进行修改,导致攻击者余额增加。随后攻击者归还闪电贷并将获得的LPC兑换为BUSD,最后兑换为BNB获利离场。本次攻击项目方损失845,631,823个 LPC,攻击者共获利178 BNB,价值约45,715美元,目前获利资金仍然存放于攻击者地址上(0xd9936EA91a461aA4B727a7e3661bcD6cD257481c),成都链安“链必追”平台将对此地址进行监控和追踪。[2022/7/25 2:36:51]
1.项目方故意“坦诚”给出合约的timelock转移权限记录,展示的确执行了changeAdmin方法移交权限给timelock地址,用于混淆视听
Force DAO 代币增发漏洞简析:据慢雾区消息,DeFi 量化对冲基金 Force DAO 项目的 FORCE 代币被大量增发。经慢雾安全团队分析发现: 在用户进行 deposit 操纵时,Force DAO 会为用户铸造 xFORCE 代币,并通过 FORCE 代币合约的 transferFrom 函数将 FORCE 代币转入 ForceProfitSharing 合约中。但 FORCE 代币合约的 transferFrom 函数使用了 if-else 逻辑来检查用户的授权额度,当用户的授权额度不足时 transferFrom 函数返回 false,而 ForceProfitSharing 合约并未对其返回值进行检查。导致了 deposit 的逻辑正常执行,xFORCE 代币被顺利铸造给用户,但由于 transferFrom 函数执行失败 FORCE 代币并未被真正充值进 ForceProfitSharing 合约中。最终造成 FORCE 代币被非预期的大量铸造的问题。 此漏洞发生的主要原因在于 FORCE 代币的 transferFrom 函数使用了`假充值`写法,但外部合约在对其进行调用时并未严格的判断其返回值,最终导致这一惨剧的发生。慢雾安全团队建议在对接此类写法的代币时使用 require 对其返回值进行检查,以避免此问题的发生。[2021/4/4 19:45:30]
2.0x7E0c621Ea9F7aFD5b86A50B0942eAee68B04A61Cproxy合约,changeAdmin方法内部调用追踪到304行,实际写入key为ADMIN_SLOT,但读取key却为ADMIN_SLOT。即O(欧)和0(零)的一个细微差异,让changeAdmin方法完全失效,从而达到了已经移交权限的假象
三、结论和经验
1.高度警惕任何包含proxy方式合约的项目,若未经timelock约束,合约有被瞬间替换的风险
2.nevertrust,alwaysverify!不要相信项目方给出的timelock“证据”,对于未经审计的fork项目,务必逐个contract做好与原项目的diff(如果你做到了,就可以躲过meerkat的障眼法)
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。