以前からPS Vitaのネイティブハックとして紹介していたWebkit exploitのPoC(日本語では概念実証と訳される、Proof of Conceptの略。試験的な段階)がついに公開されました。
Vitaハックと言えばPSP時代のノウハウの継続で実現してきたePSP(PSPエミュレータ)でのバックアップ起動(TN-V)やHomebrew起動(VHBL)が主流でした。それはPS Vita本来の性能を活用できるハッキングではなかったため、長い間ネイティブハックは待望の存在だったと言えます。
そのネイティブハックであるWebkit exploitの現状と歴史についてまとめてみました。参考にしたのは下記の記事です。
[lolhax.org] PSVita Webkit Exploit – Information and Credits
[wololo.net]Vita hack: Davee releases a Vita Native exploit through Webkit (but there might be a catch)
[wololo/net]Vita hack: Proof of concept code updated to support up to firmare 3.18, and credits
WebKit(ウェブキット)はオープンソースのウェブブラウザレンダリングエンジンで、MacのSafariなどにも使われています。オープンソースのためPS Vitaをはじめ多様なプラットフォームへ移植されています。そのWebKitに存在する脆弱性を利用するものがPS Vitaのネイティブハックと呼ばれています。
PoCは3.18向けに公開されることが公にされていたものです。3.18までの動作が確認できていたWebkit exploitですが、ソニーが次のアップデートでexploitを潰してくるという情報があったことからexploitが動作する最後のファームウェアバージョンである3.18向けリリースとして予告されていました。
事実、3.30では対策されてしまっていたことが既に明らかになっています。
このネイティブハックには数多くのハッカーが注目しており、過去にPSPシーンで活躍したDavee氏もその一人です。過去のWebkit exploit関連の話で名前が出てきたCodeLion氏をはじめ、Josh_Axey氏やArchaemic氏も取り組んでいたそうです。
最初にDavee氏が作った、Webkit exploitを利用してVitaで実行する自作コードは2.60にしか対応していませんでした。2年前から開発を続けていたそうです。海外でVitaが発売されてから半年後あたりからになりますね。
3.18へ対応させたのはCodeLion氏で、「Davee氏みたいなセクシーでエレガントななコードには遠く及ばないけれど3.18で動くよ」とツイートしています。
https://t.co/28rPNAuE3b
not nearly as sexy as davee's code, or as elegant, but executes a 1 gadget ROP on 3.18— numbers (@spookynumbers) October 19, 2014
さて、実際にPoCのWebkit exploitはどのような動作をするのでしょうか。Vitaのブラウザを使って下記のリンクへアクセスしてみてください。
http://wololo.net/v/webkit/vita.htm
実際に我が家には3.18と3.30のVitaがありましたので、試してみました。
3.30はエラーですね。3.18では”Found webkit at:81b006b8″と表示されました。
ソースコードを見てみると、3.18の場合
alert("Found webkit at:" + webkit_top.toString(16));
でSceWebKitの関数のアドレスを取得して表示しているようです。
コードはその後にも実行されるものがあり、条件を満たすと
alert("Congrats, this vita is vulnerable\n");
break;
が実行されて画面に”Congrats, this vita is vulnerable”と表示されることになっています。
Congrats, this vita is vulnerableと表示されるVitaも存在するようですので、私の3.18 Vitaは「おめでとう」には届かなかったことになります。
現時点ではPoCですので実用的なexploitにはなっていません。ネイティブハックはまだ始まったばかりですので今後の進展に期待が集りそうです。
[追記]
暫く待つとCongrats, this vita is vulnerableと表示されるとのコメントを頂き、「固まったじゃん」と思い込んでブラウザ強制終了していたのを反省。OKを押して1分程放置したらCongrats, this vita is vulnerableと表示されました。
[追記2]
Davee氏によると、待たされるのは仕様だったようです。
boys, the exploit test can take a few minutes to work. Be patient
— Davee (@DaveeFTW) October 19, 2014
みんな、このexploitは起動に時間がかかるんだよ。動くまで待っててね。