← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2023-48795 · CWE-354 · Disclosed 2023-12-18

The SSH transport protocol with certain OpenSSH extensions

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is someone peeling the tamper seal off the package in transit, not walking away with the package

CVE-2023-48795 is the SSH *Terrapin* prefix-truncation flaw: an on-path attacker can inject unauthenticated messages before encryption starts, then delete the same number right after NEWKEYS, causing SSH_MSG_EXT_INFO and related negotiation data to disappear. In OpenSSH, the named affected line is *before 9.6*, but the CVE is broader than OpenSSH and hits many SSH stacks and clients when they negotiate [email protected] or, for practical EtM abuse, CBC plus *[email protected].

The vendor's 5.9/MEDIUM score is defensible in a lab, but it overshoots enterprise patch urgency. The decisive friction is attacker position: this is not internet-scale unauthenticated exploitation, it is a live machine-in-the-middle attack against an SSH path, and in OpenSSH the practical impact is mostly security-feature downgrade rather than code execution, auth bypass, or plaintext recovery.

"Patch it, but don't break sprint plans: Terrapin needs MITM position and usually only strips SSH safety features"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Get on the SSH path with a MITM tool

The attacker first needs network position between client and server, using something like bettercap, ARP spoofing, a rogue AP, a malicious VPN/proxy hop, or compromised routing infrastructure. Without that position, CVE-2023-48795 is inert.
Conditions required:
  • Attacker can intercept and modify traffic between SSH client and server
  • Target uses SSH over a path the attacker can influence
Where this breaks in practice:
  • Requires pre-existing network control or local adjacency
  • Segmentation, private admin networks, bastions, and VPN pinning reduce reachable population sharply
  • Internet exposure alone is not enough; the attacker must sit *in the middle*
Detection/coverage: Traditional vuln scanners can flag support for affected algorithms, but they cannot prove a reachable MITM position. Network telemetry, rogue gateway detection, and ARP/DHCP anomaly monitoring matter more than host EDR here.
STEP 02

Proxy the handshake with the Terrapin PoC

Using the RUB-NDS proof-of-concept proxy from Terrapin-Artifacts, the attacker injects extra SSH_MSG_IGNORE packets before encryption begins. That manipulation is designed to desynchronize the implicit packet sequence state without immediately killing the session.
Conditions required:
  • A client starts a fresh SSH connection through the attacker
  • The attacker can transparently proxy both directions
Where this breaks in practice:
  • The attack only works during connection establishment, not against already-established sessions
  • Operationally noisy compared with passive sniffing
Detection/coverage: Packet-level IDS generally has poor semantic visibility into SSH handshake abuse. Researchers published PoCs, but mainstream security products mostly detect version/algorithm exposure, not exploitation.
STEP 03

Land on an affected cipher/MAC combination

The vulnerable path matters when [email protected] is negotiated, or when Encrypt-then-MAC is used and a CBC cipher makes practical exploitation viable. The research found broad support for affected modes, but support is not the same as successful, high-impact exploitation in a defended enterprise path.
Conditions required:
  • Client and server negotiate [email protected] or a practical CBC+EtM combination
  • Neither side enforces strict key exchange end to end
Where this breaks in practice:
  • If both sides support strict kex, the countermeasure blocks the core manipulation
  • AES-GCM and common CTR/EaM paths do not provide the same practical attack surface
  • Mixed estates with partial backports complicate attacker reliability
Detection/coverage: Good exposure tools like ssh-audit can identify absent kex-strict-* support and affected algorithms. Qualys and similar scanners can often identify support for vulnerable modes, but they still do not show exploit success.
STEP 04

Strip extension negotiation and weaken the session

The attacker deletes the post-NEWKEYS extension message, typically SSH_MSG_EXT_INFO, causing client and server to proceed without some negotiated protections. For OpenSSH, the release notes call out the main demonstrated impact: disabling a subset of the keystroke timing obfuscation features added in 9.5; the paper also discusses signature-downgrade side effects in some flows.
Conditions required:
  • Handshake manipulation succeeds without dropping the connection
  • The target implementation relies on the stripped extension data
Where this breaks in practice:
  • OpenSSH maintainers state there is no other discernable impact to session secrecy or session integrity
  • This is downgrade/feature suppression, not shell pop or memory corruption
  • The more damaging AsyncSSH outcomes were tracked under separate CVEs, not this one
Detection/coverage: Host logs rarely make this obvious. Validation is better done by checking for strict kex support and affected algorithm exposure than by waiting for exploitation artifacts.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo authoritative public source used here shows confirmed broad in-the-wild exploitation of CVE-2023-48795 itself. A CISA ICS advisory states there was no known public exploitation reported to CISA at publication time.
KEV statusNot listed in the CISA Known Exploited Vulnerabilities Catalog at review time.
PoC availabilityYes — the Ruhr University Bochum researchers published RUB-NDS/Terrapin-Artifacts, including proof-of-concept MITM proxies and scan artifacts.
EPSSUser-supplied EPSS is 0.54214. Public mirrors currently place it around the 98th percentile; that says *attempts are plausible*, not that enterprise impact is automatically urgent.
CVSS vector reality checkCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N is already pulled down by High Attack Complexity, but CVSS still misses the biggest real-world friction: live MITM position on an SSH path.
Affected versionsOpenSSH is affected before 9.6; the CVE also spans many other SSH clients, servers, and libraries including PuTTY, libssh, libssh2, Paramiko, AsyncSSH, WinSCP, SFTPGo, and others as tracked by NVD/MITRE.
Fixed versionsUpstream OpenSSH fixed this in 9.6 via strict key exchange. Distro backports matter: for example Ubuntu fixed via 1:8.9p1-3ubuntu0.5 on 22.04 LTS and 1:8.2p1-4ubuntu0.10 on 20.04 LTS; Debian fixed bullseye at 1:8.4p1-5+deb11u3 and bookworm at 1:9.2p1-2+deb12u2.
Exposure dataThe Terrapin paper's internet scan found 71.6% of SSH servers supported at least one affected mode and 63.2% preferred one. That is broad cryptographic exposure, but still not proof that attackers can get MITM position on your admin paths.
Patch adoption signalThe researchers reported that an IPv4 scan on 2024-01-05 already showed more than 3.4M servers patched, indicating fast vendor and operator uptake of the strict kex countermeasure.
Disclosure / researchersPublic disclosure was 2023-12-18 by Fabian Bäumer, Marcus Brinkmann, and Jörg Schwenk.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.4/10)

The single biggest reason this lands in LOW is that exploitation requires a *live machine-in-the-middle position* on an SSH connection, which usually implies prior network control, local adjacency, or a compromised transit point. On top of that, the OpenSSH maintainers describe the practical OpenSSH impact as limited to early-session integrity downgrade, not code execution or broad confidentiality loss.

HIGH Attack-path friction and MITM prerequisite
HIGH OpenSSH impact being materially narrower than typical remote-code or auth-bypass bugs
MEDIUM Asset-by-asset exposure across mixed client/server estates with distro backports

Why this verdict

  • -2.0 attacker-position penalty: exploitation needs unauthenticated *network* reach plus a man-in-the-middle foothold on the SSH path, which is a huge real-world narrowing versus ordinary remote service CVEs
  • -0.7 precondition penalty: the vulnerable behavior only matters when affected algorithms are actually negotiated and strict kex is absent on at least one side
  • -0.6 impact penalty: for OpenSSH, the documented practical effect is mainly extension stripping and loss of some negotiated protections, not RCE, plaintext disclosure, or durable privilege gain

Why not higher?

This is not a wormable or sprayable internet bug. An attacker must first win routing position on the path, then catch a new SSH session, then land on affected crypto, and even then the mainstream OpenSSH impact is limited to downgrade behavior rather than direct system compromise.

Why not lower?

It is still a real protocol flaw in one of the most common admin channels in enterprise environments. Affected modes are widespread, PoC code exists, and a successful MITM against bastions, jump boxes, or contractor/Wi-Fi paths can systematically weaken many sessions at once.

05 · Compensating Control

What to do — in priority order.

  1. Disable affected algorithms where practical — Remove [email protected] and CBC+*[email protected] from exposed SSH admin surfaces if you cannot confirm strict kex support on both ends. For a LOW verdict there is no SLA beyond backlog hygiene, but do it earlier on internet-facing bastions, shared jump hosts, and contractor-access paths because those are the few places where the MITM precondition is believable.
  2. Keep SSH on trusted paths — Force administrative SSH through private management networks, VPNs, or hardened bastions instead of flat user LANs and untrusted transit. This directly attacks the only thing that really matters for Terrapin: the attacker being able to sit in the middle.
  3. Verify strict-kex on both client and server fleets — The OpenSSH-style fix only activates when both peers support it, so a patched server talking to old clients can still leave downgrade room. Audit server banners, client versions, and distro backports during normal patch hygiene for this LOW item.
What doesn't work
  • Patching only one side and declaring victory does not reliably solve it, because strict kex is negotiated and needs peer support to take effect
  • MFA does not meaningfully address this CVE, because the manipulation happens in the SSH transport handshake before authentication and targets negotiated protections
  • Rotating host keys or changing user passwords does not fix the protocol weakness
06 · Verification

Crowdsourced verification payload.

Run this on the target Linux host that provides OpenSSH server access. Invoke it as sudo bash terrapin-check.sh so it can read the effective sshd config and probe localhost:22; it needs ssh, sshd, and standard shell tools, but no internet access.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# terrapin-check.sh
# Check whether a local OpenSSH server appears vulnerable to CVE-2023-48795.
# Outputs: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

