慢雾:Transit Swap が外部からの不正な呼び出しによりハッキングされ、2500 BNB が Tornado Cash に移動されました。
链捕手メッセージによると、SlowMistセキュリティチームの情報に基づき、クロスチェーンDEXアグリゲーターTransit Swapプロジェクトが攻撃を受け、ユーザーの資産が予期せぬ形で流出しました。SlowMistセキュリティチームは、今回の盗難資金の規模が2300万ドルを超えると分析しています。ハッカーのアドレスは0x75F2…FD46と0xfa71…90fbです。次に、今回の攻撃プロセスを分析しました:
ユーザーがTransit Swapでスワップを行う際、まずルーティングプロキシコントラクト(0x8785bb…)を通じて、異なる交換タイプに応じた異なるルーティングブリッジコントラクトを選択します。その後、ルーティングブリッジコントラクト(0x0B4727…)は、権限管理コントラクト(0xeD1afC…)のclaimTokens関数を通じて、ユーザーが交換を待っているトークンをルーティングブリッジコントラクトに転送します。したがって、トークン交換の前にユーザーは権限管理コントラクト(0xeD1afC…)に対して承認を行う必要があります。
claimTokens関数は、指定されたトークンコントラクトのtransferFrom関数を呼び出して送金を行います。受け取るパラメータはすべて上位のルーティングブリッジコントラクト(0x0B4727…)から渡され、これらのパラメータに対しては何の制限もなく、呼び出し元がルーティングプロキシコントラクトまたはルーティングブリッジコントラクトであることのみを確認しています。
ルーティングブリッジコントラクト(0x0B4727…)は、ユーザーが交換を待っているトークンを受け取った後、具体的な交換操作を行うために交換コントラクトを呼び出しますが、交換コントラクトのアドレスと具体的な関数呼び出しデータはすべて上位のルーティングプロキシコントラクト(0x8785bb…)から渡され、ルーティングブリッジコントラクトは解析された交換コントラクトのアドレスと呼び出しデータをチェックしていません。
また、プロキシコントラクト(0x8785bb…)がルーティングブリッジコントラクト(0x0B4727…)に渡すパラメータもすべてユーザーからのパラメータに由来しています。プロキシコントラクト(0x8785bb…)は、ユーザーが渡したcalldata内の各データの長さが期待通りであるか、呼び出されたルーティングブリッジコントラクトがホワイトリストにマッピングされたアドレスであることを確認するだけで、calldataデータの具体的なチェックは行っていません。
したがって、攻撃者はルーティングプロキシコントラクト、ルーティングブリッジコントラクト、および権限管理コントラクトがすべて渡されたデータをチェックしていない欠陥を利用しました。ルーティングプロキシコントラクトを通じて構築されたデータを渡し、ルーティングブリッジコントラクトのcallBytes関数を呼び出します。callBytes関数は、攻撃者が指定した交換コントラクトと交換データを解析します。この時、交換コントラクトは権限管理コントラクトのアドレスに指定され、交換データはclaimTokens関数を呼び出して指定されたユーザーのトークンを攻撃者が指定したアドレスに転送するように指定されます。これにより、権限管理コントラクトに対して承認を行ったすべてのユーザーのトークンを盗むことが実現されました。
今回の攻撃の主な原因は、Transit Swapプロトコルがトークン交換を行う際にユーザーから渡されたデータを厳密にチェックしていなかったため、任意の外部呼び出しの問題が発生したことです。攻撃者はこの任意の外部呼び出しの問題を利用して、ユーザーがTransit Swapに対して承認したトークンを盗みました。
現在までに、ハッカーは2,500 BNBをTornado Cashに移転し、残りの資金はハッカーのアドレスに分散して保管されています。ハッカーの痕跡分析により、LATOKENなどのプラットフォームからの入出金の痕跡が確認されました。SlowMist MistTrackは、盗まれた資金の移転およびハッカーの痕跡の分析を引き続き追跡します。(出典リンク)