
Легковесный Python-сканер для CVE-2023-48795 — уязвимости SSH Terrapin Prefix Truncation.
Terrapin — это уязвимость на уровне протокола SSH, которая позволяет атакующему, выполняющему активную MitM-атаку, усекать согласованную информацию о расширениях, снижая безопасность соединения — наиболее критично отключая
ext-info(используется для серверных алгоритмов подписи) иping(используется расширением OpenSSHno-auth).
| Поле | Детали |
|---|---|
| CVE | CVE-2023-48795 |
| CVSS | 5.9 (Medium) |
| Тип | Протокол SSH — усечение префикса / обход целостности |
| Раскрытие | Декабрь 2023 |
| Затронуты | OpenSSH < 9.6, PuTTY < 0.80, libssh < 0.10.6 и многие другие |
| Ссылки | terrapin-attack.com |
Уязвимость существует из-за того, что определённые комбинации шифров/MAC в SSH — а именно chacha20-poly1305 и шифры CBC-режима с Encrypt-then-MAC — позволяют активному MitM-атакующему внедрять и удалять порядковые номера SSH во время рукопожатия, усекая согласованные данные расширений без обнаружения.
Исправление вводит строгое расширение 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
Скрипт помечает хост как VULNERABLE, если выполняется любое из следующих условий, и расширение strict-KEX не объявлено:
Сервер объявляет [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] и варианты
Если сервер объявляет [email protected] в своём списке алгоритмов KEX, соединение защищено независимо от того, какие шифры и MAC предлагаются. В этом случае скрипт сообщит MITIGATED, а не VULNERABLE.
| Действие |
|---|
# /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
MACs hmac-sha2-256,hmac-sha2-512
Удаление алгоритмов снижает гибкость шифров. Обновление всегда является предпочтительным способом устранения.
Этот инструмент предназначен только для авторизованных оценок безопасности. Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Автор не несёт ответственности за неправомерное использование.
Часть набора инструментов для пентеста Mr-Whiskerss.
| Детали |
|---|
| Обновить OpenSSH | Обновитесь до ≥ 9.6 и на клиенте, и на сервере. Strict KEX включён по умолчанию. |
| Обновить другие реализации | PuTTY ≥ 0.80, libssh ≥ 0.10.6, Paramiko ≥ 3.4.0, AsyncSSH ≥ 2.14.2 |
| Удалить уязвимые алгоритмы | Если обновление невозможно немедленно, удалите chacha20-poly1305 и CBC-шифры + ETM MAC из sshd_config: |