PANews 8月12日消息,安全公司慢霧對去中心化年金協議Punk Protocol遭遇攻擊的原理進行了解析。攻擊者首先調用CompoundModel 合約的Initialize 函數進行重複初始化操作將合約Forge 角色設置為攻擊者指定的地址。隨後攻擊者為了最大程度的將合約中資金取出,其調用了invest 函數將合約中的資金抵押至Compound 中以取得抵押憑證cToken。最後攻擊者直接調用withdrawToForge 函數將合約中的cToken 轉回Compound 獲取對應的底層資產並最終將其轉給Forge 角色。 withdrawToForge 函數被限制只有Forge 角色可以調用,但Forge 角色已被重複初始化為攻擊者指定的地址,因此最終合約管理的資產都被轉移至攻擊者指定的地址。本次攻擊的根本原因在於其CompoundModel 的Initialize 函數未做重複初始化檢查,導致攻擊者直接調用此函數進行重複初始化替換Forge 角色,最終造成合約管理的資產被盜。