星球日報訊Crosswise項目遭受攻擊,慢霧分析如下: 1. setTrustedForwarder函數未做權限限制,攻擊者可公開調用setTrustedForwarder去更改trustedForwarder 為自己地址。 2. _msg.sender() 中,若滿足isTrustedForwarder時會返回用戶calldata最後20個字節, 故攻擊者構造calldata去繞過transferOwnership的onlyOwner檢查,使自己成為合約的Onwer。 3. 攻擊者通過CrosswiseRouter用0.01 BNB換出3.71 CRSS。 4. 攻擊者通過deposit把1 CRSS存入Crosswise MasterChef。 5. 攻擊者調用set函數為MasterChef裡的pid為0的池子部署新的特定構造的策略。 6. 攻擊者接著調用MasterChef的withdraw函數, 傳入指定的pid和需要提款的數量_amount,可以推測出構造的惡意策略裡的兩個變量為LockedTotal = 99999999與sharesTotal = 1。接著會計算user.amount = user.amount.sub(shareRemoved),shareRemoved是調用的惡意策略裡的withdraw函數取得,這也是惡意策略裡攻擊者讓withdraw函數直接返回0的原因。 MasterChef合約把池子裡的692K CRSS直接轉給攻擊者。 7. 攻擊者把692K CRSS通過CrosswiseRouter合約兌換出547 BNB完成攻擊。此次攻擊是由於setTrustedForwarder函數未做權限限制,且在獲取調用者地址的函數_msg.sender() 中,寫了一個特殊的判斷,導致後續owner權限被轉移以及後續對池子的攻擊利用。