{"id":4117,"date":"2026-11-10T09:50:31","date_gmt":"2026-11-10T17:50:31","guid":{"rendered":"https:\/\/cyber.mag212.com\/?p=4117"},"modified":"2026-11-10T09:50:31","modified_gmt":"2026-11-10T17:50:31","slug":"openssh-sshole-cve-2026-123158-alpine-musl-password-bypass","status":"publish","type":"post","link":"https:\/\/cyber.mag212.com\/fr\/openssh-sshole-cve-2026-123158-alpine-musl-password-bypass\/","title":{"rendered":"La faille \u201c sshole \u201d d'OpenSSH (CVE-2026-123158) : des mots de passe trop longs permettent de se connecter \u00e0 Alpine et musl Linux, une vuln\u00e9rabilit\u00e9 d\u00e9sormais exploit\u00e9e."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Attackers are logging in to Alpine Linux and other musl-based systems over SSH without knowing any password. The flaw, nicknamed \u201csshole\u201d and tracked as CVE-2026-123158, lets a password of 257 to 1,024 bytes unlock accounts whose password field is just an asterisk. OpenSSH shipped a fix on 5 November, the first exploitation attempt against a honeypot was reported within hours, and on 9 November CISA added the bug to its Known Exploited Vulnerabilities (KEV) catalog with a federal deadline of 12 November.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>CVE<\/strong><\/td><td>CVE-2026-123158 (CWE-394, unexpected return value)<\/td><\/tr><tr><td><strong>Affected<\/strong><\/td><td>sshd on Linux built with musl libc and <strong>without PAM<\/strong> (Alpine\u2019s <code>openssh-server<\/code>, or <code>openssh-server-pam<\/code> with <code>UsePAM no<\/code>)<\/td><\/tr><tr><td><strong>Fixed in<\/strong><\/td><td>OpenSSH 10.6p2 upstream; Alpine packages for every branch from 3.16 to edge (table below)<\/td><\/tr><tr><td><strong>Exploited<\/strong><\/td><td>Yes. CISA KEV, honeypot root access reported, botnet and cryptominer activity reported<\/td><\/tr><tr><td><strong>Deadline<\/strong><\/td><td>Added to KEV 9 Nov 2026, federal due date <strong>12 Nov 2026<\/strong>, forensic triage flagged<\/td><\/tr><tr><td><strong>Workaround<\/strong><\/td><td><code>PasswordAuthentication no<\/code>, or disable SSH on the host<\/td><\/tr><tr><td><strong>CVSS<\/strong><\/td><td>Not verified (no vendor or NVD score confirmed at press time)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What happened<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH 10.6p2, released on 5 November 2026, includes an sshd change to avoid a password-authentication bypass on some Linux systems built and run without PAM. The project describes it as a critical workaround for Linux systems that combine the musl C library with PAM disabled, and notes that the root cause sits outside sshd itself (<a href=\"https:\/\/www.openssh.org\/releasenotes.html\" target=\"_blank\" rel=\"noopener\">OpenSSH release notes<\/a>). Alpine Linux published its own advisory the same day (<a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine advisory<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exploitation followed almost immediately. Previdian reported a first attempt less than nine hours after the CVE was published and confirmed that the attacker reached root on an Alpine honeypot (<a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security<\/a>); that timing is a single-source claim. SecurityWeek reported on 9 November that botnets and cryptominers are now using the flaw (<a href=\"https:\/\/www.securityweek.com\/hackers-exploiting-sshole-authentication-bypass-in-openssh\/\" target=\"_blank\" rel=\"noopener\">SecurityWeek<\/a>). The same day, CISA added CVE-2026-123158 to KEV, describing it as an unexpected return value that could allow authentication bypass, with a three-day due date and a forensic-triage requirement (<a href=\"https:\/\/raw.githubusercontent.com\/cisagov\/kev-data\/develop\/known_exploited_vulnerabilities.json\" target=\"_blank\" rel=\"noopener\">CISA KEV<\/a>). OpenSSH\u2019s Damien Miller urged affected users to switch off password authentication or disable SSH immediately rather than wait for a maintenance window (<a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security<\/a>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Who is affected<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Alpine is precise about the conditions. A host is exploitable only when <strong>all<\/strong> of the following are true (<a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine advisory<\/a>):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>sshd is the <code>openssh-server<\/code> package built without PAM, or <code>openssh-server-pam<\/code> running with <code>UsePAM no<\/code>;<\/li>\n\n\n<li><code>PasswordAuthentication yes<\/code> is in effect, which is the default;<\/li>\n\n\n<li>a target account has <code>*<\/code> in its password field;<\/li>\n\n\n<li>another local account has a <code>$5$<\/code> or <code>$6$<\/code> password hash;<\/li>\n\n\n<li>the attacker sends a password between 257 and 1,024 bytes long.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Hosts are <strong>not<\/strong> affected if they run <code>openssh-server-pam<\/code> with <code>UsePAM yes<\/code>, have password authentication disabled, lock accounts with <code>!<\/code> rather than <code>*<\/code>, have no <code>$<\/code>-style hashes, or are containers that never start sshd. Root logins are protected by the default <code>PermitRootLogin prohibit-password<\/code>, unless another login-capable account can escalate, for example through <code>doas<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alpine says its affected tiny-cloud images run from 3.18.11 to 3.24.3, and the fixed point releases are 3.21.10, 3.22.8, 3.23.8 and 3.24.4. According to SOCRadar, as reported by Help Net Security, those AWS and Azure tiny-cloud images also ship a default <code>alpine<\/code> user with passwordless <code>doas<\/code>, which turns a non-root login into root (<a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security<\/a>).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Alpine branch<\/th><th>Fixed <code>openssh<\/code> package<\/th><\/tr><\/thead><tbody><tr><td>edge<\/td><td>10.6_p2-r0<\/td><\/tr><tr><td>3.24<\/td><td>10.3_p1-r2<\/td><\/tr><tr><td>3.23<\/td><td>10.2_p1-r1<\/td><\/tr><tr><td>3.22<\/td><td>10.0_p1-r11<\/td><\/tr><tr><td>3.21<\/td><td>9.9_p2-r1<\/td><\/tr><tr><td>3.20<\/td><td>9.7_p1-r6<\/td><\/tr><tr><td>3.19<\/td><td>9.6_p1-r3<\/td><\/tr><tr><td>3.18<\/td><td>9.3_p2-r4<\/td><\/tr><tr><td>3.17<\/td><td>9.1_p1-r7<\/td><\/tr><tr><td>3.16<\/td><td>9.0_p1-r6<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Source: <a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine advisory<\/a>.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The researcher behind the finding, \u00d6zg\u00fcn K\u00fcltekin of Wakefield, also names OpenWrt, Buildroot, Yocto and many Docker images as musl-based systems worth checking. Debian, Ubuntu, Fedora, Dropbear and OpenBSD are reported as not affected (<a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security<\/a>). <strong>MAG212 CYBER analysis:<\/strong> the biggest real-world exposure is Alpine-based containers and VMs that run sshd, plus embedded builds. Many OpenWrt-based routers and access points use Dropbear rather than OpenSSH, so check each vendor rather than assume either way; we found no network-vendor advisory at press time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How the attack works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Without PAM, sshd checks each password attempt by hashing it with <code>crypt()<\/code>. When an account\u2019s stored field is too short to contain a salt, sshd borrows another account\u2019s salt so the comparison still runs. Alpine explains that musl\u2019s <code>crypt()<\/code> fails on keys longer than 256 bytes and returns the string <code>*<\/code>. If the target account\u2019s stored password field is also <code>*<\/code>, the two match and sshd accepts the login (<a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine advisory<\/a>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"587\" src=\"https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/01-openssh-sshole-cve-2026-123158-alpine-musl-password-bypass-diagram.jpg\" alt=\"Diagram of the OpenSSH sshole bypass: an oversized password makes musl crypt fail and return an asterisk, which matches an asterisk password field so the login is accepted; the five required conditions are listed below.\" class=\"wp-image-4116\" srcset=\"https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/01-openssh-sshole-cve-2026-123158-alpine-musl-password-bypass-diagram.jpg 1600w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/01-openssh-sshole-cve-2026-123158-alpine-musl-password-bypass-diagram-300x110.jpg 300w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/01-openssh-sshole-cve-2026-123158-alpine-musl-password-bypass-diagram-1024x376.jpg 1024w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/01-openssh-sshole-cve-2026-123158-alpine-musl-password-bypass-diagram-768x282.jpg 768w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/01-openssh-sshole-cve-2026-123158-alpine-musl-password-bypass-diagram-1536x564.jpg 1536w, https:\/\/cyber.mag212.com\/wp-content\/uploads\/2026\/11\/01-openssh-sshole-cve-2026-123158-alpine-musl-password-bypass-diagram-18x7.jpg 18w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-element-caption\">How the sshole bypass works, and the five conditions that must all be true (based on the Alpine advisory). Diagram: MAG212 CYBER<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In Previdian\u2019s honeypot the attacker ran <code>id<\/code>, <code>uname<\/code> and <code>hostname<\/code> after logging in, the usual first look around (<a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security<\/a>). We do not yet know how many hosts are exposed worldwide or what payloads attackers deploy beyond the botnet and cryptominer activity SecurityWeek reported.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What to look for<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Successful password logins on passwordless accounts.<\/strong> Alpine advises searching <code>\/var\/log\/messages<\/code> for <code>Accepted password for<\/code> on accounts such as <code>alpine<\/code>, <code>root<\/code> and key-only users (<a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine advisory<\/a>).<\/li>\n\n\n<li><strong>Post-login activity.<\/strong> Review <code>doas<\/code> use, newly created users and changes to <code>authorized_keys<\/code> files.<\/li>\n\n\n<li><strong>One published source address.<\/strong> All eight attempts Previdian observed came from <code>89.116.89[.]18<\/code> (<a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security<\/a>). Treat it as a single data point, not a blocklist.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Investigate, contain and fix<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Stop the bleeding.<\/strong> If you cannot patch right now, disable password authentication (drop-in file below) or turn SSH off on the host.<\/li>\n\n\n<li><strong>Patch.<\/strong> Upgrade to the fixed package for your Alpine branch, or to OpenSSH 10.6p2 upstream.<\/li>\n\n\n<li><strong>Restart sshd.<\/strong> Alpine notes that upgrading the package does not restart a running sshd.<\/li>\n\n\n<li><strong>Hunt.<\/strong> Run the log and account checks above on every host that met all five conditions.<\/li>\n\n\n<li><strong>Decide on compromise.<\/strong> Alpine\u2019s advice is blunt: \u201cIf a login cannot be ruled out, treat the machine as compromised\u201d (<a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine advisory<\/a>). For containers and cloud images that usually means rebuilding from a patched image and rotating any credentials the host held (MAG212 CYBER analysis).<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Alpine Linux, root shell, makes changes:<\/strong> upgrade all packages including openssh, then restart sshd.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apk upgrade -U -a\nrc-service sshd restart<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Alpine Linux, root shell, makes changes (workaround):<\/strong> create <code>\/etc\/ssh\/sshd_config.d\/00-no-passwords.conf<\/code> containing the single line <code>PasswordAuthentication no<\/code>, then validate the configuration and restart only if validation passes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sshd -t &amp;&amp; rc-service sshd restart<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Alpine Linux, root shell, read-only:<\/strong> confirm the effective setting.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sshd -T | grep -i passwordauthentication<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>MAG212 CYBER did not test these commands; syntax is taken from the cited source. Read the vendor advisory before running anything in production.<\/em> Source for all three: <a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine advisory<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to confirm you\u2019re clean<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The installed <code>openssh<\/code> package matches or exceeds the fixed version for your branch.<\/li>\n\n\n<li>sshd was restarted after the upgrade (check the process start time).<\/li>\n\n\n<li><code>sshd -T<\/code> reports <code>passwordauthentication no<\/code> wherever you applied the workaround.<\/li>\n\n\n<li>A fresh log search shows no new <code>Accepted password for<\/code> entries for passwordless accounts.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Lessons for admins, staff and leaders<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Admins:<\/strong> make key-only SSH the baseline everywhere, and don\u2019t run sshd inside containers that don\u2019t need it. Base images inherit their operating system\u2019s authentication quirks.<\/li>\n\n\n<li><strong>Security teams:<\/strong> Previdian warns that proof-of-concept code circulating on GitHub is unverified and may itself contain malware (<a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security<\/a>). Don\u2019t run it to \u201ctest\u201d production.<\/li>\n\n\n<li><strong>Leaders:<\/strong> a three-day KEV deadline with forensic triage is CISA\u2019s signal that this is being used now. Ask for an inventory of Alpine and other musl-based hosts that expose SSH, with an owner for each.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What we still don\u2019t know<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A verified CVSS score from the vendor or NVD.<\/li>\n\n\n<li>How many internet-facing hosts meet all five conditions.<\/li>\n\n\n<li>What attackers install after logging in, beyond the reported botnets and cryptominers.<\/li>\n\n\n<li>Whether network and IoT vendors that build on OpenWrt, Buildroot or Yocto ship vulnerable OpenSSH builds.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Related on MAG212 CYBER<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cyber.mag212.com\/mag212-cyber-daily-2026-11-10-openssh-sshole-sonicwall-qubole\/\">MAG212 CYBER Daily, 10 November 2026: Attackers walk in through trusted doors<\/a><\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/alpinelinux.org\/posts\/2026-11-05-openssh-password-authentication-bypass\/\" target=\"_blank\" rel=\"noopener\">Alpine Linux: OpenSSH password authentication bypass (5 Nov 2026)<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.openssh.org\/releasenotes.html\" target=\"_blank\" rel=\"noopener\">OpenSSH 10.6p2 release notes<\/a><\/li>\n\n\n<li><a href=\"https:\/\/raw.githubusercontent.com\/cisagov\/kev-data\/develop\/known_exploited_vulnerabilities.json\" target=\"_blank\" rel=\"noopener\">CISA Known Exploited Vulnerabilities catalog, v2026.11.09<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.helpnetsecurity.com\/?p=390599\" target=\"_blank\" rel=\"noopener\">Help Net Security: sshole exploitation (6 Nov 2026)<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.securityweek.com\/hackers-exploiting-sshole-authentication-bypass-in-openssh\/\" target=\"_blank\" rel=\"noopener\">SecurityWeek: Hackers exploiting SSHole (9 Nov 2026)<\/a><\/li>\n\n<\/ul>\n\n","protected":false},"excerpt":{"rendered":"<p>An OpenSSH bug lets a 257\u20131,024-byte password log in to accounts whose password field is \u201c*\u201d on Alpine and other musl Linux without PAM. It is exploited, and CISA set a 12 November deadline. Who is affected, the fixed packages, the workaround and what to hunt for.<\/p>","protected":false},"author":1,"featured_media":4115,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,15,14],"tags":[211,62,160,210],"class_list":["post-4117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-critical-cves","category-threat-intelligence","category-vulnerabilities","tag-alpine-linux","tag-cisa-kev","tag-linux","tag-openssh"],"_links":{"self":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/posts\/4117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/comments?post=4117"}],"version-history":[{"count":1,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/posts\/4117\/revisions"}],"predecessor-version":[{"id":4139,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/posts\/4117\/revisions\/4139"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/media\/4115"}],"wp:attachment":[{"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/media?parent=4117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/categories?post=4117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyber.mag212.com\/fr\/wp-json\/wp\/v2\/tags?post=4117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}