サイトアイコン 大人のためのゲーム講座

DNSクライアントの脆弱性を利用したexploit DNSpresso by GaryOderNichts

GaryOderNichts氏が、Nintendo Wii Uで利用しているDNSクライアントの脆弱性を利用したカーネルexploit DNSpressoをリリースしていました。

GaryOderNichts氏が発表したDNSpressoはWii Uで有効なカーネルexploitです。Wii U関連なのでカフェライクな名称となりました。

DNSpressoはWii Uが利用しているDNSクライアントのネットワークスタックに存在していた脆弱性です。DNSはドメイン名のIPアドレスを決定するために使用されるドメインネームサーバーのことです。

Wii Uで利用しているネットワークスタック(複数のスイッチングハブを論理的に1台のスイッチングハブとして動作させる技術)は、InterNiche社によって開発されたNicheStackベースです。脆弱性は2年前に公表された、リモートコード実行につながる可能性のあるヒープバッファオーバーフローです。

JVN(Japan Vulnerability Notes)によると、2021年8月にCVE-2020-25928の識別子が与えられた、DNSpressoで利用している脆弱性は以下のようなものです。

NicheStackはInterNiche社(現在は HCC Embedded 社が保有)が開発した、産業向け制御システムで広く用いられているTCP/IPプロトコルスタックです。NicheStackに複数の脆弱性が発見されました。これらの脆弱性を悪用されることにより、遠隔の第三者からリモートコード実行やサービス妨害(DoS)、情報漏えい等の被害が生じる可能性があります。発見者はこれらの脆弱性を「INFRA:HALT」と呼称しています。

改変したDNSパケットを送信すると固定サイズのバッファにロードされますが、実際のサイズはチェックされないためバッファオーバーフローを引き起こしレコードデータを上書きします。NicheStackベースと言っているのは、その脆弱性部分がCVE-2020-25928として公表される前に修正されていたから(任天堂が気がついて修正した?)です。

そもそもWii UでInterNiche社のNicheStackが使われていることは知られていませんでしたが、GaryOderNichts氏はWii Uのネットワークスタックをリバースしていたときに、それがInterNiche社のNicheStackベースであることに気が付いたそうです。そこで脆弱性の存在を知り、それをヒントに色々試してみたところ、修正が不完全だったことからカーネルexploitを発見したということでした。

このカーネルexploitを実行するためにTCPでサーバーからカーネルexploitを実行するROPチェーン(Return-Oriented Programmingの略で、セキュリティが存在する中でコードを実行できるようにするプログラムを一連動作できるようチェーン化したもの)を受信することで脆弱性によりカーネルコードが実行できるようになります。

使い方は以下です。

1) https://aroma.foryour.cafe/からWii UでHomebrewを起動できる環境を構築するAromaをダウンロードしてSDカードにコピーする

2) Wii U向けのスタンドアロンpayload.elfローダーPayloadFromRPXなど起動させたいPRXファイルをlaunch.rpxとリネームしてSDカードのルートにコピーする

3) Wii Uメニューの[本体設定]→[インターネット]→[インターネットに接続する]で新しく接続先を作成する(推奨)
 (X)ボタン[接続先の一覧]で新規作成した接続先を選び、設定変更で
DNSを[自動取得しない]
プライマリーDNSに85.215.57.182を入力し[決定]を押す

4) (B)もどるを押して接続テストを行う

5) Wii Uが接続テストを開始し、数秒後にフリーズしたあと数秒待つと、DNSpressoスプラッシュ画面が表示され、launch.rpxが起動する

モバイルバージョンを終了