3つの当事者が並んで:NOFX AI取引システムの脆弱性を守るための戦い

著者: Yao & Thinking & Pds 編集: 77

###背景

AI大モデルの実取引コンペティションが加熱する中、ますます多くの暗号コミュニティや開発者がAI駆動の自動取引を試み始め、多くのオープンソースのソリューションが迅速に使用されています。しかし、これらのプロジェクトには安全上のリスクが少なくありません。

!

NOFX AIは、DeepSeek/Qwen AIに基づいたオープンソースの暗号通貨先物自動取引システムで、Binance、Hyperliquid、Aster DEXなどの取引所をサポートしています。SlowMistセキュリティチームは、@Endlessss20から提供された最初の情報を受け取り、このシステムが取引所のAPIキーなどの漏洩を引き起こす可能性があると疑い、これについてセキュリティ分析を行いました。

オープンソースアドレス:https://github.com/NoFxAiOS/nofx

脆弱性原因分析

Slow Fogのセキュリティチームによる詳細な分析の結果、NOFX AIの異なるコミットバージョンにおいて2種類の主要な認証問題が存在することが判明しました。

「ゼロ認証」脆弱性バージョン

2025年10月31日のコミット517d0caf6fb091235e56c27889170b53a16e4e6b(origin/main、origin/devなどのブランチも含まれる)で「デフォルト管理者モード」が導入されました。このコミットバージョンの管理者モードはデフォルトでオンになっており、ミドルウェアは直接通過します。

config.json.example:1-24 とデータベース移行スクリプトの両方が admin_mode を true に設定し、main.go:42-63 は読み取った直後に auth を呼び出します。 SetAdminMode(true)。

!

