本次攻击可能是地址私钥被盗,或者是其他原因,导致攻击者直接调用函数进行任意铸币,再次对权限过大问题敲响了警钟。

原文标题:《铸币疑云 —— Paid Network 被盗细节分析》
撰文 : 慢雾安全团队

Paid Network 1.6 亿美元铸币疑云,慢雾拆解攻击细节

据消息,以太坊 DApp 项目 Paid Network 遭受攻击。攻击者通过合约漏洞铸造近 1.6 亿美元的 PAID 代币,并获利 2000 ETH(约 300 万美元)。慢雾安全团队在第一时间跟进并分析,现在将细节分析给大家参考。

攻击细节分析

Paid Network 1.6 亿美元铸币疑云,慢雾拆解攻击细节

以上是整个攻击过程的调用流程细节。

可以看到整个攻击过程非常的简单,攻击者通过调用代理合约中函数签名为 (0x40c10f19) 的这个函数,然后就结束了整个攻击流程。由于这个函数签名未知,我们需要查阅这个函数签名对应的函数是什么。

Paid Network 1.6 亿美元铸币疑云,慢雾拆解攻击细节

通过查阅这个函数签名,我们发现这个签名对应的正是 mint 函数。也就是说,攻击者直接调用了 mint 函数后就结束了攻击过程。那么到这里,我们似乎可以得出一个 mint 函数未鉴权导致任意铸币的漏洞了。通过 Etherscan 的代币转移过程分析,似乎也能佐证这个猜想。

Paid Network 1.6 亿美元铸币疑云,慢雾拆解攻击细节

但是,事实真是如此吗?

为了验证未鉴权任意铸币的这个想法,我们需要分析合约的具体逻辑。由于 Paid Network 使用的是合约可升级模型,所以我们要分析具体的逻辑合约 (0xb8...9c7)。但是在 Etherscan 上查询的时候,我们竟然发现该逻辑合约没有开源。

Paid Network 1.6 亿美元铸币疑云,慢雾拆解攻击细节

这个时候,为了一探究竟,我们只能使用反编译对合约的逻辑进行解码了。通过 Etherscan 自带的反编译工具,可以直接对未开源合约进行反编译。在反编译后,我们却发现了一个惊人的事实:

Paid Network 1.6 亿美元铸币疑云,慢雾拆解攻击细节

通过反编译,我们不难发现,合约的 mint 函数是存在鉴权的,而这个地址,正是攻击者地址 (0x187...65be)。那么为什么一个存在鉴权的函数会被盗呢?由于合约为开源,无法查看更具体的逻辑,只能基于现有的情况分析。我们分析可能是地址 (0x187...65be) 私钥被盗,或者是其他原因,导致攻击者直接调用 mint 函数进行任意铸币。

总结

本次攻击过程虽然简单,但是经过细节分析后却有了惊人的发现。同时这次的攻击也再次对权限过大问题敲响了警钟。如果这次的 mint 函数给到的鉴权是一个多签名地址或是使用其他方法分散权限,那么此次攻击就不会发生。

参考链接:

攻击交易:

https://etherscan.io/tx/0x4bb10927ea7afc2336033574b74ebd6f73ef35ac0db1bb96229627c9d77555a0