Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2021-3156-Project — CVE-2021-3156 (Baron Samedit) 向けの教育用ラボ環境。Docker化された脆弱なsudoターゲット、エクスプロイトスキャフォールド、カナリアテスト、根本原因分析、パッチ適用済みバージョンとの比較を備えています。 | Kitploit
ツール/GitHubGitHub/shams-ul-mehmood/cve-2021-3156-project
特権昇格脆弱性分析エクスプロイト学習と教育バイナリエクスプロイトラボと実践
GitHubshams-ul-mehmood/cve-2021-3156-project

CVE-2021-3156-Project

CVE-2021-3156 (Baron Samedit) 向けの教育用ラボ環境。Docker化された脆弱なsudoターゲット、エクスプロイトスキャフォールド、カナリアテスト、根本原因分析、パッチ適用済みバージョンとの比較を備えています。

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る
12日前未レビュー

CVE-2021-3156 — Baron Samedit

sudo のヒープベースのバッファオーバーフロー → ローカル権限昇格

ITSOLERA サイバーセキュリティ部門 | レッドチームインターンシップ 2026


root@kitploit:~
  ██████╗  █████╗ ██████╗  ██████╗ ███╗   ██╗    ███████╗ █████╗ ███╗   ███╗███████╗██████╗ ██╗████████╗
  ██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗  ██║    ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
  ██████╔╝███████║██████╔╝██║   ██║██╔██╗ ██║    ███████╗███████║██╔████╔██║█████╗  ██║  ██║██║   ██║
  ██╔══██╗██╔══██║██╔══██╗██║   ██║██║╚██╗██║    ╚════██║██╔══██║██║╚██╔╝██║██╔══╝  ██║  ██║██║   ██║
  ██████╔╝██║  ██║██║  ██║╚██████╔╝██║ ╚████║    ███████║██║  ██║██║ ╚═╝ ██║███████╗██████╔╝██║   ██║
  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝    ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝╚═════╝ ╚═╝   ╚═╝

⚠️ 教育目的 / 隔離ラボ専用 すべてのテストは Docker ラボコンテナ内でのみ実施してください。 実システム、本番環境、共有システムに対しては実行しないでください。


目次

  1. CVE 概要
  2. この CVE の特異性
  3. プロジェクト構成
  4. チーム成果物
  5. クイックスタート
  6. エクスプロイトの仕組み
  7. 脆弱性カナリアテスト
  8. exploit.py の使い方
  9. ラボのリセットとスナップショット
  10. パッチ適用済み vs 脆弱な状態の比較
  11. 参考資料

CVE 概要


この CVE の特異性

重要な洞察: オーバーフローは引数を解析する関数である set_cmnd() 内で発生し、これは sudo が /etc/sudoers を参照する前に実行されます。10秒前に作成された権限ゼロのアカウントでもこれを悪用できます。


プロジェクト構成

root@kitploit:~
CVE-2021-3156-Project/
│
├── README.md                        ← you are here
│
├── lab/                             ← Member 1: Lab Environment
│   ├── Dockerfile                   ← Ubuntu 20.04 + sudo 1.8.31 (pinned)
│   ├── docker-compose.yml           ← vulnerable target + patched reference
│   ├── evidence_helper.sh           ← pre/post-exploit state capture
│   ├── SETUP.md                     ← step-by-step VM/Docker guide
│   └── config_notes.md              ← CVE conditions & container details
│
├── exploit/                         ← Member 2: Exploit Development
│   ├── exploit.py                   ← Python LPE framework + canary test
│   └── payloads.txt                 ← heap overflow research notes
│
├── docs/                            ← Member 3: Research & Documentation
│   ├── root_cause_analysis.md       ← set_cmnd() deep dive + off-by-one
│   ├── references.md                ← all sources, PoCs, CWE mapping
│   └── mitigation.md                ← sudo upgrade + hardening checklist
│
├── proof/                           ← Member 4: Evidence Collection
│   ├── screenshots/                 ← exploitation screenshots
│   └── terminal_logs.txt            ← command output template + logs
│
└── report/
    └── CVE-2021-3156_Report.docx    ← Member 4: Final professional report

