Back to Blog

SwapNetとAperture Financeにおける1700万ドルのクローズドソーススマートコントラクト脆弱性:任意コール問題

Code Auditing
January 28, 2026
8 min read

2026年1月25日、SwapNetとAperture Financeが展開した脆弱なコントラクトを標的とした一連の不正なトランザクションを検出し、合計損失額は1700万ドルを超えました。これらのインシデントの根本原因は、高レベルで見ると単純であり、初期アラートですでに概要が示されていました[12]:入力検証の不備により、脆弱なコントラクトが任意の呼び出し機能を公開しており、攻撃者が既存のトークン承認を悪用し、transferFromを呼び出して資産を流出させることが可能でした。

しかしながら、両方の脆弱なコントラクトはクローズドソースであり、逆コンパイルすると数千行のコードと深くネストされた複雑な分岐ロジックが展開されるため、分析の難易度が著しく増します。さらに、影響を受けたプロジェクトが公開した事後分析レポート[34]は、主に修復と回復に焦点を当てており、根本的な技術的詳細に関する議論は限定的でした。その結果、脆弱な呼び出しパスがどのように構築されたのか、そして既存のチェックがなぜ悪用を防げなかったのかといった、いくつかの重要な質問が未解決のまま残されています。

本レポートでは、逆コンパイルされたバイトコードとオンチェーン実行トレースに基づいた、より詳細な技術分析を提供します。ソースコードの欠如は可視性を制限しますが、バイトコードレベルの分析は脆弱なロジックを再構築するのに十分であり、高レベルのアラートからはすぐに明らかにならないコントラクト設計に関するいくつかの興味深い観察結果を明らかにします。

まずSwapNetインシデントについて深く掘り下げ、次にAperture Financeインシデントの詳細な分析を行います。


SwapNet インシデント

背景

SwapNet [5]は、AMMやプライベートマーケットメーカーを含む複数のオンチェーンソースから流動性を集約することで、最適なスワップルートを見つけるためのDEXアグリゲーターです。このプロトコルでは、ユーザーがスワップ実行時にカスタムルーターまたはプールを指定することも可能で、追加の柔軟性を提供します。

根本原因分析

このインシデントは、ユーザー提供の入力検証の不備に起因しており、攻撃者が任意のパラメータtransferFrom()呼び出しをトリガーすることを可能にします。その結果、以前に脆弱なコントラクト(例:0x616000e384Ef1C2B52f5f3A88D57a3B64F23757e)に承認されていた資産が攻撃者に転送される可能性がありました。

逆コンパイルされたバイトコードに基づくと、関数0x87395540()は、重要な入力に対する適切な検証が欠けているようです。期待されるルーターまたはプールのアドレスをトークンアドレス(例:USDC)に置き換えることで、コントラクトは誤ってトークンを実行可能なターゲットと見なします。これにより、攻撃者が制御するcalldataを使用して低レベルの呼び出しが実行されます。

結果として、脆弱なコントラクトはapprovedAsset.transferFrom(victim, attacker, amount)という形式の呼び出しを実行し、攻撃者は承認されたすべての資産を不正に引き出すことができます。

攻撃フロー

SwapNetに対して複数の攻撃が観測されました。ここでは、Baseトランザクション0xc15df1d131e98d24aa0f107a67e33e66cf2ea27903338cc437a3665b6404dd57を例として使用します。

攻撃者は、脆弱なコントラクトの関数0x87395540()を悪意のある入力で呼び出しただけです。この呼び出しは、主に2つのステップで構成されます。

  1. キーとなる内部変数(例:v51)がUSDCに設定され、意図されたルーティングロジックをバイパスします。
  1. 攻撃者が制御するcalldataを使用して低レベルの呼び出しが実行され、USDC.transferFrom()が呼び出され、承認されたすべてのUSDCが流出します。

損失概要、トランザクション、および影響を受けたコントラクト

SwapNetインシデントにより、複数のチェーンで推定約1341万ドルの損失が発生しました。以下の表は、主要なエクスプロイトトランザクションと関与した脆弱なコントラクトアドレスをまとめたものです。


Aperture Finance インシデント

背景

