慢雾:pGALA 事件根本原因系私钥明文在 GitHub 泄露
据慢雾区情报,11 月 4 日,一个 BNB Chain 上地址凭空铸造了超 10 亿美元的 pGALA 代币,并通过 PancakeSwap 售出获利,导致此前 GALA 短时下跌超 20%。慢雾将简要分析结果分享如下:
相关信息
pGALA 合约地址
0x7dDEE176F665cD201F93eEDE625770E2fD911990
proxyAdmin 合约地址
0xF8C69b3A5DB2E5384a0332325F5931cD5Aa4aAdA
proxyAdmin 合约原 owner 地址
0xfEDFe2616EB3661CB8FEd2782F5F0cC91D59DCaC
proxyadmin 合约当前 owner 地址
0xB8fe33c4B55E57F302D79A8913CE8776A47bb24C
简要分析
1. 在 pGALA 合约使用了透明代理(Transparent Proxy)模型,其存在三个特权角色,分别是 Admin、DEFAULT_ADMIN_ROLE 与 MINTER_ROLE。
2. Admin 角色用于管理代理合约的升级以及更改代理合约 Admin 地址,DEFAULT_ADMIN_ROLE 角色用于管理逻辑中各特权角色(如:MINTER_ROLE),MINTER_ROLE 角色管理 pGALA 代币铸造权限。
3. 在此事件中,pGALA 代理合约的 Admin 角色在合约部署时被指定为透明代理的 proxyAdmin 合约地址,DEFAULT_ADMIN_ROLE 与 MINTER_ROLE 角色在初始化时指定由 pNetwork 控制。proxyAdmin 合约还存在 owner 角色,owner 角色为 EOA 地址,且 owner 可以通过 proxyAdmin 升级 pGALA 合约。
4. 但慢雾安全团队发现 proxyAdmin 合约的 owner 地址的私钥明文在 Github 泄漏了,因此任何获得此私钥的用户都可以控制 proxyAdmin 合约随时升级 pGALA 合约。
5. 不幸的是,proxyAdmin 合约的 owner 地址已经在 70 天前(2022-08-28)被替换了,且由其管理的另一个项目 pLOTTO 疑似已被攻击。
6. 由于透明代理的架构设计,pGALA 代理合约的 Admin 角色更换也只能由 proxyAdmin 合约发起。因此在 proxyAdmin 合约的 owner 权限丢失后 pGALA 合约已处于随时可被攻击的风险中。
总结
综上所述,pGALA 事件的根本原因在于 pGALA 代理合约的 Admin 角色的 owner 私钥在 Github 泄漏,且其 owner 地址已在 70 天前被恶意替换,导致 pGALA 合约处于随时可被攻击的风险中。