Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/chadhyatt/kartlanpwn
脆弱性分析エクスプロイト論文と研究学習と教育バイナリエクスプロイト
GitHubchadhyatt/kartlanpwn

kartlanpwn

CVE-2024-45200の技術的分析と概念実証。Mario Kart 8 DeluxeのPia P2Pネットワークライブラリにおけるスタックベースのバッファオーバーフローで、Nintendo Switch上でのリモートクラッシュと潜在的なRCE(リモートコード実行)を可能にします。

リポジトリを見る
6411年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
ウェブサイト
共有

Kart"LAN"Pwn (CVE-2024-45200)

マリオカート8 デラックスの「KartLANPwn」スタックベースバッファオーバーフロー脆弱性に関する情報と概念実証(PoC)
著者: Chad Hyatt

CVECVE-2024-45200
CVSS 3.1未確定 (任天堂.. は4.3/10と主張)
報奨金$512
H1レポート#2611669
発見日2024年7月2日
修正日2024年9月11日 (v3.0.3)
開示日2024年9月29日

目次

  • 背景情報
  • はじめに
    • LANプロトコル(ブラウズ応答パケット)
    • 「LAN_CopyAppData」疑似コード
  • 概念実証(PoC)
    • PoCのデモ
  • 最後に
  • クレジット
  • 報告のタイムライン
  • ライセンス

背景情報

KartLANPwnは、マリオカート8 デラックスにおける Pia P2Pネットワーキングライブラリの誤った使用に存在する脆弱性です。この脆弱性では、「CopyAppData」の各実装が、outバッファ自体よりも大きなoutBufSizeを指定して呼び出されることがあります。これにより、情報漏えいと組み合わせた場合、ピアの本体上でユーザーモードのリモートコード実行(RCE)に至る可能性があります。KartLANPwnは、PiaによるLAN/LDNマルチプレイおよびNEXオンラインマルチプレイの実装の使用に影響を与えます。

この脆弱性は、マリオカート8 デラックスのv3.0.1まで(中国/Tencent版ではv3.0.2まで)の全バージョンに影響します。特に、MK8DXのv3.0.1製品版における「LANプレイ」機能を介して実証されています。

2024年9月11日時点で、任天堂は中国を除く全地域向けにv3.0.3とともにKartLANPwnの修正を展開しました。2024年9月27日時点で、v3.0.3は中国向けにもリリースされています。私たちは任天堂の許可を得た上で、この情報を安全に開示しました。

はじめに

proprietary Piaネットワーキングライブラリは、ローカルまたはオンラインプレイに対応した任天堂製Nintendo Switchゲームで使用され、LAN/LDN(ローカルマルチプレイ)およびオンラインマルチプレイに使用されるNEXプロトコル向けのピアツーピアネットコード実装を提供します。

デモンストレーションのため、ここでは特にPiaのLANプロトコルに焦点を当てます。ルームホストの本体は、ローカルブロードキャストアドレス(255.255.255.255)の:30000でUDP「ディスカバリ」ソケットを開きます。同じネットワーク上の他の本体は、同じく:30000の自機のソケットから「ブラウズ要求」をルーターにアドバタイズし、同じネットワーク上の他のデバイスに転送してもらうことになっています。

ルームホスト(私たちの「サーバー」)は、ルームに関する情報(ホストの表示名、Miiデータ、プレイヤー数など)を含むはずの初期「ブラウズ応答」を返信します。ブラウズ応答パケット内では、outバッファにコピーされるアプリケーションデータの長さを最大150の値で制御できます。ただし、outの幅はわずか128バイトしかありません。これにより、スタックフレーム上の値(この特定のケースではpop {r4-r8, pc}用の値)をオーバーフローさせることが可能になります。

LANプロトコル(ブラウズ応答パケット)

少なくともMK8DXが使用しているPiaバージョンの場合、ここで注目しているLANのブラウズ応答パケットは次のように構築されます:

(すべてのint型はビッグエンディアンでエンコードされます)

インデックス疑似型説明
0u8パケットタイプ(0x1)
1u32セッション情報ボディのサイズ(このケースでは1266)
5(42 bytes)その他のセッション情報フィールド(今回の件には無関係)
47(0x180 bytes)アプリケーションデータ用領域の開始位置
431u32アプリケーションデータの長さ

残りのセッション情報も続きますが、KartLANPwn用のパケットを作成する上では重要ではありません

"LAN_CopyAppData" 疑似コード

デモンストレーション用に、以下は「CopyAppData」のLAN実装からの大まかな疑似コードです。この関数単体には本質的に問題はありませんが、(MK8DXの場合の)誤った使用方法により、packet内の入力アプリケーションデータでスタックフレームが上書きされる可能性があります。

(関数はMK8DX v3.0.1のmain内の+0xA0F8C0にあります)