Aperture Finance [6]は、ユーザーに代わってUniswap V3 LPなどの集中流動性ポジションを管理するDeFiプロトコルです。そのクローズドソースコントラクト(例:0xD83d960deBEC397fB149b51F8F37DD3B5CFA8913)により、ユーザーはネイティブトークンを使用してUniswap V3ポジションを作成および管理できます。

UniswapV3ポジション作成の意図されたワークフロー

0x67b34120()関数を介してUniswap V3ポジションを作成する際、コントラクトは意図された3段階のワークフローに従います。

  1. ネイティブトークンをラップ
  2. 内部関数0x1d33()を介してネイティブトークンをスワップ
  3. Uniswap V3ポジションを作成

問題はステップ2で発生します。0x1d33()は低レベルの呼び出しを通じてカスタムスワップを実行し、その際、呼び出しターゲットやcalldataなどの重要なパラメータがユーザー制御可能であり、十分な検証が行われていないため、意図しない外部呼び出しが可能になります。詳細は次のセクションで説明します。

根本原因分析

SwapNetのケースと同様に、Aperture Financeインシデントは、低レベルの呼び出しに対する入力検証の不備によって引き起こされます。0x67b34120()が呼び出されると、内部関数0x1d33()は、呼び出しターゲットや関数セレクターに対する厳格な制約を強制することなく、ユーザーが供給したcalldataを使用して低レベルの呼び出しを実行します。

以下の図に示すように、低レベルの呼び出しをトリガーするために使用されるcalldataは、純粋に攻撃者の入力に基づいています。

これにより、攻撃者はapprovedToken.transferFrom(victim, attacker, amount)という結果になる悪意のあるcalldataを構築することが可能になり、これは脆弱なコントラクトのコンテキストで実行されます。その結果、ERC20トークンだけでなく、承認されたUniswap V3ポジションNFTも不正に引き出すことができます。

攻撃フロー

Aperture Financeに対して複数の攻撃が観測されました。このセクションでは、Ethereumトランザクション0x8f28a7f604f1b3890c2275eec54cd7deb40935183a856074c0a06e4b5f72f25aを代表的な例として使用します。

  1. 攻撃者は攻撃コントラクト0x5c92884dFE0795db5ee095E68414d6aaBf398130を作成しました。
  2. 攻撃コントラクトは、悪意のある入力と100 weiのETH(つまり、msg.value == 100)で関数0x67b34120()を呼び出しました。
    • a) ネイティブETHは、関数WETH.deposit()を介してWETHにラップされました。
* b) 内部関数`0x1d33()`が低レベルの呼び出しを実行するために呼び出されました。このステップでは、`WBTC.transferFrom(victim, attacker, amount)`という呼び出しが脆弱なコントラクトのコンテキストで実行され、攻撃者は承認されたトークンを不正に引き出すことができました。`0x1d33()`関数の最後にバランスチェックが通過したことに注意する価値があります。具体的には、関数`0x1d33()`は、攻撃者が指定したスワップ出力値(つまり、`varg2.word2`)との残高変更を比較しました。その結果、何も受け取らずに正常に実行されました。
3. 最後に、関数`NonfungiblePositionManager.mint()`が呼び出され、100 weiのWETHを使用して攻撃者のポジションが作成されました。

興味深い発見

通常の異常なミントトランザクションを比較することで、両方が同じ支出者(例:OKX DEX: TokenApprove)にトークンを承認しましたが、異なるルーターアドレス(つまり、DexRouterWBTC)を指定していることが観察されました。これは、コントラクトが承認された支出者の検証を強制する一方で、実際の実行ターゲットの検証に失敗している可能性を示唆しており、任意の呼び出しによって悪用可能な重大なギャップを残しています。

通常トランザクション:https://app.blocksec.com/phalcon/explorer/tx/eth/0xc823b703c716fa9078e1d71714b734557bd540ddd1e41590dd73da7c5aba0200

異常トランザクション:https://app.blocksec.com/phalcon/explorer/tx/eth/0x8f28a7f604f1b3890c2275eec54cd7deb40935183a856074c0a06e4b5f72f25a

損失概要、トランザクション、および影響を受けたコントラクト

Aperture Financeインシデントにより、複数のチェーンで合計約367万ドルの損失が発生しました。以下の表は、主要なエクスプロイトトランザクションと関連する脆弱なコントラクトアドレスをまとめたものです。


結論

