BLACKOUT MAP

Security · · 285 views

How one asterisk opened a door in OpenSSH: the *sshole bug, explained

Cet article est en anglais.

Partager
Updated 6 November, 19:25 UTC
  • Added an animated diagram of the bug.
  • First version.

Since 1980, a star in a Unix password file has meant one thing: nobody gets in with a password. This week we learned that on some Linux systems it also meant the opposite. Type a password of 257 characters, any 257 characters, and the door opens. The bug is called *sshole, the star is part of the joke, and no single person wrote it. Three sensible fixes built it between them, over ten years.

Status on 6 November 2026, 19:00 UTC

The fix is out: OpenSSH 10.6p2, and patched Alpine packages for every branch back to 3.16. Installing the update is not enough: restart sshd, or the old program keeps answering.

Attacks: one security firm, Previdian, reports attempts in the wild and a break-in on one of its honeypots. It is not on CISA's list of exploited flaws. Most servers are not affected: this needs musl, no PAM and password logins all at once.

The bug in one minute

Many people who run servers log in with a key and switch passwords off for the account. The usual way to do that is to put a * in the account's password field in /etc/shadow. A real entry there is a long scrambled hash. A star isn't a hash of anything, so no password can ever match it. That is the whole idea.

Now the four steps that break it, on a system that uses the small C library musl and has no PAM, the login layer that would normally do this work:

  1. You try to log in with a very long password. Anything from 257 to 1,024 bytes. Past 1,024, sshd gives up by itself.
  2. sshd hashes it anyway. The account has no real hash, so sshd borrows the settings from another account that does.
  3. musl refuses. Its SHA-256 and SHA-512 code won't touch a password over 256 bytes, and it reports the failure by returning a string: *.
  4. sshd compares the two. The stored field says *. The "hash" says *. They match, so you are in.
The bug on a system with musl and no PAM. The last step of the bar is drawn wider than one character so you can see it. Hashes are made up.

We read musl's source to see it with our own eyes. It is all there in crypt_sha512.c: #define KEY_MAX 256, then a line near the end of the file that ends in return "*";. An error message and a locked door happened to be spelled the same way.

Three fixes, one hole

The best part of this story is that every step along the way was somebody doing the right thing. The history comes from the write-up by Özgün Kültekin of Wakefield, who found the bug.

  • 1980 BSD puts a * in the password field of the daemon account. It is not a valid hash, so it can never match.
  • 2012 Fix one. Programs keep crashing because they don't check whether crypt() failed. musl starts returning "*" on failure instead of nothing. The same year it adds SHA-512 with a 256-byte limit, so that huge passwords can't be used to wear out a server.
  • 2016 Fix two. Attackers could work out which usernames exist by timing how fast sshd said no (CVE-2016-6210). To close that, OpenSSH hashes the password even when an account has no real hash. Now the failing crypt() and the star finally meet.
  • 2019 Alpine's Docker images turn out to have no root password at all (CVE-2019-5021). Alpine locks root with !, which also stops key logins on systems without PAM.
  • 2022 Fix three. Alpine 3.16 changes root to *, so keys work again. Root now has exactly the field the bug needs.
  • December 2024 Someone on the musl mailing list notices that BusyBox passwd fails on a 257-character password. The symptom is on the table. Nobody connects it to SSH.
  • 30 October 2026 OpenSSH changes the very function that picks the borrowed salt, for another reason. Kültekin points out the bug sat four lines further down.

Kültekin's way in was brute patience. Different builds of sshd (glibc, musl, with and without PAM) got about 17,600 odd login attempts, with AI agents helping to run them. All builds agreed on every login except one: musl without PAM.

Whose bug is it?

Nobody wants it. OpenSSH's release notes say: "We consider the root cause of this bug to be outside sshd, but it is exploitable via sshd and can be avoided there." musl's maintainer Rich Felker wrote on the same day: "It is my position that this is not a bug in musl just an erroneous use by the caller."

Both have a point, and that's why it survived so long. Each side's behaviour makes sense on its own, and the bug lives in the gap between them. OpenSSH fixed it anyway, and the fix is almost funny in how small it is. A real hash is long, so sshd now refuses anything shorter than four characters:

