
一个用于检测 CVE-2023-48795 的轻量级 Python 扫描器——SSH Terrapin 前缀截断漏洞。
Terrapin 是 SSH 中的一个协议级漏洞,允许主动中间人(MitM)攻击者截断协商后的扩展信息,从而降低连接安全性——最严重的情况下会禁用
ext-info(用于服务器签名算法)和ping(用于 OpenSSH 的no-auth扩展)。
| 字段 | 详情 |
|---|---|
| CVE | CVE-2023-48795 |
| CVSS | 5.9(中危) |
| 类型 | SSH 协议——前缀截断 / 完整性绕过 |
| 披露时间 | 2023 年 12 月 |
| 影响范围 | OpenSSH < 9.6、PuTTY < 0.80、libssh < 0.10.6 及众多其他实现 |
| 参考资料 | terrapin-attack.com |
该漏洞的存在是因为某些 SSH 加密算法/MAC 组合——特别是 chacha20-poly1305 以及使用 Encrypt-then-MAC 的 CBC 模式加密算法——允许主动 MitM 攻击者在握手期间注入和删除 SSH 序列号,从而在不被发现的情况下截断协商后的扩展数据。
修复方案引入了一个 strict KEX 扩展(kex-strict-*[email protected]),客户端和服务器都必须通告该扩展才能免受此漏洞影响。
该脚本仅执行被动的横幅抓取和 KEXINIT 解析——不进行完整的 SSH 握手,不进行身份验证,也不进行漏洞利用:
SSH_MSG_KEXINIT 数据包由于检查完全发生在密钥交换阶段,因此它是非侵入性的,除了正常的 TCP 连接尝试外不会留下任何有意义的痕迹。
socket、struct、argparse、concurrent.futures)git clone https://github.com/Mr-Whiskerss/terrapin_check
cd terrapin_check
chmod +x terrapin_check.py
python3 terrapin_check.py <host> [port]
python3 terrapin_check.py 192.168.1.10
python3 terrapin_check.py 192.168.1.10 2222
每行一个目标——支持 host 或 host:port 格式。
python3 terrapin_check.py -f targets.txt
python3 terrapin_check.py -f targets.txt --threads 20 --timeout 3
python3 terrapin_check.py -f targets.txt --summary
usage: terrapin_check.py [-h] [-f FILE] [-p PORT] [--threads THREADS] [--timeout TIMEOUT] [--summary] [host] [port]
positional arguments:
host Target host
port SSH port (default: 22)
options:
-h, --help Show this help message and exit
-f, --file FILE File containing hosts (host or host:port per line)
-p, --port-flag PORT Default port when using -f (default: 22)
--threads THREADS Concurrent threads for bulk scan (default: 10)
--timeout TIMEOUT Socket timeout in seconds (default: 5.0)
--summary Print one-line summary per host only
| 退出码 | 含义 |
|---|---|
0 | 未发现存在漏洞的主机 |
1 | 检测到一个或多个存在漏洞的主机 |
这使脚本可以无缝地用于管道和自动化工作流中。
────────────────────────────────────────────────────────────
Target : 192.168.1.10:22
Banner : SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
Status : VULNERABLE
Strict-KEX : No
✗ ChaCha20-Poly1305 advertised → prefix-truncation possible
✗ CBC+ETM combination advertised
CBC ciphers : aes128-cbc, aes256-cbc
ETM MACs : [email protected], [email protected]
KEX algorithms:
curve25519-sha256
ecdh-sha2-nistp256
diffie-hellman-group14-sha256
────────────────────────────────────────────────────────────
[VULN] 192.168.1.10:22 VULNERABLE (CVE-2023-48795)
[SAFE] 192.168.1.20:22 Not vulnerable
[MIT] 192.168.1.30:22 Algorithms present but strict-KEX mitigates
[?] 192.168.1.99:22 ERROR: Connection refused
如果满足以下任一条件,且服务器未通告 strict-KEX 扩展,脚本会将主机标记为 VULNERABLE(存在漏洞):
服务器在任一加密方向上通告了 [email protected]。
服务器同时通告了任意 CBC 模式加密算法和任意 ETM MAC:
检查的 CBC 加密算法:
aes128-cbc, aes192-cbc, aes256-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, idea-cbc, arcfour, arcfour128, arcfour256, [email protected]
检查的 ETM MAC:
[email protected], [email protected], [email protected], [email protected] 及其变体
如果服务器在其 KEX 算法列表中通告了 [email protected],则无论提供哪些加密算法和 MAC,连接都会受到保护。在这种情况下,脚本将报告 MITIGATED(已缓解)而非 VULNERABLE。
| 操作 | 详情 |
|---|---|
| 升级 OpenSSH | 在客户端和服务端均升级至 。Strict KEX 默认启用。 |
# /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
MACs hmac-sha2-256,hmac-sha2-512
移除算法会降低加密套件的灵活性。升级始终是首选的修复方式。
本工具仅供已获授权的安全评估使用。请仅针对您拥有或已获得明确书面许可的系统进行测试。作者对滥用行为不承担任何责任。
属于 Mr-Whiskerss 渗透测试工具包的一部分。
| 修补其他实现 | PuTTY ≥ 0.80、libssh ≥ 0.10.6、Paramiko ≥ 3.4.0、AsyncSSH ≥ 2.14.2 |
| 移除易受攻击的算法 | 如果无法立即升级,请从 sshd_config 中移除 chacha20-poly1305、CBC 加密算法及 ETM MAC: |