
Énumération de noms d'utilisateur via canal auxiliaire temporel d'authentification dans PaperCut NG
| Champ | Détails |
|---|---|
| ID CVE | CVE-2026-8794 |
| Produit | PaperCut NG |
| Version affectée | 25.0.11 (Build 75758) et versions antérieures |
| CWE | CWE-208 — Discrepance de temporisation observable |
| Score CVSS | 3.7 (Faible) — seul ; augmente lorsqu'il est chaîné avec CVE-2026-8793 |
| Chercheur | Vivien LEBAS (@Hazaz) |
| Signalé | Mai 2026 |
| Statut | Corrigé — PaperCut NG 26.0.3 |
Le point de terminaison d'authentification de PaperCut NG présente une différence de temporisation mesurable entre les tentatives de connexion visant des comptes existants et celles visant des comptes inexistants. Cette différence — causée par le fait que le hachage bcrypt du mot de passe n'est effectué que lorsqu'un compte correspondant est trouvé — permet à un attaquant non authentifié de déterminer de manière fiable si un nom d'utilisateur donné existe dans le système en mesurant les temps de réponse HTTP.
Lorsqu'elle est combinée à CVE-2026-8793 (absence de protection contre la force brute), cette vulnérabilité permet une chaîne d'attaque complète de compromission des identifiants : énumérer d'abord les noms d'utilisateur valides, puis effectuer des tentatives illimitées de devinette de mots de passe ciblées sans aucun risque de verrouillage.
La différence de temporisation provient d'un modèle d'implémentation classique : l'application n'invoque la comparaison bcrypt que lorsqu'un compte correspondant au nom d'utilisateur soumis est trouvé dans la base de données. Pour les comptes inexistants, la routine d'authentification se termine prématurément — avant l'appel à bcrypt — ce qui entraîne un temps de réponse mesurablement plus court.
Nom d'utilisateur valide : recherche en base (trouvé) → comparaison bcrypt → réponse d'échec ~2,1 s en moyenne
Nom d'utilisateur invalide : recherche en base (non trouvé) → réponse d'échec immédiate ~0,2 s en moyenne
Ce modèle est bien documenté (voir CWE-208). La correction standard consiste à effectuer une comparaison bcrypt factice même lorsque le compte n'existe pas, égalisant ainsi les temps de réponse sur les deux chemins de code.
Des tentatives d'authentification ont été effectuées contre le point de terminaison de connexion de PaperCut NG dans des conditions contrôlées :
curl avec --write-out "%{time_total}", mot de passe intentionnellement erroné dans tous les casLes deux distributions ne présentent aucun chevauchement, ce qui rend l'énumération fiable même en présence d'une gigue réseau modérée.
# Mesurer le temps de réponse pour un compte existant (mauvais mot de passe)
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<cible>:9191/app" \
-H "Origin: http://<cible>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=admin&inputPassword=motdepasseinvalide"
# Sortie : ~2,1 s
# Mesurer le temps de réponse pour un compte inexistant
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<cible>:9191/app" \
-H "Origin: http://<cible>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=zz_doesnotexist_zz&inputPassword=motdepasseinvalide"
# Sortie : ~0,2 s
Un temps de réponse nettement supérieur à ~0,5 s indique de manière fiable un nom d'utilisateur valide. Un simple script peut automatiser l'énumération contre une liste de mots de modèles de noms d'entreprise courants (prenom.nom, nprenom, etc.).
Cette découverte est la plus impactante lorsqu'elle est utilisée comme première étape d'une attaque en deux temps :
Étape 1 (CVE-2026-8794, cette découverte) — Construire une liste de noms de comptes PaperCut NG valides en mesurant la temporisation des réponses d'authentification. Dans les environnements d'entreprise, une courte liste de mots de combinaisons prenom.nom dérivées de sources publiques (LinkedIn, site web de l'entreprise, signatures d'e-mails) est souvent suffisante.
Étape 2 (CVE-2026-8793) — Soumettre des tentatives illimitées de mots de passe contre les comptes valides confirmés. L'absence de limitation de débit ou de verrouillage signifie que toute attaque de bourrage d'identifiants ou de pulvérisation de mots de passe peut être menée entièrement en ligne à pleine vitesse.
Un attaquant non authentifié ayant un accès réseau au port TCP/9191 peut :
Dans les déploiements d'entreprise typiques, les noms d'utilisateur PaperCut reflètent les comptes Active Directory. Un nom d'utilisateur PaperCut confirmé valide est donc également un nom de compte de domaine confirmé valide, ce qui amplifie la valeur de la reconnaissance au-delà de PaperCut lui-même.
Pour les administrateurs (atténuations provisoires) :
Pour l'éditeur :
Effectuer une comparaison bcrypt factice à temps constant lorsque le nom d'utilisateur soumis ne correspond à aucun compte, afin d'égaliser les temps de réponse que le compte existe ou non :
# Pseudo-code — modèle d'authentification à temps constant
user = db.find_user(username)
if user:
valid = bcrypt.verify(password, user.password_hash)
else:
bcrypt.verify(password, DUMMY_HASH) # toujours exécuté, résultat ignoré
valid = False
Il s'agit d'un modèle bien établi pour atténuer CWE-208 dans les flux d'authentification.
| Date | Événement |
|---|---|
| 9 mai 2026 | Rapport initial soumis à l'équipe de sécurité PaperCut |
| 10 mai 2026 |
Divulgué conformément aux principes de divulgation responsable. Les détails techniques complets ont été partagés avec l'équipe de sécurité PaperCut avant la publication publique.
Chercheur : Vivien LEBAS — @Hazaz
| Condition | Min (s) | Max (s) | Moyenne (s) | Écart type |
|---|
Compte existant (admin) | 2,08 | 2,19 | 2,13 | 0,031 |
Compte inexistant (zz_doesnotexist_zz) | 0,18 | 0,24 | 0,21 | 0,018 |
| Différence | ~1,92 s |
| Accusé de réception reçu |
| Mai 2026 | CVE-2026-8794 attribuée par PaperCut (CNA) |
| Août 2026 | Correctif publié — PaperCut NG 26.0.3 |
| Août 2026 | Divulgation publique coordonnée avec l'éditeur |