Analysis · Platform security

OpenSSH sshole: what an exploited Alpine login bypass says about the images you run

CVE-2026-123158, nicknamed sshole, let attackers log in over SSH without a password to accounts that were never meant to accept one, on Linux systems built on the musl C library without PAM, most notably Alpine. A fix shipped on 5 November and exploitation was reported within hours. The patch is simple. The lessons about base images, implicit assumptions and SSH in places it does not belong are worth more.

AnalysisSumanta Mukhopadhyay8 min read6 sources
#news#security#platform#kubernetes
ANALYSIS · ANALYSIS · PLATFORM SECURITY8 Nov 2026 · 21:20 GST

What happened

On musl-based Linux systems without PAM, OpenSSH before 10.6p2 could let an attacker log in to accounts that have no usable password, such as key-only users, by sending an over-long password25. Alpine Linux's default openssh-server build fits that description, and other musl-based images may too; glibc-based distributions such as Debian, Ubuntu and Fedora are reported as not affected2. OpenSSH released 10.6p2 on 5 November, and Help Net Security reports exploitation began within hours1. The Hacker News reports attackers gained root on an Alpine honeypot3.

Reporting describes the mechanism as an interaction between two components rather than a bug in either alone: musl's password hashing function rejects oversized input with a value that happens to match how locked accounts are marked, and sshd compares the two5. OpenSSH and musl maintainers have publicly disagreed about where the fault lies4. For defenders, that debate matters less than the fact that each component behaved as its own authors expected.

  1. ReachAn attacker finds sshd exposed on a musl-based host or image
  2. SendA login attempt with an over-long password for a known account
  3. MismatchThe hashing result matches the marker for "no password"
  4. Log inA key-only account accepts the login
  5. EscalateIf that account can become root, the host is lost
  6. SpreadCredentials and network access on the host are used next
Every step relied on an assumption: that a key-only account cannot accept a password.

Lesson 1: "minimal" images are not minimal attack surface

Alpine is popular because it is small, and small images are usually safer. But a small image that ships an SSH server is a small image with an internet-facing login service. The question to ask of every base image is not "how big is it?" but "what does it listen on, and who can log in?".

The flaw also only affected one C library. Many organisations do not know which of their images, appliances and embedded devices use musl rather than glibc, because nobody needed to. Add the C library and the presence of sshd to your image inventory; an SBOM per image makes this a query rather than a hunt. See supply chain security.

Lesson 2: state your intent, do not rely on side effects

Many hosts were exposed because password logins were never explicitly disabled; operators relied on accounts having no password. OpenSSH's developers advised setting PasswordAuthentication to no, or disabling SSH, until systems are patched2. That is good practice regardless of this bug: configuration should say what you mean ("no password logins") rather than depend on the state of every account.

The same applies to default users in cloud images. Reporting notes that the default user on some official Alpine cloud images could become root, which turned a login bypass into full control2. Review which default accounts your images ship with and what they can do.

Lesson 3: containers should not run SSH

A container that runs sshd invites people to log in and change it, and invites attackers to do the same. Containers should be rebuilt and replaced, not maintained by hand. Where engineers need to debug, use the orchestrator's audited access, and treat any container that someone has changed interactively as untrusted until it is replaced. The Kubernetes community has described exactly that pattern: tag pods that have been accessed interactively and evict them after a set time6.

Sequence diagram: a developer runs kubectl exec, the API server calls an admission controller webhook which tags the pod as interacted and allows the request, and the controller later evicts tagged pods after a predefined interval
Interactive access is allowed but recorded, and the touched pod is replaced: a better model than SSH into containers. Source: Kubernetes blog, Saifuding Diliyaer · CC BY 4.0

For hosts that genuinely need SSH, put it behind a management network or an access broker, with short-lived certificates rather than static keys, and never on the open internet. See the management plane hardening case study.

What to do this week

Today
PatchOpenSSH 10.6p2, rebuild imagesDisable password loginsexplicitly, everywhere
This month
InventoryC library and sshd per imageDefault usersremove or restrict
This quarter
No SSH in containersaudited access insteadAccess brokershort-lived certificates for hosts
Patch now, then remove the conditions that made a login bypass so dangerous.

The fix for sshole is one package update. The fix for the next one is knowing what runs SSH, saying explicitly how it may be used, and not running it where it does not belong.

CTO take

This was not an exotic attack. It exploited an assumption almost every team makes, on a base image almost every team uses, and attackers moved within hours. Teams with an image inventory, explicit SSH configuration and no SSH in containers will spend this week on a routine patch. Teams without them will spend it finding out where Alpine is running. Read alongside the 7 November tech news, where the flaw first appeared on this site.

How I can help

I help teams harden platforms, from base images and access paths to Kubernetes and management planes. I am based in India, the United States and the UAE, working globally. See fractional CTO work, where I work, or analyse your challenge and bring the result to a call.

References
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
FAQ

Common questions

Which systems are affected by CVE-2026-123158?

Reporting says OpenSSH before 10.6p2 on Linux systems that use the musl C library without PAM, most notably Alpine Linux's default openssh-server build, and other musl-based images. glibc-based distributions such as Debian, Ubuntu and Fedora are reported as not affected.

What should I do if I cannot patch immediately?

OpenSSH's developers advised setting PasswordAuthentication to no, or disabling SSH, on affected systems until they are updated. Rebuild container images whose openssh package predates the fix.

Should containers run SSH at all?

Generally no. Containers should be replaced, not logged into. Use the orchestrator's audited access for debugging, and treat any container someone has changed by hand as untrusted until it is replaced.

Keep reading

Related

Open to advisory, fractional CTO & select builds

Let's talk about what you're building.

The fastest route is a free 30-minute call. Prefer to write? Send a message and I'll reply personally within two business days.

Start a conversation

How would you like to reach me?

Book a 30-min callFastest. Pick any open slot on my calendar.→ Write in GmailOpens a pre-filled draft in your browser.→ Use my email appOutlook, Apple Mail or your default client.→

I reply personally within two business days. Time zones from the Americas and Europe to the Middle East and Asia-Pacific.