EresusSecurity
Back to Research
Vulnerability Analysis

OpenSSH SSHole (CVE-2026-123158): Password Bypass on Accounts With No Password

Yiğit İbrahim SağlamOffensive Security Specialist
November 9, 2026
3 min read
VulnerabilityAnalysisOffensive Security

OpenSSH SSHole (CVE-2026-123158): Password Bypass on Accounts With No Password

Threat actors began attempting exploitation of the SSHole flaw — CVE-2026-123158 (CVSS 8.1) — within nine hours of disclosure, confirming root access on an Alpine Linux honeypot. A Nov 8 update counted 20 attempts from 13 IP addresses across nine countries.

The flaw lets an unauthenticated attacker supply an oversized password to access accounts configured with no usable password — no credential theft, no SSH keys needed. It affects Linux systems running OpenSSH on the musl C library with PAM disabled, including Alpine's default server configuration. glibc distributions, Dropbear, non-Linux systems, and PAM-based password checks are unaffected.

How It Works

The bug dates to a 2016 patch for CVE-2016-6210 (username enumeration). Under specific conditions, OpenSSH's password handling mistakes a failed hashing operation for successful authentication by producing the same * value that marks an account as password-disabled in the password field.

The attacker triggers it with an arbitrary password of 257–1,024 bytes. The hash attempt fails and returns *; the sshd daemon compares it against the * stored in the account's password field and lets the attacker in. Exploitation requires at least one account whose password hash is exactly *. Accounts with valid password hashes cannot be bypassed.

As Safe Security summarized: a successful attack grants access with the compromised account's existing permissions — and from there, deployment credentials, application secrets, and lateral movement.

Previdian's telemetry captured the honeypot root and reconnaissance commands (id, uname, hostname) from 89.116.89[.]18. The researcher behind the flaw, Ozgun Kultekin, announced it at sshhole.com; OX Security's breakdown is the deep technical write-up.

What to Do

  • Install OpenSSH 10.6p2 (or your distribution's patched package) and restart sshd.
  • Alpine's advice: search /var/log/messages for sshd lines reading Accepted password for an account that should not accept password logins (alpine, root, or any key-only user).
  • Review doas use and recently created users, files, and authorized keys on exposed machines. If you cannot rule out a login, treat the machine as compromised.

Hardening So the Next One Fails

SSHole needs three preconditions at once: musl libc, PAM disabled, and an account whose password field is literally *. Remove any one and the chain breaks. Concretely: enable PAM on Alpine images and audit sshd_config for UsePAM yes; add the check awk -F: '$2 == "*"' /etc/shadow to your image build and workstation hardening so a passwordless-account landmine ships nowhere; and set PasswordAuthentication no wherever key-based access is already the norm — it removes the entire code path the flaw lives on. The patch matters most, but the hardening is what makes the next 2016-class bug a non-event.

And the operational lesson: disclose is not finish. Alpine's post gave the log-hunt line, but a fleet that only patches the package and never greps Accepted password for against its passwordless-account inventory will miss the backdoor-shaped question of whether a login already happened. Patch, then hunt, in that order — and treat any ambiguous result as a compromised machine.

Sources

AI Security Starter Training

Request a practical checklist for prompt injection, RAG data leakage, MCP risks, and model-file security before launch.

Prompt injection and guardrail bypass checks.
RAG data leakage and permission-boundary review.
MCP identity, transport, and command-risk controls.

No spam. Used only to send the resource and related security notes.

Related Services

Scope Estimator

Get a rough engagement size before the scoping call.

What this depth covers
Full coverage of the OWASP-family test plan for the in-scope targets: broken access control, injection, authn and authz flaws, business-logic abuse, findings with reproduction steps.
What it does not cover
Multi-week adversary emulation, physical and phishing vectors, custom exploit development, source-code review.

Indicative effort

~5 tester-days

Estimate only, not a quote. It scales with the three factors above and assumes the targets are reachable and test accounts are provided in the test window.

Request exact scope