
Linux の Sudo chroot を介した Root へのローカル権限昇格
Linux の Sudo chroot を介した root へのローカル権限昇格
ニュースはこちらで読めます:
TL;DR と CMIIW sudo は、コマンドを管理者/root として実行するためのコマンドです。ユーザーが sudoers グループに属している場合にのみ、sudo を実行できます。しかし、sudo バイナリには、通常ユーザーが sudo を実行する権限がなくても、root としてユーザーを切り替えられるようにするバグがあります。
そのバグは、sudo コマンドの --chroot オプションに存在する脆弱性です。この chroot は、一時的なディレクトリ内でコマンドを実行することを可能にします。問題は、sudo が、そのユーザーが sudo を実行できるかどうかを確認する前に、その一時ディレクトリ内の設定ファイルをチェックしてしまうことです。
この設定ファイルを何らかの方法で編集し、root アクセスを得るために改変されたコードへ誘導できれば、認証や sudoer への登録なしで root アクセスを取得できます。なぜなら、その情報を取得する過程で、システムはコマンドを (一時的に) root として昇格させるからです。
その設定ファイルとは何でしょうか? /etc/nsswithc.conf です。この設定ファイルは、システムが、例えばこのユーザーがどのグループに属しているかなどを把握するために使用されます。この nsswitch ファイルの中身はおおよそ次のようになります:
<database> <source1> <source2> ... <sourcen>
passwd files systemd
group files systemd
shadow files
gshadow files
...
さて! 使用されるデータソースが files の場合、nss は libnss_files.so.2 というライブラリを呼び出します。このファイルには C コードが含まれており、これを編集すると root アクセスを獲得できる可能性が非常に高くなります。なぜなら、コマンドが sudoers ユーザーによって実行されなくても、システムはこれを root として実行するからです。exploit.sh ファイルで確認できます。
まとめ:
/etc/nsswitch.conf を自分が制御するフォルダに作成する。