
GNU InetUtils telnetd(CVE-2026-32746)における事前認証バッファオーバーフローの概念実証エクスプロイト。Dockerラボ環境と、認可されたセキュリティテスト用の検出スクリプトを含みます。
GNU InetUtils telnetd の LINEMODE SLC(Set Local Characters)ハンドラにおけるバッファオーバーフローによる、認証前のリモートコード実行。
CVSS 3.1: 9.8(Critical) | CWE: CWE-120、CWE-787
telnetd/slc.c の add_slc() 関数は、SLC トリプレットごとに 3 バイトを固定 108 バイトのバッファ(slcbuf)に境界チェックなしで追加します。認証されていない攻撃者は、ログインプロンプトが表示される前のオプション交渉中に、40 以上のトリプレット(関数コード > 18/NSLC)を含む細工された SLC サブオプションを送信することで、バッファをオーバーフローさせ、BSS 内の slcptr ポインタを破壊し、end_slc() が破壊されたポインタを使用する際に任意書き込みを達成できます。
# 脆弱なラボ環境を構築
docker compose up -d
# 検出(非破壊的)
python3 detect.py 127.0.0.1 2323
# エクスプロイト(telnetd をクラッシュ - 脆弱性を確認)
python3 exploit.py 127.0.0.1 2323
# クリーンアップ
docker compose down
Docker セットアップは、xinetd 配下で inetutils-telnetd 2.4 を実行する Debian コンテナをポート 2323 で公開します。完全に分離されており、ホストには一切影響しません。
WILL LINEMODE を積極的に送信し、LINEMODE 交渉をトリガーするDO LINEMODE で応答し、SLC サブオプション処理を開始するadd_slc() が各トリプレットに対して「未サポート」応答(3 バイト)を 104 バイトのバッファにキューイングするslcptr と隣接する BSS データを破壊するend_slc() が破壊された slcptr を介してサブオプション終了マーカーを書き込む(任意書き込み)| ファイル | 説明 |
|---|---|
exploit.py | PoC クラッシュ/DoS エクスプロイト |
Dockerfile | 脆弱な telnetd ラボ |
docker-compose.yml | ワンコマンドのラボセットアップ |
xinetd-telnet.conf | xinetd サービス設定 |
detect.py | 非破壊的なバージョン検出スクリプト |
DoS を超えるには、以下が必要になります:
slcbuf → slcptr オフセット)slcptr を介して end_slc() が書き込む値を制御するこのツールは、許可されたセキュリティテストおよび教育目的のみで提供されています。所有していないシステム、または明示的なテスト許可がないシステムに対して使用しないでください。作者は誤用について一切責任を負いません。
MIT