need_cmd() {
  command -v "$1" >/dev/null 2>&1
}

for c in ssh grep awk sed; do
  if ! need_cmd "$c"; then
    echo "UNKNOWN - missing required command: $c"
    exit 2
  fi
done

SSHD_BIN=""
for p in /usr/sbin/sshd /sbin/sshd $(command -v sshd 2>/dev/null || true); do
  if [ -n "$p" ] && [ -x "$p" ]; then
    SSHD_BIN="$p"
    break
  fi
done

if [ -z "$SSHD_BIN" ]; then
  echo "UNKNOWN - sshd not found"
  exit 2
fi

# Capture sshd version (stderr on OpenSSH)
SSHD_VER_RAW="$($SSHD_BIN -V 2>&1 | head -n1)"
SSHD_VER="$(printf '%s' "$SSHD_VER_RAW" | sed -n 's/.*OpenSSH_\([0-9][0-9.]*p\{0,1\}[0-9]*\).*/\1/p')"

# Effective config. Requires privileges on some systems.
SSHD_T="$($SSHD_BIN -T 2>/dev/null || true)"
if [ -z "$SSHD_T" ]; then
  echo "UNKNOWN - could not read effective sshd config; run with sudo"
  exit 2
fi

CIPHERS="$(printf '%s\n' "$SSHD_T" | awk '/^ciphers /{print $2}')"
MACS="$(printf '%s\n' "$SSHD_T" | awk '/^macs /{print $2}')"

has_vuln_cipher=0
has_vuln_cbc=0
has_vuln_etm=0

printf '%s' "$CIPHERS" | grep -q '[email protected]' && has_vuln_cipher=1
printf '%s' "$CIPHERS" | grep -Eq '(^|,)(aes[0-9-]*-cbc|3des-cbc)(,|$)' && has_vuln_cbc=1
printf '%s' "$MACS" | grep -q -- '[email protected]' && has_vuln_etm=1

# Probe localhost for strict-kex advertisement. This does not require auth success.
STRICT_KEX=0
PROBE_OUT="$(ssh -vv \
  -o BatchMode=yes \
  -o StrictHostKeyChecking=no \
  -o UserKnownHostsFile=/dev/null \
  -o ConnectTimeout=5 \
  -o PreferredAuthentications=none \
  -p 22 localhost true 2>&1 || true)"

printf '%s' "$PROBE_OUT" | grep -q '[email protected]' && STRICT_KEX=1

# Helper: compare upstream-ish OpenSSH versions only. Backports may make this conservative.
ver_ge_96=0
case "$SSHD_VER" in
  9.6*|9.7*|9.8*|9.9*|10.*)
    ver_ge_96=1
    ;;
esac

# Decision logic:
# 1) If strict-kex is advertised by the local server, treat as PATCHED.
# 2) Else if upstream version is >=9.6, treat as PATCHED.
# 3) Else if affected algorithms are exposed, treat as VULNERABLE.
# 4) Else UNKNOWN because distro backports / custom configs may apply.
if [ "$STRICT_KEX" -eq 1 ]; then
  echo "PATCHED - server advertises strict kex (mitigation for CVE-2023-48795)"
  exit 0
fi

if [ "$ver_ge_96" -eq 1 ]; then
  echo "PATCHED - OpenSSH version appears to be 9.6 or newer ($SSHD_VER_RAW)"
  exit 0
fi

if [ "$has_vuln_cipher" -eq 1 ] || { [ "$has_vuln_cbc" -eq 1 ] && [ "$has_vuln_etm" -eq 1 ]; }; then
  echo "VULNERABLE - no strict kex detected and affected algorithms are enabled"
  exit 1
fi

echo "UNKNOWN - no strict kex detected, but enabled algorithms do not clearly show an exploitable profile; verify distro backports manually"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: do not treat this like an emergency remote compromise bug. For this LOW verdict there is no noisgate mitigation SLA and no noisgate remediation SLA beyond backlog hygiene, so document which SSH servers and admin paths still negotiate affected algorithms, verify whether strict kex is active on both client and server fleets, and roll fixes into your normal OS/OpenSSH maintenance cycle; for bastions, jump hosts, and contractor-facing admin paths, disable the affected algorithms during the next routine change window if you cannot confirm both-side support yet.

Sources

  1. NVD CVE-2023-48795
  2. OpenSSH 9.6 release notes
  3. Terrapin attack disclosure on oss-security
  4. Terrapin research paper PDF
  5. RUB-NDS Terrapin proof-of-concept artifacts
  6. Ubuntu USN-6560-1 OpenSSH vulnerabilities
  7. Debian DSA-5586-1 openssh security update
  8. CISA Known Exploited Vulnerabilities Catalog
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.