
sudo における CVE-2021-3156 ヒープベースバッファオーバーフローの悪用と緩和の分析
CVE-2021-3156 は、Baron Samedit として知られる sudo プログラムのヒープベースのバッファオーバーフロー脆弱性です。これにより、権限のないローカルユーザーが認証なしで脆弱なシステム上でroot 権限を取得できる可能性があります。
このプロジェクトは、ルクセンブルク大学のソフトウェア脆弱性:悪用と緩和コースの一環として、この脆弱性の完全な悪用と緩和を文書化したものです。
OS: Ubuntu 20.04.1
sudo version: 1.8.31-1ubuntu1 (vulnerable)
libc version: 2.31
User: Non-root account
脆弱な状態を再現するには:
sudo apt install sudo=1.8.31-1ubuntu1
この脆弱性は、内部のヒープバッファをオーバーフローさせる巧妙に細工されたコマンドライン引数を指定して sudo が sudoedit モードで実行されるときに発生します。
このエクスプロイトは、メモリ解析を通じて微調整された4つの重要なパラメータを使用します:
exploit_launcher.c — メインのエクスプロイト以下の5つのステップで脆弱性を引き起こします:
LC_ALL を細工sudoedit を呼び出すexploit_payload.c — 悪意のあるペイロードエクスプロイトが成功すると _init 関数を介して自動的に実行されます:
0(root)に設定$ make
$ ./exploit_it
[!] CVE-2021-3156 Exploit
[+] Target: Ubuntu 20.04.1 (sudo 1.8.31, libc-2.31)
[+] Parameters: A=56, B=54, Nulls=63, LC_ALL=212
[+] Launching exploit...
[+] Exploit successful. Root privileges obtained.
# whoami
root
✅ 権限のないユーザーから root への昇格に成功しました。
sudo をパッチ適用済みバージョンにアップグレードします:
sudo apt install sudo=1.8.31-1ubuntu1.5
アップグレード後、同じエクスプロイトは実行に失敗し、root 権限は付与されませんでした。これにより、パッチが有効であることが確認されました。
重要な教訓:
sudoのようなシステムユーティリティを最新の状態に保つことは、権限昇格攻撃を防ぐために不可欠です。
├── exploit_launcher.c # Main exploit triggering the heap overflow
├── exploit_payload.c # Malicious payload spawning root shell
├── libnss_X/ # Malicious library loaded during exploitation
└── Makefile # Build configuration
# Build
make
# Run exploit
./exploit_it
| プロパティ | 詳細 |
|---|
| CVE ID | CVE-2021-3156 |
| ニックネーム | Baron Samedit |
| タイプ | ヒープベースのバッファオーバーフロー |
| コンポーネント | sudo(sudoedit モード) |
| 影響 | root へのローカル権限昇格 |
| 影響を受けるバージョン | sudo ≤ 1.8.31(Ubuntu)、≤ 1.9.5p1(その他) |
| パッチ適用済みバージョン | sudo 1.8.31-1ubuntu1.5 |
| CVSS スコア | 7.8(高) |
| パラメータ | サイズ | 目的 |
|---|
A | 56 bytes | 最初のバッファをオーバーフローさせる |
B | 54 bytes | 2つ目のヒープチャンクをオーバーフローさせる |
Nulls | 63 bytes | 構造体のメモリ整列 |
LC_ALL | 212 bytes | 環境変数によるヒープレイアウトの制御 |