SwapNetとAperture Financeのインシデントは、異なるプロトコルとチェーンに影響を与えましたが、両方の根本的な問題は複雑ではありません:トークン承認を保持するコントラクトにおける、ユーザー制御の低レベル呼び出しと入力検証の不備の組み合わせです。これらのインシデントは、コントラクト設計における柔軟性は、厳格な呼び出し制約との慎重なバランスが必要であることを思い出させてくれます。特に、外部レビューが限定的なクローズドソースシステムにおいてはそうです。

参照

[1] https://x.com/Phalcon_xyz/status/2015614087443697738

[2] https://x.com/Phalcon_xyz/status/2015624519898234997

[3] https://meta.matcha.xyz/SwapNet-Incident-Post-Mortem

[4] https://x.com/ApertureFinance/status/2015938720453820752

[5] https://x.com/0xswapnet

[6] https://x.com/ApertureFinance

BlockSecについて

BlockSecは、フルスタックのブロックチェーンセキュリティおよび暗号コンプライアンスプロバイダーです。私たちは、顧客がコード監査(スマートコントラクト、ブロックチェーン、ウォレットを含む)、リアルタイムでの攻撃傍受、インシデント分析、不正資金追跡、およびAML/CFT義務の履行を、プロトコルおよびプラットフォームのライフサイクル全体にわたって支援する製品とサービスを構築しています。

BlockSecは、著名なカンファレンスで複数のブロックチェーンセキュリティ論文を発表し、DeFiアプリケーションのいくつかのゼロデイ攻撃を報告し、多数のハッキングを阻止して2000万ドル以上を救済し、数十億ドル相当の暗号通貨を保護してきました。

Sign up for the latest updates
The Decentralization Dilemma: Cascading Risk and Emergency Power in the KelpDAO Crisis
Security Insights

The Decentralization Dilemma: Cascading Risk and Emergency Power in the KelpDAO Crisis

This BlockSec deep-dive analyzes the KelpDAO $290M rsETH cross-chain bridge exploit (April 18, 2026), attributed to the Lazarus Group, tracing a causal chain across three layers: how a single-point DVN dependency enabled the attack, how DeFi composability cascaded the damage through Aave V3 lending markets to freeze WETH liquidity exceeding $6.7B across Ethereum, Arbitrum, Base, Mantle, and Linea, and how the crisis forced decentralized governance to exercise centralized emergency powers. The article examines three parameters that shaped the cascade's severity (LTV, pool depth, and cross-chain deployment count) and provides an exclusive technical breakdown of Arbitrum Security Council's forced state transition, an atomic contract upgrade that moved 30,766 ETH without the holder's signature.

Weekly Web3 Security Incident Roundup | Apr 13 – Apr 19, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Apr 13 – Apr 19, 2026

This BlockSec weekly security report covers four attack incidents detected between April 13 and April 19, 2026, across multiple chains such as Ethereum, Unichain, Arbitrum, and NEAR, with total estimated losses of approximately $310M. The highlighted incident is the $290M KelpDAO rsETH bridge exploit, where an attacker poisoned the RPC infrastructure of the sole LayerZero DVN to fabricate a cross-chain message, triggering a cascading WETH freeze across five chains and an Arbitrum Security Council forced state transition that raises questions about the actual trust boundaries of decentralized systems. Other incidents include a $242K MMR proof forgery on Hyperbridge, a $1.5M signed integer abuse on Dango, and an $18.4M circular swap path exploit on Rhea Finance's Burrowland protocol.

Weekly Web3 Security Incident Roundup | Apr 6 – Apr 12, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Apr 6 – Apr 12, 2026

This BlockSec weekly security report covers four DeFi attack incidents detected between April 6 and April 12, 2026, across Linea, BNB Chain, Arbitrum, Optimism, Avalanche, and Base, with total estimated losses of approximately $928.6K. Notable incidents include a $517K approval-related exploit where a user mistakenly approved a permissionless SquidMulticall contract enabling arbitrary external calls, a $193K business logic flaw in the HB token's reward-settlement logic that allowed direct AMM reserve manipulation, a $165.6K exploit in Denaria's perpetual DEX caused by a rounding asymmetry compounded with an unsafe cast, and a $53K access control issue in XBITVault caused by an initialization-dependent check that failed open. The report provides detailed vulnerability analysis and attack transaction breakdowns for each incident.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit