
CVE-2026-32746 - GNU InetUtils telnetd LINEMODE SLC バッファオーバーフロー PoC (認証前RCE、CVSS 9.8)
GNU InetUtils の telnetd が備える LINEMODE SLC (Set Local Characters) ハンドラにおける事前認証バッファオーバーフロー。
CVSS 3.1: 9.8 (緊急) | CWE: CWE-120, CWE-787
telnetd/slc.c の add_slc() 関数は、境界チェックを行わずに、SLC トリプレットごとに 3 バイトを固定長 108 バイトのバッファ (slcbuf) へ追加します。認証されていない攻撃者は、オプション交渉中(ログインプロンプトの前)に、40 以上のトリプレット(関数コード > 18/NSLC)を含む細工された SLC サブオプションを送信し、バッファをオーバーフローさせて、slcptr ポインタと BSS 上の隣接データを破壊できます。
# Build the vulnerable lab environment
docker compose up -d
# Detect (non-destructive)
python3 detect.py 127.0.0.1 2323
# Exploit (triggers overflow, verifies via response)
python3 exploit.py 127.0.0.1 2323
# Clean up
docker compose down
Docker セットアップは、xinetd 配下で inetutils-telnetd 2.4 を実行する Debian コンテナをポート 2323 で公開します。完全に分離されており、ホストに影響を与えることはありません。
WILL LINEMODE を送信し、LINEMODE 交渉をトリガーしますDO LINEMODE で応答し、SLC サブオプション処理に入りますadd_slc() は、各トリプレットに対する "not supported" 応答(3 バイト)を 104 バイトのバッファにキューイングしますslcptr と隣接する BSS データを破壊しますend_slc() は、漏えいした BSS メモリをレスポンスに含め、slcbuf から破壊された slcptr の位置までのすべてを送信します| ファイル | 説明 |
|---|---|
exploit.py | レスポンスベースの検証を備えた PoC オーバーフロー |
Dockerfile | 脆弱な telnetd ラボ |
docker-compose.yml | ワンコマンドのラボセットアップ |
xinetd-telnet.conf | xinetd サービス設定 |
detect.py | 非破壊的なバージョン検出スクリプト |
バイト制約、アライメント手法、32 ビットシステムにおける def_slcbuf/free() プリミティブを含む詳細な悪用分析については、WatchTowr の解説 を参照してください。
このツールは、許可されたセキュリティテストおよび教育目的のみに提供されます。所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。作者は誤用について責任を負いません。
MIT