autorenew
Solana LaunchPoolのエクスプロイト:小さなタイミングバグがフラッシュローンでトークン報酬を盗ませる仕組み

Solana LaunchPoolのエクスプロイト:小さなタイミングバグがフラッシュローンでトークン報酬を盗ませる仕組み

急速に進むSolanaのミームトークンローンチの世界では、盛り上がりと巨額の資金調達が交差するため、ほんの小さなコードのミスが有望なプロジェクトをハッカーの遊び場に変えてしまいます。これは、Solanaの“危険地帯”を監査するセキュリティチーム、Accretion.xyzによる注目のシリーズAdvent of BugsのDay 2から得られた厳しい教訓です。彼らの最新スレッドはLaunchPoolプロトコルに潜む巧妙なタイミングの問題を掘り下げており、フラッシュローンだけで報酬を吸い上げられてしまう可能性を示しています。Solanaのミームトークンをローンチしたり投資したりしているなら、必読の内容です。

セットアップ:End TimeがClaim Timeと重なるとき

想像してみてください:Solana上でLaunchPoolを構築していて、ユーザーが資金をプールして新しいミームトークンを支援し、資金調達が終わった後に比例配分で報酬を得るプラットフォームです。流れは単純――入金のstart​、合計を確定するためのend​、そして寄与に応じてトークンを配布するclaim​。

しかしここでバグが生じます。監査されたプロトコルでは、end timeがちょうどclaim startと同じ時刻に設定されていました。Solanaの超高速なスロット(取引が行われる短い時間ブロック)では、この重なりが混乱を生みます。その一つのスロットの間、システムは「入金はまだ開いていて、かつクレームも開始している」と判断してしまいます。ユーザーは報酬を請求しながら入金や出金、ステークの変更ができてしまうのです。

なぜこれが問題なのか?クレームは「あなたの入金 ÷ プール合計」であなたの取り分を計算します。クレームの間に入金が流動的なままだと、合計が大きく変動します。後から入金した者が不当にポットを膨らませ、配分を歪め、初期支援者から報酬を奪う可能性が出てきます。

エクスプロイト:フラッシュローンが形勢を逆転させる

ここで登場するのがフラッシュローン――Solana上のDeFiで一般的な、担保なしで一時的に巨額を借り、同一トランザクション内で返済する仕組みです。裁定取引のプロにはリスクの少ない手法ですが、このケースでは報酬窃盗者の夢と化します。

攻撃者が数秒でやることは次の通りです:

  1. Borrow Big(巨額を借りる)​: 例として1,000 SOL(またはプールのネイティブトークン)をフラッシュローンで借ります。
  2. Deposit at Dusk(終わりのスロットで入金)​: まさに end_time == claim_time のスロットで借りた資金をプールに突っ込みます。すると合計入金が急増します。
  3. Claim the Loot(戦利品を請求)​: 即座に報酬を請求します。今やあなたの「取り分」は総額を膨らませたため非常に大きく見えます。
  4. Pull Out(抜き取る)​: その重なったスロット内では出金も許可されているため、入金を引き出します。
  5. Repay and Repeat(返済して繰り返す)​: フラッシュローンを返済し、トランザクション手数料だけでトークンを懐に入れます。

被害者は他の全員です。初期入金者の取り分は希薄化され、プロジェクトは信頼と資金を失います。これはSolanaのスピードに増幅された典型的なレースコンディション攻撃です。

Advent of Bugs Day 2:重なった状態とフラッシュローン攻撃の流れを示すLaunchPoolタイミング問題の図

根本原因:巧妙な不等号ミス

Accretionの監査チームはスマートコントラクトのロジックに原因を見つけました:単純な<=チェックが使われていたために、入金フェーズがクレーム時代まで持ち越されてしまっていたのです。コード的には状態遷移が start < end <= claim_start となり、二つのフェーズが一つのスロットに押し込まれていました。

ブロックチェーンでは、ベスティングスケジュールからミームトークンのエアドロップまで、時間ベースのトリガーが至る所にあります。修正方法は明快です:​​厳格な​区切りを設けること。入金終了には < を、クレーム開始には >= を使って、各タイムスタンプが必ず一つの状態にしかならないようにします。Solanaのスロット粒度を念頭に置いてテストを行いましょう。Anchorのようなフレームワークはこれらのエッジケースをシミュレートするのに役立ちます。

なぜSolanaのミームトークンはこの警鐘を必要としているのか

Solanaのミームコイン界隈は急速に拡大しており、LaunchPoolsがPump.funのクローンやバイラルなトークンに燃料を注いでいます。しかしセキュリティはこの熱狂に追いついていません。このバグは孤立したケースではなく、同様のタイミングのミスはEthereumのDEXやBitcoinスクリプトでも起きています。ビルダーにとっての教訓は明白:早く、そして頻繁に監査を行え。Accretionのようなプラットフォームはローンチ前にこれらを発見する上で金のように価値があります。

投資家の皆さんも注意を。次の犬テーマの宝石に飛びつく前に、プロトコルの監査履歴をチェックしてください。Solana Explorerのようなツールでオンチェーンの異常を見つけることはできますが、積極的なセキュリティ対策に勝るものはありません。

ブロックチェーン開発者への重要ポイント

  • Strict State Machines(厳密な状態機械)​: フェーズに重なりを持たせない――end_time < claim_start を意識する。
  • Flash Loan Proofing(フラッシュローン耐性の検証)​: 借入を伴う攻撃をシミュレートして遷移をストレステストする。
  • Audit Allies(監査の味方を持つ)​: Solanaに詳しいAccretionのような会社に相談する。
  • Meme Magic with Safeguards(安全策を伴うミームの魔法)​: 面白いトークンは信頼で成り立つ。一つのエクスプロイトがプロジェクトを一気に葬ることがある。

Advent of Bugsをフォローして、日々の深掘りをチェックしてください――Day 1はリエントランシーを扱っており、これからどんどん面白くなります。あなたの一番ヤバかったSolanaセキュリティ体験は何ですか?コメントで教えてください。気をつけて、degensの皆さん。

Shoutout to @0xmahdirostami for the sharp spot—security accretes one bug at a time.

おすすめ記事