(参考:https://github.com/NoFxAiOS/nofx/blob/517d0caf6fb091235e56c27889170b53a16e4e6b/config.json.example)

!

(参照:https://github.com/NoFxAiOS/nofx/blob/517d0caf6fb091235e56c27889170b53a16e4e6b/config/database.go#L214)

!

(参照:https://github.com/NoFxAiOS/nofx/blob/517d0caf6fb091235e56c27889170b53a16e4e6b/main.go#L42-63)

より重要なのは、コード api/server.go#L799 で見ると、auth.IsAdminMode() が true の場合、ミドルウェアは直接 return し、Authorization 認証ヘッダーのチェックを完全にスキップすることです。

!

(参照:https://github.com/NoFxAiOS/nofx/blob/517d0caf6fb091235e56c27889170b53a16e4e6b/api/server.go#L799)

したがって、このコミットの提出以前は、デプロイがデフォルトの管理者モードのままであれば、誰でも直接 /api/exchanges にアクセスし、すべての取引所のAPI/秘密鍵を取得できます。

このモードでは、すべての認証された保護API、/api/exchangesを含むは「admin」権限で実行されるため、誰でも公開APIにGETリクエストを送信するだけで、データベース内のExchangeConfigの完全な内容を取得できます。

ExchangeConfig フィールドには api_key、secret_key、hyperliquid_wallet_addr および aster_private_key が含まれており、いずれも取引所のログインキーまたは秘密鍵です。つまり、デフォルトの管理者モードを維持していれば、誰でも直接 /api/exchanges にアクセスし、すべての取引所の API/秘密鍵を取得できます。このコミットのコードは、すべての取引所のキーをログイン不要の GET インターフェースで公開することに相当します。

!

認証に必要なバージョン

2025年11月5日の提出be768d91a3969b39741623c9507f3119e583eb16(PR #540「管理者モードでの管理者パスワードを有効にする」において、開発者はadmin_modeを検出した際にAuthorizationを検証せずに直接通過させるという元々のロジックを削除しました。

注意すべきは、このコミットが現在dev系列のブランチ(ローカルdevやorigin/devなど)にのみ存在するということです。origin/mainにはこのコミットは含まれていません。

authMiddlewareはapi/server.go:1471-1511の形式に書き換えられ、Authorization: Bearer を持っていなければ保護されたルートに入ることができません。形式が間違っているか、JWTの検証に失敗した場合、直接401が返されます。

! [])https://img-cdn.gateio.im/social/moments-38a90e92120558f05ed5a79c0a3c6824(

(参照:https://github.com/NoFxAiOS/nofx/blob/be768d91a3969b39741623c9507f3119e583eb16/api/server.go#L1471)****

同じ提出により /api/admin-login が新たに追加され、デプロイヤーは環境変数 NOFX_ADMIN_PASSWORD を設定する必要があります。つまり、管理者モードはもはや「ログイン不要で自動的に有効」ではありません。もし admin_mode が true のままだと、main.go:203-226 は環境変数 NOFX_ADMIN_PASSWORD をチェックし、log.Fatalf を呼び出してプロセスを直接終了させます。この変数が事前に設定されていない限りです。設定が完了した後、管理者は新しい /api/admin-login インターフェースを通じてこのパスワードを提出しなければ、JWT を取得することができません。パスワードを設定せずに起動すると、初期化段階で強制終了されます。

! [])https://img-cdn.gateio.im/webp-social/moments-f5864fc6ca3e69f8e4e00724275a979b.webp(

しかし、今回の変更は「完全無認証」を「JWTの提供が必要」にアップグレードしただけで、2つのコア問題はまだ解決されていません。

一つは config.json.example:1-27 で jwt_secret がハードコーディングされていること、main.go:203-214 では環境変数が欠如している場合、その公開文字列にフォールバックし続けることです。

開発者が直接サンプル設定ファイルを使用すると、デフォルトキーが有効になり、安全リスクが存在します。また、プロジェクト内のデフォルトデプロイスクリプトstart.shファイルは、設定が欠如していることを検出すると、サンプル設定ファイルを直接コピーして使用します。

! [])https://img-cdn.gateio.im/webp-social/moments-dc43407f5b69b2f7d2ef89e183e36916.webp(

次に、/api/exchanges は、api_key、secret_key、Aster 秘密鍵などの機密性の高いフィールドを JSON 形式で返します。

したがって、このバージョンは /api/exchanges へのアクセスに Authorization が必要ですが、攻撃者はデフォルトのキーを使用して JWT を作成したり、デフォルトのログインインターフェースを呼び出してトークンを取得することで、すべてのキーを読み取ることができます。

! [])https://img-cdn.gateio.im/webp-social/moments-57db60a0429eafa0507e85914b47ebee.webp(

現在のバージョンの固定JWT問題は依然として存在します

現在(2025年11月13日頃)において、devブランチのHEADはb2e4be91523dc606be8708ec6602fecbbb0c20ea(PR #546 “Feature/faq”)です。Slow Mistセキュリティチームはこのコミットを再チェックアウトし、確認したところ:

  • authMiddleware はまだ api/server.go:1471-1511 の実装であり、Bearer トークンが必要です。
  • /api/exchanges は ExchangeConfig を直接返します (api/server.go:1009-1021);
  • config.json.example:1-27 と main.go:198-226 は、デフォルトの jwt_secret で admin_mode=true とハードコードされています。

したがって、運用管理者が jwt_secret を積極的に変更せず、管理者モードをオフにしない限り、攻撃者は公開鍵を利用して固定 JWT を作成し、/api/exchanges にアクセスしてすべての取引所の API/秘密鍵を取得することができます。言い換えれば、2025-11-05 の修正は、脆弱性を「ゼロ認証」から「デフォルトキーによる認証」に変えただけであり、問題の根本は依然として存在します。

影響

私たちはプログラムの特徴に基づいて、全ネットワークを検索し、公開ネットワークに1000以上のすでにプライベート化され、外部にオープンなシステムが存在することを発見しました:

! [])https://img-cdn.gateio.im/webp-social/moments-70b31be5b81fe91aba7d305f744f7cde.webp(

! [])https://img-cdn.gateio.im/webp-social/moments-e8be97cfba4ba8156d7d1c8218f53e48.webp(

慢雾セキュリティチームは、いつ攻撃が発生するかを認識し、最初に全体的なセキュリティ計画を検討しました。最終的に、私たちはバイナンスのセキュリティチーム、OKXのセキュリティチームに連絡を取ることに決め、慢雾はバイナンス、OKXとともにセキュリティ作戦室を設立しました。私たちは情報と影響範囲を提供し、バイナンスのセキュリティチーム、OKXのセキュリティチームはそれぞれ独立してクロス検証を行い、取得したapi_keyを基に逆推進し、システムレベルで影響を受けたユーザーを特定し、ユーザーに直面しているセキュリティリスクを通知しました。最初の段階でapi_key、secret_keyなどの情報を変更し、ユーザーの資産が対敲によって損失を被るのを防ぎ、ユーザーの資産の安全を守ります。

11月17日現在、すべての影響を受けたCEXユーザーに通知が完了し、関連するキーは廃棄され、ユーザー資産は安全な状態にあります。

Aster**、Hyperliquid**の少数のユーザーについて、Slow MistとBinanceのチームは積極的に連絡を試みましたが、アドレスが分散型ウォレットアドレスであるため、具体的なユーザーに直接連絡することができませんでした。AsterやHyperliquidの自動取引システムを使用している場合は、関連するリスクを迅速に確認し、対処してください。

同時に、私たちはNOFX AIチームとこの脆弱性の詳細についてコミュニケーションを取り、修正提案を提供し、システムの安全性を向上させる手助けをします。

まとめと提案

現在、AI大規模モデルの量子化プロジェクトが注目を集めていますが、ほとんどのオープンソース実装はまだ初期段階にあります。このような新興のオープンソースシステムを展開する際には、十分なコードのセキュリティ監査を行い、リスク管理の対策を強化することが重要であり、資金の損失を避ける必要があります。

上記の分析を総合すると、NOFXプロジェクトは修復の試みがあったものの、核心的な問題は未解決のままです。NOFXプロジェクトのコミット517d0cafおよびそれ以前のバージョン(origin/mainは現在この世代に停滞しています)は「承認不要」状態にあり、直ちにアップグレードするか、手動で管理者モードをオフにする必要があります。

たとえ be768d9 または現在の HEAD にアップグレードしても、デフォルトの jwt_secret を使用し続けると、攻撃者は固定の Authorization ヘッダーを作成することでキーを取得できます。この脆弱性を完全に修正するには、以下のことを同時に行う必要があります:

  1. JWTキーのランダム化:起動時にjwt_secretがテンプレートと同じであることが判明した場合、実行を拒否します;安全なストレージまたはキー管理システムに書き込むことをお勧めします。

  2. デフォルトの管理者モードを無効にする:明示的に設定された場合のみ admin モードを許可し、強力なパスワード + OTP を要求する;非 admin モードでは /api/admin-login を直接閉じる必要があります。

  3. 最小化 /api/exchanges 応答:デフォルトでは、有効状態、テストネットフラグなどの非機密フィールドのみが返されます。API/秘密鍵のエクスポートは別のインターフェースが必要で、二重確認が行われ、サーバー側ではフィールドがマスキングまたは暗号化されます。

開発チームがこれらの修正を完了するまで、すべてのパブリックデプロイメントは高リスクと見なされるべきです。特に、origin/mainは517d0cの「ゼロ認証」段階にあり、メンテナンス担当者は最新のコードを迅速に同期し、カスタムキーおよびインターフェースの強化ポリシーを厳格に実施する必要があります。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
0/400
コメントなし
  • ピン