
Benutzernamens-Enumeration über Authentifizierungs-Timing-Seitenkanal in PaperCut NG
| Feld | Details |
|---|---|
| CVE-ID | CVE-2026-8794 |
| Produkt | PaperCut NG |
| Betroffene Version | 25.0.11 (Build 75758) und früher |
| CWE | CWE-208 — Beobachtbare Timing-Diskrepanz |
| CVSS-Score | 3.7 (Niedrig) — eigenständig; eskaliert, wenn sie mit CVE-2026-8793 kombiniert wird |
| Forscher | Vivien LEBAS (@Hazaz) |
| Gemeldet | Mai 2026 |
| Status | Behoben — PaperCut NG 26.0.3 |
Der Authentifizierungs-Endpunkt von PaperCut NG weist eine messbare Timing-Diskrepanz zwischen Anmeldeversuchen mit vorhandenen und nicht vorhandenen Konten auf. Diese Diskrepanz — verursacht durch den bcrypt-Passwort-Hash, der nur durchgeführt wird, wenn ein passendes Konto gefunden wird — ermöglicht es einem nicht authentifizierten Angreifer, durch Messung der HTTP-Antwortzeiten zuverlässig zu bestimmen, ob ein bestimmter Benutzername im System existiert.
In Kombination mit CVE-2026-8793 (fehlender Brute-Force-Schutz) ermöglicht diese Schwachstelle eine vollständige Angriffskette zur Kompromittierung von Anmeldedaten: Zuerst gültige Benutzernamen enumerieren, anschließend unbegrenztes gezieltes Passwort-Raten ohne Sperrrisiko durchführen.
Die Timing-Diskrepanz beruht auf einem klassischen Implementierungsmuster: Die Anwendung führt den bcrypt-Vergleich nur dann aus, wenn ein Konto gefunden wird, das zum übermittelten Benutzernamen passt. Bei nicht vorhandenen Konten bricht die Authentifizierungsroutine vor dem bcrypt-Aufruf ab, was zu einer messbar kürzeren Antwortzeit führt.
Gültiger Benutzername: DB-Abfrage (gefunden) → bcrypt-Vergleich → Fehlerantwort ~2,1 s Ø
Ungültiger Benutzername: DB-Abfrage (nicht gefunden) → sofortige Fehlerantwort ~0,2 s Ø
Dieses Muster ist gut dokumentiert (siehe CWE-208). Die Standard-Gegenmaßnahme besteht darin, selbst dann einen Dummy-bcrypt-Vergleich durchzuführen, wenn das Konto nicht existiert, wodurch die Antwortzeiten beider Codepfade angeglichen werden.
Anmeldeversuche wurden unter kontrollierten Bedingungen gegen den Login-Endpunkt von PaperCut NG durchgeführt:
curl mit --write-out "%{time_total}", in allen Fällen absichtlich falsches PasswortDie beiden Verteilungen zeigen keinerlei Überlappung, wodurch die Enumeration selbst bei mäßigem Netzwerk-Jitter zuverlässig ist.
# Antwortzeit für ein vorhandenes Konto messen (falsches Passwort)
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<target>:9191/app" \
-H "Origin: http://<target>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=admin&inputPassword=wrongpassword"
# Ausgabe: ~2,1 s
# Antwortzeit für ein nicht vorhandenes Konto messen
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<target>:9191/app" \
-H "Origin: http://<target>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=zz_doesnotexist_zz&inputPassword=wrongpassword"
# Ausgabe: ~0,2 s
Eine Antwortzeit deutlich über ~0,5 s weist zuverlässig auf einen gültigen Benutzernamen hin. Ein einfaches Skript kann die Enumeration gegen eine Wortliste gängiger Unternehmens-Benennungsmuster (vorname.nachname, fnachname usw.) automatisieren.
Diese Erkenntnis ist am wirkungsvollsten, wenn sie als erster Schritt einer zweistufigen Attacke eingesetzt wird:
Schritt 1 (CVE-2026-8794, dieser Befund) — Durch das Timing von Authentifizierungsantworten eine Liste gültiger PaperCut-NG-Kontonamen erstellen. In Unternehmensumgebungen reicht oft eine kurze Wortliste mit vorname.nachname-Kombinationen aus, die aus öffentlichen Quellen (LinkedIn, Unternehmenswebsite, E-Mail-Signaturen) abgeleitet wurde.
Schritt 2 (CVE-2026-8793) — Unbegrenzte Passwortversuche gegen bestätigte gültige Konten durchführen. Das Fehlen von Rate-Limiting oder Sperrmechanismen bedeutet, dass jeder Credential-Stuffing- oder Password-Spraying-Angriff vollständig online und mit voller Geschwindigkeit durchgeführt werden kann.
Ein nicht authentifizierter Angreifer mit Netzwerkzugriff auf TCP/9191 kann:
In typischen Unternehmensbereitstellungen spiegeln PaperCut-Benutzernamen Active-Directory-Konten wider. Ein bestätigter gültiger PaperCut-Benutzername ist daher auch ein bestätigter gültiger Domänenkontoname, was den Aufklärungswert über PaperCut hinaus erhöht.
Für Administratoren (Übergangsmaßnahmen):
Für den Hersteller:
Beim Einreichen eines Benutzernamens, der mit keinem Konto übereinstimmt, einen Dummy-bcrypt-Vergleich in konstanter Zeit durchführen, damit die Antwortzeiten unabhängig davon, ob das Konto existiert, angeglichen werden:
# Pseudocode — Authentifizierungsmuster in konstanter Zeit
user = db.find_user(username)
if user:
valid = bcrypt.verify(password, user.password_hash)
else:
bcrypt.verify(password, DUMMY_HASH) # immer ausführen, Ergebnis verwerfen
valid = False
Dies ist ein etabliertes Muster zur Abschwächung von CWE-208 in Authentifizierungsabläufen.
| Datum | Ereignis |
|---|---|
| 9. Mai 2026 | Erster Bericht an das PaperCut-Sicherheitsteam gesendet |
Offengelegt im Einklang mit den Grundsätzen verantwortungsvoller Offenlegung. Vollständige technische Details wurden dem PaperCut-Sicherheitsteam vor der öffentlichen Veröffentlichung mitgeteilt.
Forscher: Vivien LEBAS — @Hazaz
| Bedingung | Min (s) | Max (s) | Mittelwert (s) | Standardabw. |
|---|
Vorhandenes Konto (admin) | 2,08 | 2,19 | 2,13 | 0,031 |
Nicht vorhandenes Konto (zz_doesnotexist_zz) | 0,18 | 0,24 | 0,21 | 0,018 |
| Differenz | ~1,92 s |
| 10. Mai 2026 |
| Bestätigung erhalten |
| Mai 2026 | CVE-2026-8794 von PaperCut (CNA) vergeben |
| August 2026 | Patch veröffentlicht — PaperCut NG 26.0.3 |
| August 2026 | Öffentliche Offenlegung in Abstimmung mit dem Hersteller |