チーム成果物

メンバー1 — ラボ環境と CVE 検証

メンバー2 — エクスプロイト開発(PoC スクリプト)

注記: 倫理ガイドラインに基づき、動作するカーネル/ヒープエクスプロイトコードは含まれていません。 exploit.py の TODO スタブは、チームで学習・統合するための権威ある公開 PoC として https://github.com/blasty/CVE-2021-3156 と https://github.com/worawit/CVE-2021-3156 を参照しています。

メンバー3 — 根本原因分析と調査

ファイル説明
docs/root_cause_analysis.md詳細: set_cmnd() のサイズ計算とコピー量の不一致、コード例付きのオフバイワン、パッチ差分、エクスプロイトチェーン、CVSS 7.8 のメトリクス別分析、10年間のタイムライン、ディストリビューションへの影響テーブル

メンバー4 — エビデンス収集、レポート作成、統合

ファイル説明
proof/terminal_logs.txtエビデンス収集テンプレート(実際のラボ出力を記入)
proof/screenshots/必須の7枚のスクリーンショット用ディレクトリ
report/CVE-2021-3156_Report.docx12セクション構成のプロフェッショナルレポート: 表紙、エグゼクティブサマリー、CVE の説明、根本原因分析、CVSS の内訳、悪用手順、コード解説、エビデンスチェックリスト、緩和策、タイムライン、参考資料、免責事項

クイックスタート

1. ラボのビルドと起動

root@kitploit:~
cd CVE-2021-3156-Project/lab/

# Build the vulnerable image (downloads Ubuntu 20.04, pins sudo 1.8.31)
docker compose build

# Start both containers
docker compose up -d

# Confirm containers are running
docker compose ps

期待される出力:

root@kitploit:~
NAME                      STATUS
baron_samedit_target      running
baron_samedit_patched     running

2. 脆弱なコンテナに入る

root@kitploit:~
docker exec -it baron_samedit_target bash

3. 脆弱性の条件を確認する

root@kitploit:~
# Inside the container as labuser

whoami                         # Expected: labuser
id                             # Expected: uid=1000(labuser)...
sudo --version                 # Expected: Sudo version 1.8.31
sudo -l                        # Expected: Sorry, user labuser may not run sudo...
sudoedit -s '\' 2>&1          # Expected: NOT "usage:" → VULNERABLE

4. エクスプロイトをコピーして実行する

root@kitploit:~
# From host machine
docker cp exploit/exploit.py baron_samedit_target:/home/labuser/

# Inside container
python3 exploit.py --check-only      # verify all prerequisites pass
python3 exploit.py --safe-mode       # canary only, no exploitation
python3 exploit.py --cmd "id"        # LPE → show root identity
python3 exploit.py --cmd "whoami /all" --output /tmp/proof.txt

5. エビデンスを収集する

root@kitploit:~
# Inside container — before exploit
~/evidence_helper.sh > /tmp/before.txt

# After exploit
~/evidence_helper.sh > /tmp/after.txt

# Copy to host
docker cp baron_samedit_target:/tmp/before.txt proof/terminal_logs_before.txt
docker cp baron_samedit_target:/tmp/after.txt  proof/terminal_logs_after.txt

エクスプロイトの仕組み

root@kitploit:~
Step 1: Run 'sudoedit -s <crafted_argument>'
        ↓
Step 2: sudo calls set_cmnd() to parse arguments in shell mode
        ↓
Step 3: set_cmnd() COUNTS bytes for the cmnd_args buffer (correct size)
        ↓
Step 4: set_cmnd() COPIES bytes — but reads 1 byte past the null
        terminator of any argument ending with '\'
        ↓
Step 5: Off-by-one overflow writes 1 unexpected byte beyond cmnd_args
        ↓
Step 6: Heap grooming (environment variable layout manipulation) ensures
        a valuable sudo struct sits adjacent to the overflowed buffer
        ↓
Step 7: The overflow byte corrupts a pointer in the adjacent struct
        ↓
