3 min de lecture
~16 minutes
CVE-2026-123158, alias SSHole : sur Linux avec musl et sans PAM, un compte dont le mot de passe vaut « * » acceptait n’importe quel mot de passe de 257 à 1024 octets. Pas de corruption mémoire, pas de crypto cassée : une valeur d’erreur prise pour un résultat. Voyons pourquoi cela n’a pas été détecté.
En 1980, Bill Joy met une étoile dans le champ mot de passe du compte daemon de 3BSD. Une étoile n’est pas un hash : aucun mot de passe ne peut la produire, donc personne ne se connecte. Quarante-six ans plus tard, Unix fait toujours la même chose. Sur Alpine, depuis la 3.16, c’est même la valeur de root.
Et pendant dix ans, sur une partie des machines musl, cette étoile a voulu dire l’inverse : n’importe quel mot de passe assez long faisait l’affaire.
OpenSSH, le projet qu’on cite en exemple
OpenSSH/OpenBSD arrivent toujours comme un exemple de SecureCoding. Dans OpenSSH, la séparation de privilèges est active par défaut depuis la 3.3. Le processus qui parle au réseau avant l’authentification est enfermé dans une sandbox sous Linux. Depuis la 10.0, le code pré-authentification vit même dans un binaire séparé, sshd-auth. Le projet utilise du fuzzing, une culture du freezero() et du explicit_bzero(), et une équipe réputée pour dire non aux fonctionnalités qui coûtent plus qu’elles ne rapportent.
Le dernier gros coup remontait à regreSSHion (CVE-2024-6387), une race condition dans un gestionnaire de signal sur les versions 8.5p1 à 9.7p1 : une régression d’un vieux correctif, dans du code qui manipulait la mémoire. Le genre de bug que toute cette architecture est faite pour contenir.
SSHole relève d’une autre famille : aucun octet ne déborde, aucun pointeur ne part dans le décor. Le code exécute ce qu’on lui a écrit, et accepte un mot de passe qu’il aurait dû refuser.
| Élément | Valeur (au 8 novembre 2026) |
|---|---|
| Identifiant | CVE-2026-123158 (CNA MITRE, publiée le 5 novembre 2026) |
| CVSS 3.1 | 8.1 (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CWE déclarée | CWE-394, Unexpected Status Code or Return Value |
| EPSS / KEV | 0,00976 (62e percentile) ; absente du catalogue KEV de la CISA |
| SSVC CISA | exploitation : poc ; automatable : no ; impact technique : total |
| Périmètre | OpenSSH portable avant 10.6p2, Linux, musl, sans PAM (ou UsePAM no), PasswordAuthentication yes |
| Correctif | 10.6p2 (5 novembre 2026), commit 4353fdc43ef6 de Damien Miller ; rétroporté par Alpine sur ses branches maintenues |
Le message de commit de Damien Miller est court, et une phrase mérite d’être encadrée : « We do not consider the root cause to be within OpenSSH but we are well equipped to avoid it. » La cause racine est ailleurs, le correctif est chez lui.
Au menu de la version Substack
La suite est publiée sur Substack. Vous y retrouvez :
- l’anatomie du défaut en quatre morceaux de code (musl,
sys_auth_passwd(),xcrypt()etpick_salt()), le schéma du flux et le patch, en accès libre ; - pour les abonnés Substack, la grille complète défaut, CWE, règle CERT C et contrôle manquant, avec 11 CWE et 8 règles commentées une par une ;
- pourquoi séparation de privilèges, sandbox, fuzzing et tests n’ont rien vu, avec le stub du harness de fuzzing et la décision prise dans le monitor privilégié ;
- la chronologie des correctifs empilés, de 1980 à 2022, et les cinq leçons de secure coding ;
- le scénario d’exposition, l’analyse STRIDE et le tableau d’impact potentiel ;
- les huit actions de mitigation pour lundi matin, et ce que je change côté développement.
L'anatomie du défaut est en accès libre ; l'analyse complète est réservée aux abonnés Substack.