Cointime

扫码下载App
iOS & Android

SharkTeam:Prisma Finance被攻击事件分析

2024年3月28日,Prisma Finance遭受闪电贷攻击,项目方损失约1221万美元。

SharkTeam对此事件进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

攻击者1:0x7e39e3b3ff7adef2613d5cc49558eab74b9a4202(简记为0x7e39)

攻击合约1:0xd996073019c74b2fb94ead236e32032405bc027c(简记为0xd996)

攻击者2:0x7fe83f45e0f53651b3ed9650d2a2c67d8855e385

攻击合约2:0x4148310fe4544e82f176570c6c7b649290a90e17

被攻击的目标合约:0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6

攻击包含16笔交易,以第一笔攻击交易为例:

0x00c503b595946bccaea3d58025b5f9b3726177bbdc9674e634244135282116c7

攻击流程如下:

1. 读取地址0x56a201b872b50bbdee0021ed4d1bb36359d291ed(简记为0x56a2)在目标合约中的所有抵押物和债务。

返回结果如下:

地址0x56a2在目标合约中抵押物共有1,745 wstETH,总债务共有1,442,100 mkUSD。

2. 攻击者0x7e39通过攻击合约0xd996调用mkUSD债务合约中的flashLoan函数。

参数receiver设置为MigrateTroveZap,amount为上面查询到的全部债务。

然后,在flashLoan函数中会调用receiver(这里是MigrateTroveZap)中的onFlashLoan函数。

onFlashLoan函数通过闪电贷先偿还原来的所有债务,提取抵押物到receiver,然后receiver将一定数量的抵押物重新抵押,并借取一定的债务。其中主要调用了2个函数:

(1)closeTrove函数,偿还债务并将所有的抵押物(1745.08 swtETH)从troverManager提取到receiver(这里是MigrateTroveZap合约);

(2)openTrove函数,由receiver将463.18 wstETH重新抵押到troverManager中,并负债1,443,598 mkUSD。

从上面数据可以看出,flashLoan函数执行完成后,receiver中仍然保留了从troverManager中提取的属于地址0x56a2的抵押物,数量约为1745.08 – 463.18 = 1281.90 wstETH。

3. 攻击者0x7e39通过攻击合约0xd996从Balancer中通过闪电贷借取了1 wstETH。

然后,抵押1 wstETH并借取债务2000 mkUSD,加上fee,共计负债2200 mkUSD。

4. 与步骤2类似,调用mkUSD债务合约中的flashLoan函数,这里参数receiver仍然设置为MigrateTroveZap,amount为上一笔质押1 wstETH后的全部债务,即2000 mkUSD。在FflashLoan函数中会调用receiver中的onFlashLoan函数,然后调用closeTrove和openTrove函数。

只是,这里closeTrove和openTrove函数中的参数account不再是上面的地址0x56a2,而是质押了1 wstETH的攻击合约0xd996。

(1)closeTrove函数,偿还债务并将所有的抵押物(1 swtETH)从troverManager提取到receiver(这里仍然是MigrateTroveZap合约)。此时receiver中共有1281.90 +1=1282.90 wstETH.

(2)openTrove函数,由receiver将1282.80 wstETH(几乎全部)重新抵押到troverManager中,并负债2001.8 mkUSD。

实际上,这里抵押物中1281.80 wstETH是不属于攻击合约0xd996,而是属于上面的地址0x56a2。

5. 最后,攻击者0x7e39通过攻击合约0xd996单独调用closeTrove函数,将抵押的1282.80 wstETH 提取到了攻击合约0xd996中。

偿还闪电贷后,攻击者仍获利1281.80 wstETH,约2.30M USD。

本次事件的根本原因是项目合约存在逻辑和权限校验,使得攻击者可以利用该漏洞获取其他账户地址的质押资产。

攻击者最终获得的wstETH是原本地址0x56a2在troverManager合约中的抵押物,通过mkUSD合约的flashLoan函数,自定义MigrateTroveZap合约中onFlashLoan函数的参数,利用 MigrateTroveZap将其转变为攻击合约的抵押物,然后将其提取出来。

攻击者通过mkUSD合约中的flashLoan函数以及MigrateTroveZap合约中的onFlashLoan函数操纵其他账户地址的抵押和提取。

(1)flashLoan函数中缺少对参数receiver地址的校验,因为onFlashLoan函数中receiver会接收account的所有抵押物,因此需要对receiver进行可信的校验;

(2)onFlashLoan函数中缺少对account地址的校验,因为closeTrove和openTrove函数都是操作的account的资产,因此需要对account增加权限方面的校验;

除了对这两个地址参数的校验外,可能还需要对flashLoan函数中的数量参数以及实现逻辑进行校验。

针对本次攻击事件,我们在开发过程中应遵循以下注意事项:

(1)项目在设计和开发过程中,要保持逻辑的完整性和严谨性,尤其是涉及到资产的转移过程中,更要加强对函数调研权限的校验,保证调用者、调用函数、函数参数、转账逻辑等都是安全可信的。

(2)项目上线前,需要找专业的第三方审计团队进行合约审计。

SharkTeam的愿景是保护Web3世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约底层理论。提供包括风险识别与阻断、智能合约审计、KYT/AML、链上分析等服务,并打造了链上智能风险识别与阻断平台ChainAegis,能有效对抗Web3世界的高级持续性威胁(Advanced Persistent Threat,APT)。已与Web3生态各领域的关键参与者,如Polkadot、Moonbeam、polygon、Sui、OKX、imToken、Collab.Land等建立长期合作关系。

官网:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Telegram:https://t.me/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

评论

所有评论

推荐阅读

  • BTC突破70000美元

    Cointime 报道,行情显示,BTC突破70000美元,现报70003.25美元,24小时涨幅达到3.96%,行情波动较大,请做好风险控制。

  • 伊朗通过巴基斯坦回击美国,拒绝停火,强调必须永久结束战争

    Cointime 报道,据伊朗伊斯兰共和国通讯社(IRNA):伊朗通过巴基斯坦回击美国,拒绝停火,强调必须永久结束战争。

  • 美媒称45天停火计划只是“众多方案之一”

    Cointime 报道,据美国媒体6日报道,一名白宫官员说,美国和伊朗之间为期45天的停火计划只是目前正在讨论的“众多方案之一”。这位白宫官员表示,美国总统特朗普尚未批准该计划,美方对伊朗的军事行动仍在继续。(新华社)

  • 特朗普尚未批准停火计划

    Cointime 报道,4月6日,美国白宫表示,美国总统特朗普尚未批准停火计划。潜在的停火方案只是众多设想之一。(金十)

  • Strategy上周增持4,871枚BTC,累计持仓突破76.6万枚

    Cointime 报道,4月6日,据Strategy官方披露,Strategy上周以约6.7718万美元的均价买入4,871枚BTC,总耗资约3.299亿美元。截至2026年,Strategy累计持有766,970枚BTC,总持仓成本约580.2亿美元,均价约7.5644万美元/枚。

  • 伊朗发动“真实承诺-4”第98波攻势 打击美军两栖攻击舰

    Cointime 报道,4月6日讯,伊朗伊斯兰革命卫队公共关系部发表声明说,伊朗发动“真实承诺-4”行动第98波攻势。声明称,伊斯兰革命卫队海军��用巡航导弹打击了属于“犹太复国主义政权”的集装箱船SDN7,该船被摧毁后发生大面积起火,还使用导弹打击了特拉维夫北部和南部、海法的战略中心、贝尔谢巴的化工企业与工厂,以及巴特赫费尔的军队驻地。声明还表示,搭载逾5000名水兵和海军陆战队员的美国军方两栖攻击舰LHA7也遭到导弹打击,在此次攻势后被迫撤退至印度洋南部深海区域。声明还称,阿联酋与以色列联合无人机生产中心,以及驻扎在阿里·萨利姆基地的多架飞机,均遭到无人机和导弹打击。 (金十)

  • 霍尔木兹海峡船只通行数量升至3月初以来最高水平

    Cointime 报道,4月6日,据外媒报道,霍尔木兹海峡通行量升至中东战争爆发初期以来最高水平,因更多国家与伊朗达成安全通行协议。周末共有21艘船只通过该水道,这是自3月初通行量开始下降以来的最高两日总量。尽管当前通行船只数量仍远低于战前水平(约135艘),但已有更多国家获得通行许可。新加坡Kpler高级原油分析师表示:“伊朗在回应其伙伴国请求的同时,也在强化对霍尔木兹的控制。通行仍取决于伊朗意愿,如果冲突升级,局势可能随时发生变化。”截至目前,大多数获准通行的船只似乎遵循德黑兰指示的航线,贴近伊朗海岸航行。不过,也有更多船只开始选择沿对岸航线行驶。 (金十)

  • 伊朗称美国15点计划“野心极大且不合逻辑”

    Cointime 报道,4月6日讯,据伊朗伊斯兰共和国通讯社(IRNA)报道,伊朗外交部发言人伊斯梅尔·巴盖伊表示,在近期有关结束战争的提议背景下,德黑兰已敲定自身诉求,但仅会在适当时机公布,并强调伊朗不会屈从于压力,。他表示:“几天前,他们通过中间方提出了一些方案,而这项包含15点内容的美国计划是通过巴基斯坦以及其他一些友好国家转达的。”他并补充称,“此类方案野心极大,又不同寻常,而且不合逻辑。”他强调,伊朗拥有自身框架。“基于我们的自身利益,基于我们的考量,我们已经整理并制定了我们过去和现在所提出的一系列诉求。”他还否认与调解方接触意味着软弱。“伊朗迅速且勇敢地对一项方案表达立场的事实,不应被视为向敌人屈服的表现。”(金十)

  • BTC突破70000美元关口

    Cointime 报道,行情显示,BTC突破70000美元关口,现报70071.01美元,24小时涨幅达到4.46%,行情波动较大,请做好风险控制。