
CVE-2023-48795 — SSH Terrapin 접두사 잘림(prefix truncation) 취약점을 위한 경량 Python 스캐너입니다.
Terrapin은 SSH의 프로토콜 수준 취약점으로, 능동적 중간자(MitM) 공격자가 협상된 확장 정보를 잘라내 연결 보안을 낮출 수 있게 합니다. 가장 치명적인 영향은
ext-info(서버 서명 알고리즘에 사용)와ping(OpenSSH의no-auth확장에 사용)을 비활성화하는 것입니다.
| 필드 | 세부 내용 |
|---|---|
| CVE | CVE-2023-48795 |
| CVSS | 5.9 (Medium) |
| 유형 | 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 시퀀스 번호를 삽입·제거하여 감지되지 않은 채 협상된 확장 데이터를 잘라낼 수 있습니다.
이 문제를 해결하기 위해 도입된 엄격한 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과 관계없이 연결이 보호됩니다. 이 경우 스크립트는 VULNERABLE 대신 MITIGATED로 보고합니다.
| 조치 | 세부 내용 |
|---|---|
| OpenSSH 업그레이드 | 클라이언트와 서버 모두 ≥ 9.6으로 업그레이드합니다. Strict KEX는 기본적으로 활성화됩니다. |
| 기타 구현체 패치 | PuTTY ≥ 0.80, libssh ≥ 0.10.6, Paramiko ≥ 3.4.0, AsyncSSH ≥ 2.14.2 |
| 취약한 알고리즘 제거 | 즉시 업그레이드가 어려운 경우 sshd_config에서 chacha20-poly1305, CBC 암호 및 ETM MAC을 제거합니다. |
# /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
MACs hmac-sha2-256,hmac-sha2-512
알고리즘 제거는 암호 스위트(cypher agility)를 저하시킵니다. 업그레이드가 항상 선호되는 해결 방법입니다.
이 도구는 승인된 보안 평가용으로만 제작되었습니다. 소유한 시스템이나 명시적인 서면 허가를 받은 시스템에만 사용하십시오. 저자는 오용에 대해 어떠한 책임도 지지 않습니다.
Mr-Whiskerss 침투 테스트 툴킷의 일부.