gm gm,又來了。
今天早上,有人利用 ApeStr 的一個漏洞,用 21 隻猿猴換走 ApeStr 持有的 21 隻猿猴。
這是已知的漏洞利用方式(參見約 1 年前的 SQUIGSTR 漏洞利用),但一直沒有足夠誘因促使人們實際操作。
漏洞出在 buyTargetNFT:它會強制策略合約向任意目標發送任意 calldata。之後它只檢查三件事:BAYC 餘額恰好增加 1、持有預期的 ID,以及「成本」等於 ETH 餘額減少的數量。
這個漏洞已在後續的 NFTStrategy 版本中修補,但會影響最初的 6 個版本(PunkSTR 不受影響)。
攻擊者買了 2 隻 BAYC 作為誘餌。接著,他們使用一個輔助合約,先以 5 wei 的價格把一隻猿猴賣給策略合約,再立即以 6 wei 買回。這會讓合約的 ethToTwap 預先存入 6 wei。
接著,他們呼叫 buyTargetNFT,並傳入 calldata,使用 safeTransferFrom 將一隻猿猴從 ApeSTR 轉給輔助合約。這會將執行權交給輔助合約(別忘了,safeTransferFrom 並不安全),而輔助合約會把兩隻猿猴轉回 ApeSTR,以滿足餘額檢查(轉出 1 隻、轉入 2 隻,讓 ApeSTR 的餘額淨增 1)。它也會呼叫 processTokenTwap,將 6 wei 轉換並把新存入的其中一隻猿猴的