The OpenSSH vulnerabilities in embedded firmware that matter most as of 2026-11-14 are CVE-2026-123158, a password bypass in musl builds without PAM that CISA added to its KEV catalog on 2026-11-09, and regreSSHion (CVE-2024-6387) in Portable OpenSSH 8.5p1 to 9.7p1. Terrapin (CVE-2023-48795) and the 9.5p1 to 9.9p1 denial of service CVE-2025-26466 follow. Find the version in the banner or package records, check libc, PAM and sshd_config, then upgrade to 10.6p2 or backport the fixes.
Key takeaways
- OpenSSH ships on devices with the flash and RAM for a full SSH stack, such as larger routers, gateways, HMI panels and industrial PCs running embedded Linux.
- Six CVEs cover most of what a firmware scan of an OpenSSH image turns up today.
- The musl password bypass matters for firmware because its preconditions are the normal state of many embedded Linux images.
- How dangerous regreSSHion is on a device depends on the C library more than on the hardware.
Where does OpenSSH ship in embedded devices?
OpenSSH ships on devices with the flash and RAM for a full SSH stack, such as larger routers, gateways, HMI panels and industrial PCs running embedded Linux. Vendors choose it for SFTP, certificate authentication, PAM, post-quantum key exchange and a familiar configuration file, which puts it on enterprise gateways, edge and IoT gateways built on Debian, Ubuntu Core or Alpine, and Yocto-based controllers. Smaller routers, cameras and constrained devices tend to ship Dropbear instead; our Dropbear SSH vulnerabilities guide covers that server, and some images carry both, Dropbear for the field console and OpenSSH for a management VLAN.
Embedded images almost always use Portable OpenSSH, the version that the OpenSSH project maintains for non-OpenBSD systems, with a "p" suffix in its version such as 10.6p2. That suffix matters for CVEs: regreSSHion only affects Portable OpenSSH, and the musl bypass only affects Linux builds. All three common build systems ship it. OpenWrt's packages feed offers it alongside Dropbear, and Buildroot and OpenEmbedded-Core both carry a recipe; our embedded Linux build systems and SBOM guide explains how those recipes end up in an SBOM.
Which OpenSSH CVEs matter most for device makers?
Six CVEs cover most of what a firmware scan of an OpenSSH image turns up today. The project's security page lists each advisory with the affected versions, and its release notes carry the details. Scores below are NVD's unless marked; EPSS values are FIRST's for 2026-11-13, and KEV status is from CISA's catalog version 2026.11.13.
| CVE | What it is | Affected | Fixed upstream | Score / EPSS | KEV |
|---|---|---|---|---|---|
| CVE-2026-123158 | Password authentication bypass when sshd runs on musl libc without PAM | Linux builds before 10.6p2 | 10.6p2 (2026-11-05) | CNA (MITRE) 8.1 / 0.189 | Yes, added 2026-11-09 |
| CVE-2024-6387 (regreSSHion) | Signal handler race in sshd, unauthenticated code execution as root | Portable 8.5p1 to 9.7p1, and before 4.4p1 without old patches | 9.8p1 (2024-07-01) | NVD 8.1 / 0.995 | No |
| CVE-2023-48795 (Terrapin) | Prefix truncation of the SSH handshake by an active man-in-the-middle | Before 9.6 | 9.6 (2023-12-18) | NVD 5.9 / 0.935 | No |
| CVE-2025-26466 | Pre-authentication memory and CPU exhaustion through SSH2_MSG_PING packets | 9.5p1 to 9.9p1 | 9.9p2 (2025-02-18) | NVD 5.9 / 0.387 | No |
| CVE-2023-38408 | Remote code execution through ssh-agent's PKCS#11 support over a forwarded agent | 5.5 to 9.3p1 | 9.3p2 (2023-07-19) | NVD 9.8 / 0.797 | No |
| CVE-2025-26465 | Client server impersonation when VerifyHostKeyDNS is enabled | 6.8p1 to 9.9p1 | 9.9p2 (2025-02-18) | NVD 6.8 / 0.077 | No |
High EPSS on Terrapin and CVE-2023-38408 reflects how widely SSH is deployed, not how reachable either flaw is on a device. The last two rows only apply when the device itself runs ssh-agent with agent forwarding to untrusted hosts, or uses the ssh client with VerifyHostKeyDNS turned on, which is off by default.
The security page is not the whole record. As of 2026-11-14 its newest entry is dated 9 April 2025, while the release notes list security fixes in every release since, including GSSAPI credential handling and sftp path checks in 10.6 and an ssh-agent locking flaw in 10.5. The 10.6p2 notes also say the project will make more frequent releases for now, because bugs found with AI tools are often rediscovered independently, which suggests attackers can find them too. Read the release notes for every version between yours and the current one, 10.6p2.
What makes the musl password bypass (CVE-2026-123158) so relevant to firmware?
The musl password bypass matters for firmware because its preconditions are the normal state of many embedded Linux images. Alpine Linux's advisory explains the root cause: without PAM, sshd hashes the attempted password with crypt() and compares it with the stored field, and musl's crypt() returns the string * as an error when the key is over 256 bytes, which is exactly what an account with no password stores. The advisory lists the conditions as password authentication enabled (the OpenSSH default), an account whose password field is *, and at least one other account with a $5$ or $6$ hash; the attacker then sends a password of 257 to 1024 bytes and gets in on the first try.
Firmware builds meet those conditions easily. musl is the default C library on OpenWrt and a common choice in Buildroot; our glibc, uClibc and musl guide covers how to tell which one an image uses. OpenWrt's openssh package builds its default openssh-server variant with --without-pam, with PAM only in the separate openssh-server-pam variant, and Buildroot's openssh.mk passes --without-pam unless Linux-PAM is selected. Key-only service accounts with a * password, next to one admin account with a $6$ hash, are a common layout.
The fix is one upstream commit that touches three files and rejects stored password fields shorter than four characters, so it backports cleanly to older releases; Alpine shipped it in packages back to 9.0p1. Setting PasswordAuthentication no also closes the hole. One NVD detail changes how scanners see it: the record's configuration pairs OpenSSH before 10.6p2 with Alpine Linux versions, so a tool that requires the platform match will not flag an OpenWrt or Buildroot image that is just as exposed.
How dangerous is regreSSHion (CVE-2024-6387) on an embedded device?
How dangerous regreSSHion is on a device depends on the C library more than on the hardware. The Qualys advisory describes a race in sshd's SIGALRM handler, which runs when a client fails to log in within LoginGraceTime and calls functions such as syslog() that are not async-signal-safe. Qualys calls it a regression of CVE-2006-5051, introduced by an October 2020 commit that first shipped in 8.5p1, and lists three ranges: before 4.4p1 vulnerable unless patched, 4.4p1 to before 8.5p1 not vulnerable, and 8.5p1 to before 9.8p1 vulnerable again.
Qualys exploited it on glibc-based Linux, where syslog() calls malloc() and free(), and needed about 10,000 attempts, roughly 6 to 8 hours against Debian 12's 9.2p1 on i386. The advisory says it did not investigate other C libraries. OpenSSH's 9.8 release notes add that systems without ASLR "may potentially have an easier path to exploitation", which describes many 32-bit embedded targets. A glibc-based HMI or gateway on 8.5p1 to 9.7p1 is therefore the highest-risk case; a musl or uClibc build in the same range still carries the bug, but the Qualys exploit does not cover it.
If you cannot ship a fix at once, Qualys and OpenSSH both give LoginGraceTime 0 as a mitigation, at the cost of making it easier to tie up every MaxStartups slot. Distributions backported the patch instead of upgrading: the Debian tracker lists bookworm's fix as 1:9.2p1-2+deb12u3 (DSA-5724-1), while bullseye's 8.4p1 was never affected.
What does Terrapin (CVE-2023-48795) mean for an OpenSSH device?
Terrapin is a protocol flaw, so it needs both a vulnerable mode and an attacker on the network path. The Terrapin paper site says the attack requires "MitM capabilities at the network layer" and a connection secured by ChaCha20-Poly1305 or CBC with Encrypt-then-MAC, and that it lets the attacker remove messages from the start of the secure channel, such as the extension negotiation message. OpenSSH's own assessment on its security page is that there is "no discernible impact on the integrity of SSH traffic" beyond deleting the message that enables some keystroke timing features.
OpenSSH 9.6 added the "strict kex" countermeasure, which only takes effect when both client and server support it. A device on 9.6 or later is protected against clients that also implement it; an older device, or a newer device talking to an old field-service client, is not. The Terrapin FAQ's workaround is to disable [email protected] and the [email protected] MACs and use AES-GCM, while warning that a client without the remaining algorithms can lose access.
How do you find the OpenSSH version and build options in a firmware image?
Start with the version, then establish how the binary was built, because several CVEs above depend on build options rather than the version alone.
SSH bannerThe server sends its identification string first. OpenSSH's 10.0 notes show the format, SSH-2.0-OpenSSH_10.0. Distribution builds append their revision: the Qualys advisory's Debian 12 target announcedSSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2.Binary stringsIn the unpacked root file system, search the sshdbinary forOpenSSH_. On a device you control,ssh -Vprints the version of the client package.Binary layoutThe presence of an sshd-sessionbinary means 9.8 or later, where the server was split into a listener and a per-session binary, and ansshd-authbinary means 10.0 or later. Buildroot installs both.Package metadataOpenWrt's opkg database records openssh-serverwith versions such as10.6_p2-1, and Buildroot and Yocto record the version in their recipes and build manifests.libc, PAM and cryptoCheck which dynamic loader the binaries use to tell musl from glibc, whether sshdlinkslibpamand whether a PAM configuration for sshd exists, and whether it linkslibcryptoor was built without OpenSSL.Effective configuration sshd -Ton a running device prints the configuration sshd actually uses, which is more reliable than reading the shipped sshd_config, because include files and Match blocks can override it.
Treat the version as the upstream base. A banner reading 9.2p1 can sit on a fully patched Debian package, and vendors can patch the source without touching the version string. Backport evidence, from a distribution tracker or the vendor's own patch list, is what turns a version match into a documented "affected" or "fixed" decision.
How does OpenSSH appear in an SBOM and in NVD?
NVD files OpenSSH CVEs under cpe:2.3:a:openbsd:openssh, and it encodes the portable release in the CPE update field: CVE-2023-38408's configuration lists 9.3 and 9.3:p1 as separate vulnerable entries. The build systems follow that scheme. Buildroot sets the CPE vendor to openbsd and splits 10.6p2 into version 10.6 and update p2, OpenWrt declares cpe:/a:openbsd:openssh, and the OpenEmbedded-Core recipe marks CVEs that only affect distribution patches, such as RHEL's FIPS changes, as not applicable with a CVE_STATUS line.
Two mismatches follow. The package name (openssh-server, openssh-client, openssh-sftp-server) differs from the NVD product, so an SBOM entry often carries no usable CPE unless a tool maps it. Version ranges also drift: NVD's regreSSHion configuration includes versions up to and including 9.8, which a parser that drops the p1 suffix reads as covering the fixed 9.8p1. Our firmware SBOM guide covers how to keep identifiers and versions consistent.
How should you harden sshd_config on a device?
Most OpenSSH exposure on devices comes from configuration, and the defaults favour general-purpose servers, not appliances. The sshd_config manual gives PasswordAuthentication yes, KbdInteractiveAuthentication yes, PermitRootLogin prohibit-password and a LoginGraceTime of 120 seconds as defaults. A device baseline that key management can support looks like this:
# Keys only, no passwords, no root shell over SSH
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey
PermitRootLogin no
# Listen on the management interface only
ListenAddress 192.0.2.10
# Limit pre-authentication load (regreSSHion, CVE-2025-26466)
LoginGraceTime 30
MaxStartups 10:30:60
PerSourcePenalties yes
# No forwarding unless the product needs it
DisableForwarding yes
# Current algorithms only
KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512,curve25519-sha256
Ciphers [email protected],[email protected],[email protected]
MACs [email protected],[email protected]
Adjust it to the version you ship. PerSourcePenalties exists from 9.8 and is on by default there; the mlkem768x25519-sha256 key exchange exists from 9.9 and became the client default in 10.0, so drop it on older builds. DisableForwarding did not disable X11 or agent forwarding in 7.4 to 9.9, so on those versions also set X11Forwarding no and AllowAgentForwarding no. Keep [email protected] only if the device and its clients support strict kex (9.6 and later). Check the result with sshd -t and sshd -T before shipping.
Configuration alone does not cover two common integration mistakes. Generate unique host keys on each device at first boot instead of shipping one key in the image, and never ship a shared factory password; our hard-coded credentials guide covers both. Our weak cryptography guide explains algorithm choice in more depth, and U-Boot bootloader security covers keeping the root file system, and sshd_config with it, from being edited offline.
How does a device maker patch or backport OpenSSH?
Upgrade where you canMove to the current Portable release, 10.6p2 as of 2026-11-14, and read the potentially-incompatible changes first: 10.0 removed DSA and disabled finite-field Diffie-Hellman key exchange in sshd by default, and moved authentication into the new sshd-authbinary, which your packaging must install. OpenWrt's packages feed, Buildroot and OpenEmbedded-Core all carried 10.6p2 on 2026-11-14, so moving to a current build system branch is often the shortest path.Backport when you cannotTake the fix commits that the Debian tracker and the release notes link for each CVE. The Debian tracker entry for CVE-2025-26466 names the introducing commit (9.5p1) and the fix, and the entry for CVE-2023-38408 lists four fix commits and backported versions down to 7.9p1. Our firmware diffing and patch analysis guide shows how to confirm a backport landed in the shipped binary. Mitigate in configuration meanwhile PasswordAuthentication nocloses CVE-2026-123158,LoginGraceTime 0closes the regreSSHion race at a denial-of-service cost,PerSourcePenaltieslimits CVE-2025-26466, and removing ChaCha20-Poly1305 and the -etm MACs closes Terrapin for unpatched peers.Rebuild the OpenSSL or LibreSSL it links againstif that library is also behind; our OpenSSL vulnerabilities in embedded firmware guide covers that half. Release with evidenceRegenerate the SBOM, record the OpenSSH version and the backported patch list, and state per CVE whether the product is affected. Our CSAF and VEX for device makers guide shows the format, for example "not affected" for CVE-2026-123158 on a glibc build.
Worked example: how would you triage OpenSSH in a gateway image?
Synthetic example, not a real product. An industrial gateway maker scans a Buildroot-based image whose build manifest lists OpenSSH 9.6p1.
Confirm the baseThe sshdbinary containsOpenSSH_9.6p1, ansshd-sessionbinary is absent (consistent with a pre-9.8 build), and the vendor patch list shows no OpenSSH backports.Check the buildThe binaries use musl's loader, sshddoes not linklibpam, and the shipped sshd_config leaves password logins at the default.Match the CVEsCVE-2024-6387 applies (9.6p1 sits in 8.5p1 to 9.7p1), with no public musl exploit; CVE-2026-123158 applies because the build is musl without PAM, even though NVD's Alpine-only configuration does not flag it; CVE-2025-26466 applies; Terrapin is fixed on the server side by 9.6. The device never runs ssh-agentor uses VerifyHostKeyDNS, so CVE-2023-38408 and CVE-2025-26465 are recorded as not affected.Check accounts and exposureThe image has a key-only serviceaccount with*in the shadow file and anadminaccount with a$6$hash, and sshd listens on every interface, so the CVE-2026-123158 conditions are all met.FixShip an update to 10.6p2 with keys-only authentication, a management-only listener and first-boot host keys, then rebuild, re-scan and publish a VEX statement per CVE.
How does AI-assisted analysis help with OpenSSH findings?
SoftWSP's automated scan unpacks a firmware image, catalogs the software packages in the extracted file system with their versions (the inventory our firmware SBOM guide describes), and matches each one against CVE records, CISA's KEV catalog and FIRST's EPSS scores. On OpenWrt-style images the opkg package revision is stripped before matching. This is deterministic code: the code scores, and AI narrates. You can inspect the resulting CycloneDX file in the free SBOM viewer.
Version matching follows NVD's records and inherits their limits, which are significant for OpenSSH: a package named openssh-server has to be tied to NVD's OpenBSD OpenSSH entry, the p release suffix has to be read correctly, and CVE-2026-123158 depends on libc and PAM, which a version does not show. AI's part is the written explanation of what matched, citing the component, version and record behind each sentence. An engineer reviews every finding before the report is delivered, and that review is where the package-to-CPE mapping, the libc and PAM build, the effective sshd_config, the accounts in the image and any vendor or distribution backport become a documented "affected" or "fixed" decision.
For where SSH service review fits in a full assessment, see the OWASP Firmware Security Testing Methodology guide and our KEV and EPSS prioritisation guide, or device & firmware security services to have a specific image reviewed.
This guide draws on the OpenSSH security page, release notes and Portable OpenSSH page, the sshd_config manual, the Qualys advisories for CVE-2024-6387 and CVE-2025-26465/26466, the Terrapin paper site, Alpine Linux's 2026-11-05 advisory and the upstream fix commit, the Debian Security Tracker, the OpenWrt, Buildroot and OpenEmbedded-Core OpenSSH build files, NVD, CISA's KEV catalog (version 2026.11.13) and FIRST EPSS data dated 2026-11-13, all read directly on 2026-11-14.
Put this guide to work
Frequently asked questions
Which OpenSSH vulnerabilities matter most for embedded devices?
As of 2026-11-14, start with CVE-2026-123158, a password authentication bypass in sshd builds on Linux that use musl libc without PAM, fixed in Portable OpenSSH 10.6p2 on 2026-11-05 and added to CISA's KEV catalog on 2026-11-09. Next comes regreSSHion (CVE-2024-6387), a pre-authentication race in Portable OpenSSH 8.5p1 to 9.7p1 that Qualys exploited as root on glibc-based Linux, fixed in 9.8p1. Terrapin (CVE-2023-48795, fixed in 9.6) needs an active man-in-the-middle. CVE-2025-26466 is a pre-authentication denial of service in 9.5p1 to 9.9p1. CVE-2023-38408 (ssh-agent) and CVE-2025-26465 (client with VerifyHostKeyDNS) only matter if the device runs those parts of OpenSSH.
How do I find the OpenSSH version in a firmware image?
Read the identification string the server sends, which upstream formats as SSH-2.0-OpenSSH_ followed by the version, for example SSH-2.0-OpenSSH_10.0, or search the sshd binary in the unpacked file system for the same string. Package records give the same number: OpenWrt stores it in the opkg database, Buildroot and Yocto in their recipes. Distributions add their own revision, such as Debian-2+deb12u2 after 9.2p1, and backport fixes without changing the upstream number, so read the full banner and the package changelog before calling a CVE open or closed.
Is an OpenWrt or Buildroot device with OpenSSH affected by the musl password bypass?
It can be. NVD describes CVE-2026-123158 as affecting sshd before 10.6p2 on Linux when musl libc is used without PAM, and names Alpine Linux as an example. OpenWrt's packages feed builds its default openssh-server package without PAM, and Buildroot builds without PAM unless Linux-PAM is selected. Per Alpine's advisory, exploitation also needs password authentication enabled, an account whose password field is a single asterisk, and at least one other account with a $5$ or $6$ password hash. NVD's configuration ties the CVE to Alpine Linux versions, so a scanner that needs that platform match will miss other musl images.
What is a safe sshd_config for a device?
Turn password and keyboard-interactive authentication off and allow public keys only, keep PermitRootLogin at prohibit-password or set it to no, listen only on the management interface, and turn off forwarding the device does not need with DisableForwarding. Keep LoginGraceTime, MaxStartups and, from 9.8, PerSourcePenalties, which limit the pre-authentication load behind regreSSHion and CVE-2025-26466. Restrict Ciphers, MACs and KexAlgorithms to current defaults such as AES-GCM and mlkem768x25519-sha256, and generate unique host keys on each device at first boot.
Does SoftWSP find OpenSSH in my firmware automatically?
SoftWSP's automated scan catalogs the software packages in an unpacked firmware file system with their versions and matches them against CVE records, CISA's KEV catalog and FIRST EPSS scores. AI then writes a plain-language summary that cites the component, version and record behind each finding, and an engineer reviews it. Confirming that a package such as openssh-server maps to NVD's OpenBSD OpenSSH entry, which libc and PAM setting the build uses, which sshd_config the device runs, and whether a vendor or distribution backport already closes a matched CVE is part of that engineer review, not an automatic verdict.
Sources
- OpenSSH: Security (advisory list)
- OpenSSH: Release Notes (10.6p2 back to 2.x)
- OpenSSH: Portable OpenSSH
- Qualys Security Advisory: regreSSHion, RCE in OpenSSH's server on glibc-based Linux systems (CVE-2024-6387)
- Qualys Security Advisory: CVE-2025-26465 MitM against VerifyHostKeyDNS-enabled client and CVE-2025-26466 DoS
- Bäumer, Brinkmann, Schwenk: Terrapin Attack (paper site, FAQ and scanner)
- Alpine Linux: Security advisory, openssh-server password authentication bypass (2026-11-05)
- openssh-portable commit 4353fdc: avoid password authn bypass
- OpenBSD manual: sshd_config(5)
- Debian Security Tracker: CVE-2024-6387
- Debian Security Tracker: CVE-2023-38408
- Debian Security Tracker: CVE-2025-26466
- OpenWrt packages: openssh package Makefile (openssh-server and openssh-server-pam variants)
- Buildroot: package/openssh/openssh.mk
- OpenEmbedded-Core: openssh_10.6p2.bb recipe
- NIST NVD: CVE-2026-123158
- NIST NVD: CVE-2024-6387
- NIST NVD: CVE-2023-48795
- NIST NVD: CVE-2023-38408
- NIST NVD: CVE-2025-26465
- NIST NVD: CVE-2025-26466
- CISA: Known Exploited Vulnerabilities (KEV) Catalog
About this guide
SoftWSP Firmware Security Desk
Covers the Firmware vulnerabilities & fixes cluster: 118 guides.

In this cluster
Questions about this page?