#define MIN_PASSWORD_HASH_LEN  4

ret = encrypted_password != NULL &&
    strlen(pw_password) >= MIN_PASSWORD_HASH_LEN &&
    strcmp(encrypted_password, pw_password) == 0;

Felker also says the way musl does this is something the project has "been wanting to change for a while now", and that it "very likely will be changed in the upcoming release cycle".

Are you affected?

You need all of these

  • OpenSSH before 10.6p2, built with musl. In practice: Alpine Linux, and custom Buildroot or Yocto systems.
  • No PAM. Alpine's standard openssh-server package has none.
  • Password logins on. That's OpenSSH's default, even if you only ever use keys.
  • An account with exactly * in its password field: key-only users, directory users, root on Alpine since 3.16.
  • Another local account with a real $5$ or $6$ hash.

You're safe with

  • Debian, Ubuntu, Fedora and anything else on glibc.
  • OpenBSD and other non-Linux systems.
  • PasswordAuthentication no.
  • openssh-server-pam with UsePAM yes.
  • Accounts locked with ! instead of *.
  • Containers that don't run sshd.
  • Current Dropbear. Versions before 2019 were susceptible (Rob Landley, on the musl list).

What some reports get wrong

  • "Root from one connection on any default Alpine." Root does have the star, but OpenSSH's default PermitRootLogin setting refuses password logins to root. It takes an admin who set that to yes. The more realistic route to root is sideways, through another account.
  • "Every Alpine cloud image is open." Official images from 3.18.11 to 3.24.3 do ship an alpine user with a star and passwordless doas, which really is root. But the bug needs a $6$ hash elsewhere on the machine, so a fresh image isn't exploitable. Setting a console password is enough to change that. Images where cloud-init turns password logins off are not exposed.
  • "OpenWrt routers are hit." Default OpenWrt runs Dropbear, not OpenSSH. Only people who swapped in openssh-server need to check, which is also true for GL.iNet routers built on it.
  • "Critical" or "high"? OpenSSH calls it critical. The CVE record says 8.1, high, with the attack complexity marked high. CISA's assessment of 5 November marks it as not automatable. If your server meets every condition, the score doesn't matter: it is one attempt, and it works every time.

Nobody has published a count of exposed servers, and we didn't find one worth repeating. Any number you see should show its method.

One day, not ninety

Security bugs are usually fixed in private for weeks before anyone is told. This one wasn't, on purpose. Damien Miller of OpenSSH wrote in his release mail that the team "learned of the problem yesterday", and explained why they rushed: "we have recently observed multiple cases of rapid bug rediscovery by AI agents, sometimes within hours, and so now consider long embargo periods to be a dangerous practice that primarily benefits attackers."

