CVE-2021-3156(Sudo Baron Samedit)
このリポジトリは、Linux x64 を対象とした CVE-2021-3156 のエクスプロイトです。解説記事については、https://datafarm-cybersecurity.medium.com/exploit-writeup-for-cve-2021-3156-sudo-baron-samedit-7a9a4282cb31 をご覧ください。
元のアドバイザリは Qualys の Braon Samedit によるものです。
ファイル
tcache 対応 glibc 向けエクスプロイト
- exploit_nss.py すべての要件と /etc/nsswitch.conf のエントリ数を自動検出します
- exploit_nss_manual.py エクスプロイトの理解を深めるための exploit_nss.py の簡易版
- exploit_timestamp_race.c def_timestamp を上書きし、競合状態を利用して /etc/passwd を変更します
tcache 非対応 glibc 向けエクスプロイト
- exploit_defaults_mailer.py struct defaults を上書きして mailer バイナリのパスを変更するエクスプロイトです。CentOS 6 や 7 のように、disable-root-mailer を指定せずに sudo がコンパイルされている必要があります。
- exploit_userspec.py struct userspec を上書きして認証をバイパスし、/etc/passwd に新しいユーザーを追加するエクスプロイトです。sudo バージョン 1.8.9〜1.8.23 のみ対応しています。
- exploit_cent7_userspec.py 理解を目的とした exploit_userspec.py の簡易版ですが、デフォルト設定の CentOS 7 のみを対象としています
- exploit_nss_d9.py Debian 9 で struct service_user を上書きしますが、デフォルトの /etc/nsswitch.conf のみ対応しています
- exploit_nss_u16.py Ubuntu 16.04 で struct service_user を上書きしますが、デフォルトの /etc/nsswitch.conf のみ対応しています
- exploit_nss_u14.py Ubuntu 14.04 で struct service_user を上書きしますが、デフォルトの /etc/nsswitch.conf のみ対応しています
その他
- asm/ Python エクスプロイトに埋め込むための tinyelf ライブラリと実行ファイル
- gdb/ sudo ヒープのデバッグに使用するスクリプト
エクスプロイトの選択
glibc が tcache をサポートし、有効になっている Linux ディストリビューション(CentOS 8、Ubuntu >= 17.10、Debian 10)の場合:
- まず exploit_nss.py を試してください
- エラーが glibc tcache に関連しない場合は、次に exploit_timestamp_race.c を試すことができます
glibc が tcache をサポートしていない Linux ディストリビューションの場合:
- 対象が Debian 9、Ubuntu 16.04、または Ubuntu 14.04 の場合は、まず特定のバージョン向けの exploit_nss_xxx.py を試してください
- 次に、exploit_defaults_mailer.py を試してください。対象の sudo が --disable-root-mailer 付きでコンパイルされていることがわかっている場合は、このエクスプロイトをスキップできます。このエクスプロイトは sudo バイナリから root mailer フラグを確認しようとします。ただし、一部の Linux ディストリビューションでは sudo の権限が 4711 (-rws--x--x) であり、対象システム上で確認することが不可能です。(動作が確認されている OS は CentOS 6 と 7 です)
- 最後に、exploit_userspec.py を試してください