flawopen.com/Teardowns/cve-2026-61500-rejetto-hfs-predictable-session-key
CVE-2026-61500: Vorhersagbarer Sitzungssignaturschlüssel in Rejetto HFS
Rejetto HFS 3.0.0–3.2.0 verwendete von Math.random() abgeleitete Werte für Sitzungssignaturen und beim Login. Laut Horizon3 ermöglichte die Offenlegung Sitzungsfälschungen; VulnCheck zufolge wurde ab dem 1. Oktober Ausnutzungsaktivität beobachtet. Aktualisieren Sie auf 3.2.1 oder neuer; eine konkrete Opferkompromittierung ist nicht bestätigt.[1], [4], [5]
Eine Cookie-Signatur ist wie ein Wachssiegel auf einem Administrationsausweis. HFS erzeugte das Geheimnis für das Siegel aus einer vorhersagbaren Zahlenfolge, während die Anmeldung weitere Zahlen aus derselben Folge preisgab. Wer das Geheimnis ableitet, kann das Siegel fälschen. Der Patch verwendet kryptografische Zufallswerte von Node.js.[1], [3]
Kernkonzepte & Begriffe
Sitzungssignaturschlüssel- Ein Geheimnis, mit dem Koa Sitzungscookies signiert, damit Manipulationen erkannt werden.[1], [3]
Math.random()- Eine allgemeine Pseudozufalls-API, die sich nicht zur Erzeugung kryptografischer Geheimnisse eignet.[6], [4]
CWE-338- Verwendung eines kryptografisch schwachen Pseudozufallszahlengenerators; diese Schwäche ist dem CVE-Eintrag zugeordnet.[1], [6]
PRNG-Zustand- Interner Zustand, der die nächsten Pseudozufallswerte bestimmt. Wird derselbe Generator für ein Geheimnis und beobachtbare Werte genutzt, können Zusammenhänge sichtbar werden.[4]
Entdeckungskontext- Horizon3 zufolge identifizierte und validierte ein Mythos-gestütztes Multi-Agenten-Forschungssystem diese HFS-Schwachstellenkette. Das beschreibt die Entdeckung durch Forschende; es ist weder eine Schwachstelle in Mythos noch ein Beleg für einen autonomen KI-Angriff auf eine reale HFS-Installation.[4]
Framework-Zuordnungen
- CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-338
Ursachenanalyse
Der CVE-Eintrag nennt HFS 3.0.0 bis 3.2.0 und CWE-338. Im Upstream-Commit 59472e5 übergab der verwundbare Code Koa [randomId(30)]; randomId() verwendete Math.random(). Der Fix ersetzt dies durch [randomBytes(32).toString('base64url')] aus node:crypto. Derselbe Commit ersetzt außerdem Math.random() durch randomUUID() für die öffentliche Anmelde-Handshake-ID. Horizon3 berichtet, dass unauthentifiziert erreichbare Anmeldeantworten genügend zusammenhängende Ausgaben offenlegten, um den V8-PRNG-Zustand wiederherzustellen und den Cookie-Signaturschlüssel abzuleiten. Mit einer gefälschten Administratorsitzung konnten integrierte Verwaltungsfunktionen zur serverseitigen Codeausführung führen. Dieser Artikel beschreibt die Kette auf hoher Ebene, ohne Solver, Anfragen oder Payloads wiederzugeben. VulnCheck zufolge beobachtete Canary Intelligence ab dem 1. Oktober 2026 Ausnutzungsaktivität; berichtet wurde dies am 2. Oktober. Die Telemetrie benennt keine kompromittierte HFS-Installation.[1], [3], [4], [5]
Schritt-für-Schritt Angriffsablauf
Die Schwäche überwindet die Sitzungsschranke
Laut Horizon3 ermöglichten die Ausgaben eine Wiederherstellung des PRNG-Zustands und damit das Fälschen einer Sitzungssignatur für Administratorzugriff. Die genaue Wiederherstellungsmethode wird ausgelassen.[4]
Administrationszugriff kann Codeausführung erreichen
Horizon3 beschreibt die Kette bis zur HFS-Funktion server_code. VulnCheck zufolge beobachtete Canary Intelligence ab dem 1. Oktober 2026 Ausnutzungsaktivität, wie der Bericht vom 2. Oktober festhält; diese Telemetrie belegt keine Kompromittierung einer bestimmten Installation.[4], [5]
Quellcode: Verwundbar vs. Sicher
Diese Auszüge entsprechen dem tatsächlichen Upstream-Commit. randomBytes(32) liefert 256 Bit aus dem Kryptografiemodul von Node.js für den Schlüssel; randomUUID() ersetzt die Quelle der öffentlichen Anmelde-ID. Geheimnisse zur Sitzungsauthentifizierung müssen aus einer kryptografischen Quelle stammen und unabhängig von beobachtbaren Ausgaben des Anwendungs-PRNG sein. Aktualisieren Sie auf HFS 3.2.1 oder eine neuere unterstützte Version; der Auszug erläutert die Änderung und ist kein eigenständiger Patch. Dies sichert nur den generierten Standardwert ab: Ist COOKIE_SIGN_KEYS konfiguriert, muss jeder vorgegebene Schlüssel ebenfalls unabhängig mit kryptografischer Zufälligkeit erzeugt, geheim gehalten und bei Offenlegung rotiert werden.[3], [1]
Quelltextauszug: src/index.ts (Cookie-Signaturschlüssel) und src/api.auth.ts (ID des Login-Handshakes, Upstream-Commit 59472e5)
import { httpStream, randomId } from './misc'
const keys = process.env.COOKIE_SIGN_KEYS?.split(',')
|| [randomId(30)]
export const app = new Koa({ keys })
const sid = Math.random()
import { randomBytes, randomUUID } from 'node:crypto'
const keys = process.env.COOKIE_SIGN_KEYS?.split(',')
|| [randomBytes(32).toString('base64url')]
export const app = new Koa({ keys })
const sid = randomUUID()
Checkliste für Engineering & Systemsicherheit
- ✓Aktualisieren Sie HFS 3.0.0–3.2.0 auf 3.2.1 oder neuer; bevorzugen Sie die aktuellste unterstützte stabile Version.[2], [1]
- ✓Inventarisieren Sie alle HFS-Instanzen auf Windows-Hosts, in Containern, Testumgebungen und internetfähigen Dateifreigaben; erfassen Sie Version und Erreichbarkeit.[4]
- ✓Falls ein sofortiges Upgrade nicht möglich ist, beschränken Sie den Zugriff auf vertrauenswürdige Netze und entfernen Sie die öffentliche Erreichbarkeit bis zum Update. Das senkt die Exposition, behebt aber nicht die schwache Schlüsselgenerierung.[4]
- ✓Nach dem Update jeder Instanz, die während der Verwundbarkeit öffentlich erreichbar war, müssen alle bestehenden Sitzungen ungültig gemacht und konfigurierte
COOKIE_SIGN_KEYSrotiert werden. Werden unbefugte Administratoraktivitäten festgestellt, sind auch die Administratorkennwörter zu ändern. Protokolle zur Prüfung aufbewahren.[1], [4] - ✓Behandeln Sie beobachtete Sondierungen als Anlass zur Untersuchung, nicht als Kompromittierungsnachweis. Sichern Sie Protokolle und prüfen Sie unautorisierte Konfigurationsänderungen oder Codeausführung.[5], [4]
- ✓Prüfen Sie bei Node.js-Anwendungen, ob jeder konfigurierte
COOKIE_SIGN_KEYS-Wert unabhängig kryptografisch erzeugt, geheim gehalten und bei Offenlegung rotiert wird; der sichere Standardwert prüft keine Überschreibungen. Verwenden Sie für andere Geheimnissenode:crypto-APIs wierandomBytes(). Leiten Sie Signaturschlüssel, Reset-Tokens oder Berechtigungswerte niemals ausMath.random()ab.[3], [6]