That sentence may outlast the bug. The release notes add that the team has "received a large number of security bug reports, many of which are findings from AI models or made with AI assistance". Here's how the clock ran, in UTC:

  • 4 Nov The OpenSSH team hears about the bug. Miller commits the fix at 21:18.
  • 5 Nov OpenSSH 10.6p2 is out, with a warning to musl users to "stop reading and set PasswordAuthentication=no or disable SSH for these systems IMMEDIATELY". Alpine ships packages and its advisory the same day.
  • 5 Nov, 14:14 The details go to the oss-security mailing list.
  • 5 Nov, 15:07 Felker's advisory reaches musl users.
  • 5 Nov, 15:46 The CVE is published.
  • 5 Nov, 17:30 First public proof of concept (Previdian's timeline).
  • 6 Nov, 00:05 Previdian's sensors see the first attempts: 8 hours and 19 minutes after the CVE.

Are attacks really happening?

Yes, probably, on a small scale so far, but the evidence comes from one place. Previdian's founder Ryan Dewhurst told Help Net Security that the first attempt came within nine hours and that an attacker got root on a honeypot running real Alpine and OpenSSH, then ran id, uname and hostname to look around. "This vulnerability was particularly trivial to exploit, which significantly shrunk that timeline," Dewhurst said.

That evidence is thin, though. Help Net reported eight attempts from one address in Japan. Previdian's public page now shows six attempts from four addresses in Switzerland, Iran, Japan and Singapore, and says these are attempts, without showing which succeeded. It doesn't say how the honeypot was set up, and root can only be reached directly if PermitRootLogin allows it. Orca, Ethiack and Safe Security said no attacks had been reported when they wrote, and at the time of writing the flaw is not on CISA's list. Its EPSS score, which estimates the chance of attacks over the next 30 days, is about 1%.

We also looked at SSH scanning across the internet. SANS ISC's sensors logged 962,097 records on port 22 on 5 November, below the median of about 1.5 million a day since the end of September. So no surge, but that proves little. Port 22 is hammered all day every day, and a few dozen targeted logins would vanish in that noise.

What to do

  1. Find out if you run it. ldd $(command -v sshd) | grep -i musl shows musl builds, and sshd -T | grep -E 'usepam|passwordauthentication' shows the two settings that matter. Don't forget appliances and images that someone built years ago.
  2. Update and restart. On Alpine: apk update && apk upgrade, then rc-service sshd restart. Rebuild container images that run sshd.
  3. Don't trust the version number. Alpine patched older versions without moving to 10.6: the fixed packages are 10.6_p2-r0 (edge), 10.3_p1-r2 (3.24), 10.2_p1-r1 (3.23), 10.0_p1-r11 (3.22), 9.9_p2-r1 (3.21), 9.7_p1-r6 (3.20), 9.6_p1-r3 (3.19), 9.3_p2-r4 (3.18), 9.1_p1-r7 (3.17) and 9.0_p1-r6 (3.16). A scanner that only looks for 10.6p2 will flag patched machines.
  4. Can't update today? Set PasswordAuthentication no, run sshd -t, restart, and keep your current session open until you've tested a key login. This is worth doing anyway.
  5. Look for a visit. Search /var/log/messages for Accepted password for on accounts that have no password. The logs don't record how long a password was, so a password login to a key-only account is your signal. Then check doas use, new users and authorized_keys files.
  6. If you can't rule out a login, treat the machine as compromised. That is Alpine's advice, and it means rebuilding, not cleaning.

Don't run the proof-of-concept or "checker" scripts going around GitHub. Previdian marks them all as unverified and warns that they could contain malware.

Why this is on Blackout Map

This is a software flaw, not an outage, and it won't show on our map. It stays small because the conditions are narrow. But it is worth your time for what it shows: the bug was hiding in the space between two projects that each did their job, and the time from public fix to first attack is now measured in hours. Our Security watch tracks the flaws that are really being used. Read also Can a software flaw take the internet down?

Sources

Partager cet article

Blackout Map is a live map of internet outages and shutdowns around the world. Open the map · Security watch · RSS · Follow us on X: @Blackoutmap_net

Tous les articles

À lire aussi

Security · 21 Oct 2026 16,243PHP2Shell: what we know about the two critical PHP flaws (now exploited)Two critical flaws in PHP, the language behind about 70% of websites, can let anyone run code on a server with one request. The fix is out and attacks are confirmed: how the attack works, what is confirmed, what to do, and what it could mean for the internet. Security · 3 Nov 2026Ivanti Connect Secure: three exploited flaws, and the first fix wasn't enoughAttackers chained three flaws to get root on fully updated Ivanti Connect Secure VPN appliances. All three are now on CISA's list of exploited vulnerabilities. Which versions fix it, what the attackers did, and what to check. Explainer · 21 Oct 2026 201Can a software flaw take the internet down?Ten years after the Mirai attack on Dyn: how security flaws turn into outages, the times they did, and what Blackout Map can and cannot see.

Plus d'articles du blog

Security · 12 Nov 2026Apache's HTTP/2 flaw: found twice in eight days, fixed in 2.4.71CVE-2026-119618 is a race in Apache's mod_http2 that can let an attacker run code without logging in. Only servers with HTTP/2 on are affected. Who found it, who is at risk, the dispute over an exploit, and what to do. Outage · 10 Nov 2026Internet partial outage in Central African Republic: what we measuredBlackout Map measured an internet partial outage in Central African Republic from 20:45 UTC on 7 November 2026. What the data shows, and how to follow it live. Analysis · 6 Nov 2026Is 72 hours of supplies enough? What 93 nationwide power outages showCanada and the UK tell people to be ready for three days without power. We measured 93 nationwide outages since 2022: nine in ten ended within three days. The eight that didn't were all on islands, and local storm damage can take weeks to repair. Fact check · 5 Nov 2026 906Every "global blackout" date so far, and what really happenedA running list of viral global blackout dates: what was claimed, what was real, and why it can't happen that way. Includes 13 and 17 November 2026, with the live status of the internet. Analysis · 5 Nov 2026Election shutdown watch: where the internet could be cut nextThe next elections to watch for internet shutdowns, starting with Cabo Verde, The Gambia, Guinea-Bissau and South Sudan, with each country's live internet status and what happened at this year's votes. Fact check · 31 Oct 2026 5,683Is a global blackout coming on 17 November? What the data saysViral posts warn of a worldwide blackout on 17 November: the power out, the internet down for three months, bank accounts at zero. Where it comes from, why it can't happen that way, what is really planned that day, and the live status of every country. Analysis · 24 Oct 2026 112LaLiga's IP blocks: why half a million websites break in Spain on match daysTo fight pirate football streams, Spain's ISPs block shared IP addresses during LaLiga matches, and hundreds of thousands of unrelated websites go down with them. What OONI found, what we measured, and what you can do before Barcelona – Real Madrid. Security · 21 Oct 2026 922Node.js security release: ten fixes, one that can run codeOn the same day as PHP2Shell, Node.js fixed ten flaws in its 22, 24 and 26 lines, including a Brotli decoder bug that can allow remote code execution and several ways around TLS hostname checks. What is affected and what to do. Retrospective · Iran, February 2026 578Iran's wartime blackout: 88 days cut off from the worldFrom the first strikes on 28 February to 26 May 2026, Iran was almost completely cut off from the internet: 2,093 hours, the longest nationwide shutdown on record. What happened, how it worked and what it cost. Retrospective · West Africa, March 2024 148West Africa lost four undersea cables in one dayA suspected underwater landslide off Côte d'Ivoire broke four cables at once in March 2024. Ghana was in blackout for almost a week, Côte d'Ivoire fell to 1% of normal. Retrospective · Canada, July 2022 146How a maintenance update took down Canada's RogersIn July 2022 one update in Rogers' core network cut mobile, home internet, debit payments and emergency calls for millions of Canadians for most of a day. Retrospective · Tonga, January 2022 130Tonga: the volcano that cut a country offThe 2022 Hunga Tonga eruption shredded the only cable linking Tonga to the world. The country was almost completely offline for five weeks. Retrospective · Worldwide, October 2021 188The six hours Facebook disappeared from the internetIn October 2021 one routine command took Facebook, Instagram and WhatsApp off the internet for billions of people. No attack, no country outage. Retrospective · Myanmar, February 2021 145Myanmar 2021: a coup, and an internet curfewAfter the February 2021 coup, Myanmar's military cut the internet nationwide, then every night, then all mobile data: a shutdown shaped by the hour. Retrospective · Tigray, Ethiopia, November 2020 134Tigray: two years without a connectionFrom November 2020, the war in Ethiopia's Tigray region came with a phone and internet blackout that lasted about two years. Retrospective · Iran, November 2019 136Iran, November 2019: a country offline for a weekDuring the 2019 fuel protests Iran cut itself off from the internet almost completely, while keeping parts of its domestic network running. Retrospective · Jammu and Kashmir, India, August 2019 140Kashmir: 550 days without full internetThe shutdown that began in August 2019 became the longest ever imposed in a democracy. High-speed mobile internet only returned in February 2021. Retrospective · Egypt, January 2011 137Egypt 2011: the night a country switched off its internetIn January 2011, two days into mass protests, Egypt withdrew almost all its routes from the internet within minutes. It stayed dark for five days. Retrospective · Pakistan, February 2008 152The day Pakistan took YouTube offline for the whole worldIn 2008 a national block on YouTube leaked into the internet's routing system and made the site unreachable worldwide for about two hours.