root@kitploit:~
void LAN_CopyAppData(int* r0, int packet, int out, uint outBufSize) {
    int u1 = 68612;

    if (out != NULL) {
        // The actual length to read from the `packet` buffer at the start of our
        // application data (which our 'server' controls)
        uint appDataLength = *(uint *)(packet + 432);

        // In some cases, outBufSize is input as a larger number than the bounds of the
        // `out` buffer, which allows a stack buffer overflow (in our specific case, `*out`
        // is 128 bytes long, and outBufSize is 150!)
        if (appDataLength <= outBufSize) {
            memcpy(out, packet + 48, outBufSize); // packet[47], start of application data

            u1 = 0;
        }

        *r0 = u1;
        return;
    }

    *r0 = 68615;
    return;
}

概念実証(PoC)

kartlanpwn-poc.py を参照

Pythonで書かれたシンプルなPoCスクリプトを用意しました。これは偽のルームホストとして動作し、特別に細工された「ブラウズ応答」パケットをピアの本体に返信します。スクリプトを実行しているコンピューターと同じネットワーク上の本体からMK8DXで「LANプレイ」メニューを開くと、ゲームのプロセスがクラッシュします。

要件

  • 最新版のPython 3

GitHubからリポジトリのzipを直接ダウンロードするか、gitを使用してクローンします:

root@kitploit:~
git clone https://github.com/latte-soft/kartlanpwn.git && cd kartlanpwn
python3 kartlanpwn-poc.py

PoCのデモ

ビデオデモ(YouTube)をご覧ください:

YouTube - KartLANPwn Demonstration (CVE-2024-45200)

そして、ARMマニアの皆さん向けに、GDBでの結果として生じたプロセスのセグメンテーションフォルトのスクリーンショットをどうぞ:

GDB screenshot

最後に

バグ自体の詳細を解明するのには数日しかかかりませんでしたが、オーバーフローを実際に悪用するとなると? それはまったく別の厄介な問題です。Nintendo Switchカーネルのユーザーモードは決して甘くありません。可能な限りの隅々まで非常に厳格です。私たちはさまざまなアイデアや手がかりを交換し、試行錯誤しながら多くの時間を費やしましたが、最終的には真の(任意の)コード実行には至りませんでした。私たちの特定のケースでは、信頼性の高いROPでさえも実現はかなり難しそうでした。ネットワーク関連の関数のほぼすべてがクラスベースであり、さらに直接書き込みアクセスができたのはr4-r8だけだったからです。(*_thisよ、愛しい)さらに、事前の情報漏えいがなければ、mov r4, r0などをスキップして_thisポインターを制御することもあまり現実的ではありません。楽しい作業でした!

報告に関して言えば、今回は報告から開示まで、任天堂のトリアージも含めて実際には比較的スムーズなプロセスでした。報奨金の**$512**は私の予想よりはるかに少なかったですが(いつもそうでしょう?)、「任天堂の忍者」が私の家のドアに現れるよりはましです……

任天堂は、Wii、3DS、さらにはWii Uの単純だった時代から、間違いなく教訓を学んでいます。彼らはしっかりと研究しています。Switch上でユーザーモードからのサービス拒否(DoS)クラッシュ以外のいかなる種類の悪用も、ほぼ成功させることは不可能です。ASLR、強制されたNo-eXecuteページ(実行可能なメモリページに直接書き込むことはできず、ゲームはJITのために専用のシステムモジュールを使用する必要があります!)、ROPが不可能であること、その他にも多くの痛点があります。(改造シーンがすぐにこの言葉を覆してくれるのを待っています…) 一方で、この数ヶ月で、まったく新しいプラットフォームとアーキテクチャ(少なくとも私にとっては)について、非常に短い時間でたくさん学ぶことができました。KartLANPwnで一緒に仕事ができた素晴らしい人々は言うまでもありません!(Pabloとfishguy、ありがとう 😄)

クレジット

  • 発見者: Chad Hyatt
  • 多大な協力と心からの感謝: PabloMK7, fishguy6564
  • 精神的サポート 🙃: Justus, Sky

報告のタイムライン

日付情報
2024/07/18HackerOne経由で任天堂に報告書を提出
2024/07/31報告が社内でトリアージされる
2024/09/11中国を除く全地域向けに、マリオカート8 デラックスv3.0.3とともに修正がリリースされる
2024/09/12任天堂から報奨金が支払われる
2024/09/12他の研究者が、v3.0.3のバイナリ差分(bindiff)で「ゲームのネットコードのセキュリティ上の欠陥」の修正をかなり素早く発見
2024/09/27中国地域向けにマリオカート8 デラックスv3.0.3がリリースされる
2024/09/29任天堂が開示を許可し、このリポジトリが公開される
2024/09/30NVDがCVE-2024-45200を公開

ライセンス

CC BY 4.0

KartLANPwn © 2024 はCC BY 4.0の下でライセンスされています。
このライセンスのコピーを表示するには、https://creativecommons.org/licenses/by/4.0/ にアクセスしてください。


Evil LAN-play error..
ツールをダウンロード