GaryOderNichts氏が、Nintendo Wii Uで利用しているDNSクライアントの脆弱性を利用したカーネルexploit DNSpressoをリリースしていました。
Ever wanted to exploit DNS response parsing on the Wii U? I have just released DNSpresso!
You can find the technical write-up here: https://t.co/owjUF1bKpv pic.twitter.com/dn1gCRFGX5— Gary (@GaryOderNichts) October 28, 2023
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が起動する