Step 8: sudo follows the corrupted pointer → executes attacker-controlled
        command (via SUDO_EDITOR) with root privileges
        ↓
Result: uid=0(root) — from a user with ZERO sudo permissions

根本原因を一言でいうと

root@kitploit:~
size_calculation("A\") = 2 bytes  ≠  copy("A\") = writes 3 bytes → overflow

脆弱性カナリアテスト

CVE-2021-3156 の存在を確認する最も安全な方法です — 悪用は一切不要:

root@kitploit:~
sudoedit -s '\' 2>&1; echo "Exit: $?"

exploit.py の使い方

root@kitploit:~
Usage: python3 exploit.py [OPTIONS]

Modes (mutually exclusive):
  --check-only        Run all pre-checks only — no exploitation
  --safe-mode         Run canary test only — confirm vulnerability
  --cmd COMMAND       Execute COMMAND as root after successful LPE

Options:
  --verbose, -v       Show detailed heap/system debug output
  --output, -o FILE   Save all output to FILE
  --no-colour         Disable ANSI colour codes (for log files)
  --help              Show this help message

Examples:
  python3 exploit.py --check-only
  python3 exploit.py --safe-mode
  python3 exploit.py --cmd "id"
  python3 exploit.py --cmd "cat /etc/shadow" --output proof/root_output.txt
  python3 exploit.py --cmd "whoami" --verbose

実行される事前チェック


ラボのリセットとスナップショット

クイックリセット(コンテナは維持し、一時ファイルを削除)

root@kitploit:~
docker exec baron_samedit_target bash -c "rm -f /tmp/*.txt /tmp/exploit* /home/labuser/exploit.py"

スナップショットを保存

root@kitploit:~
docker commit baron_samedit_target baron-samedit:clean-state
echo "[+] Snapshot saved as baron-samedit:clean-state"

スナップショットを復元

root@kitploit:~
docker compose down
docker run -it --name baron_samedit_target baron-samedit:clean-state bash

完全リセット(ゼロから再ビルド)

root@kitploit:~
docker compose down -v
docker compose up -d --build

パッチ適用済み vs 脆弱な状態の比較

パッチ適用済みコンテナでテストする場合:

root@kitploit:~
docker exec -it baron_samedit_patched bash
# Then repeat the canary test — should output "invalid argument"

参考資料


倫理上の注意

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│  This project was created for EDUCATIONAL PURPOSES ONLY as      │
│  part of the ITSOLERA Cybersecurity Red Team Internship 2026.   │
│                                                                 │
│  ✅ DO:  Use against the isolated Docker lab only               │
│  ✅ DO:  Study the vulnerability to understand heap exploits    │
│  ✅ DO:  Contribute findings to the team report                 │
│                                                                 │
│  ❌ DON'T: Run against any real system, VM, or cloud instance   │
│  ❌ DON'T: Share outside the internship programme               │
│  ❌ DON'T: Use for any unauthorised access                      │
└─────────────────────────────────────────────────────────────────┘

ITSOLERA サイバーセキュリティ部門 — レッドチームインターンシップ、2026年夏

ツールをダウンロード
プロパティ値
CVE IDCVE-2021-3156
ニックネームBaron Samedit
タイプヒープベースのバッファオーバーフロー → ローカル権限昇格
コンポーネントsudo — Linux 特権ユーティリティ(src/sudo.c 内の set_cmnd())
CVSS v3 スコア7.8 高
ベクターCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
脆弱なバージョンsudo 1.8.2 – 1.8.31p2 および 1.9.0 – 1.9.5p1
パッチ適用済みバージョンsudo 1.9.5p2(1.9 系)/ sudo 1.8.32(1.8 系)
ラボのターゲットバージョンUbuntu 20.04 上の sudo 1.8.31
パッチ KB / アドバイザリSA: https://www.sudo.ws/security/advisories/unescape_overflow/
発見者Qualys Research Team
公開日2021-01-26
実環境での存在期間(コード)〜2011-07-09(sudo 1.8.2)— 約10年間未検出
必要な認証ローカルユーザーのみ — sudo 権限は不要
プロパティCVE-2021-3156一般的な Sudo LPE
sudoers エントリが必要❌ 不要✅ 必要
sudo グループへの所属が必要❌ 不要✅ 必要
事前の sudo アクセスが必要❌ 不要✅ 必要
作成直後のユーザーアカウントで動作✅ 可能❌ 不可
権限システムの悪用❌ 完全に回避✅ 悪用する
攻撃対象領域引数パーサー(認証前)権限チェック
ファイル説明
lab/Dockerfilesudo 1.8.31 を固定した Ubuntu 20.04(脆弱); Python 3 インストール済み; sudo アクセス権のない labuser アカウント
lab/docker-compose.yml脆弱なターゲットとパッチ適用済みの Ubuntu 22.04 参照用コンテナをオーケストレーション
lab/evidence_helper.shエクスプロイト前後のシステム状態(ユーザー、sudo バージョン、カナリア)を取得する Bash スクリプト
lab/SETUP.mdステップバイステップ: ビルド → 起動 → 入室 → sudo バージョンの確認 → カナリア実行 → スナップショット
lab/config_notes.md設定ミスが不要な理由、Docker のセキュリティ設定、資格情報の参照を解説
ファイル説明
exploit/exploit.py完全な Python フレームワーク: check_platform()、check_sudo_version()、run_canary_test()、get_system_info() + blasty/worawit の PoC への詳細な参照付きの3つのエクスプロイト TODO スタブ(select_heap_strategy、build_overflow_argument、trigger_overflow_and_escalate)
exploit/payloads.txtヒープオーバーフローの概念、COMPRESSION_TRANSFORM 相当(引数構造)、3つのヒープ戦略、失敗試行のログテンプレート、検出シグネチャ
docs/references.mdQualys アドバイザリ、MITRE、NVD、sudo プロジェクト、blasty PoC、worawit PoC、ExploitDB、GTFOBins、CWE マッピング
docs/mitigation.mdapt-get install --only-upgrade sudo、検証用カナリア、AppArmor ハードニング、auditd 監視、ハードニングテーブル
出力意味
sudoedit: /\: not a regular file✅ 脆弱
Segmentation fault / Exit: 139✅ 脆弱(クラッシュ)
sudoedit: invalid argument❌ パッチ適用済み(1.9.5p2+)
usage: sudoedit ...❌ パッチ適用済み
チェック内容
プラットフォーム(Linux)Linux 上で実行されていることを確認
sudoedit の存在PATH 内の sudoedit を検出
sudo バージョン脆弱な範囲(1.8.2–1.8.31p2、1.9.0–1.9.5p1)と比較
既に root でないことUID ≠ 0 であることを確認(LPE の意味が成立)
システム情報ヒープ戦略のため glibc バージョンとアーキテクチャを収集
脆弱性カナリアsudoedit -s '\' を実行し、応答を分類
テスト脆弱(sudo 1.8.31)パッチ適用済み(sudo 1.9.5p2+)
sudo --versionSudo version 1.8.31Sudo version 1.9.x
sudoedit -s '\'not a regular file またはセグメンテーションフォールトinvalid argument
exploit.py --safe-modeカナリア: PASS → 脆弱カナリア: FAIL → パッチ適用済み
exploit.py --cmd iduid=0(root)チェック段階で失敗
パッチの有無KB 未適用パッチ適用済み
ソースURL
Qualys アドバイザリhttps://blog.qualys.com/vulnerabilities-threat-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3156
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2021-3156
sudo アドバイザリhttps://www.sudo.ws/security/advisories/unescape_overflow/
blasty PoChttps://github.com/blasty/CVE-2021-3156
worawit PoChttps://github.com/worawit/CVE-2021-3156
ExploitDB #49521https://www.exploit-db.com/exploits/49521
Rapid7 Metasploithttps://www.rapid7.com/db/modules/exploit/linux/local/sudo_baron_samedit/
GTFOBins — sudohttps://gtfobins.github.io/gtfobins/sudo/