
Semgrep-Regeln, die Header-Trust-Authentifizierungsumgehungsmuster (CVE-2025-29927-Klasse) kennzeichnen. Begleitprojekt zu bk-security.github.io.
Ein kleines Semgrep-Regelpaket, das Code erkennt, der Authentifizierungs-, Autorisierungs- oder Vertrauensentscheidungen auf Basis von HTTP-Request-Headern trifft, die ein Angreifer kontrollieren kann.
Das kanonische Beispiel für diese Schwachstellenklasse ist CVE-2025-29927: Next.js vertraute dem x-middleware-subrequest-Header, um zu entscheiden, ob Middleware ausgeführt wurde – und jede eingehende Anfrage mit einem manipulierten Wert konnte die Middleware vollständig umgehen. Dieses Muster tritt in verschiedenen Frameworks und Ökosystemen immer wieder auf.
Dieses Paket enthält Regeln für zwei Sprachfamilien und drei Unterklassen des Bugs. Es ist als Code-Review-Hilfe gedacht, nicht als vollständig abgestimmte CI-Absicherung. Die Regeln legen Wert auf hohe Erkennungsrate (Recall) statt Präzision und werden am besten interaktiv ausgeführt, wobei ein Mensch über jeden Fund entscheidet.
Eine ausführlichere Beschreibung der Schwachstellenklasse und der Designentscheidungen hinter diesem Paket finden Sie unter bk-security.github.io.
| Regel | Sprache | Schweregrad | Erfasst |
|---|---|---|---|
nodejs-header-flag-auth-bypass | JS / TS | Warning | Einlesen von Headern, deren Name auf internen Protokoll- oder Auth-Bypass-Gebrauch hindeutet (x-internal, x-bypass-auth, x-middleware-subrequest, x-admin-override, x-impersonate usw.) |
nodejs-header-as-identity | JS / TS | Warning | Einlesen von Headern, die üblicherweise zur Übertragung der Benutzeridentität verwendet werden (x-forwarded-user, x-authenticated-user, x-remote-user usw.) |
nodejs-forwarded-for-trust | JS / TS | Info | Einlesen von x-forwarded-for, x-real-ip und ähnlichen Quell-IP-Headern, die häufig für Sicherheitsentscheidungen verwendet werden |
python-header-flag-auth-bypass | Python | Warning | Gleiche Funktionsweise wie die Node.js-Variante, inklusive Django-artigem request.META["HTTP_X_*"]-Zugriff |
python-header-as-identity | Python | Warning | Gleiche Funktionsweise wie die Node.js-Variante, Python-Version |
python-forwarded-for-trust | Python | Info | Gleiche Funktionsweise wie die Node.js-Variante, Python-Version |
Semgrep installieren:
pip install semgrep
Das Paket gegen ein Ziel ausführen:
semgrep --config /path/to/auth-header-trust-rules/rules /path/to/target
Oder eine einzelne Regel ausführen:
semgrep --config /path/to/auth-header-trust-rules/rules/nodejs/header-flag-auth-bypass.yaml /path/to/target
Die Regeln gegen die mitgelieferten Testfixtures validieren:
semgrep --test --config rules/ tests/
Erwartete Ausgabe:
6/6: ✓ All tests passed
Die Regeln gleichen eine kuratierte Liste von Headernamen ab, die bekanntermaßen gefährlich sind, wenn man ihnen vertraut. Sie werden die häufigen Fälle erkennen. Sie werden jedoch nicht erkennen:
getInternalFlag(req), der x-some-novel-name liest, wird nicht erfasst.x-internal-*, x-trust-* und x-bypass-*, aber neue Namen werden durchschlüpfen.Wenn das Paket für eine bestimmte Codebasis erweitert wird, sind die wertvollsten Ergänzungen in der Regel frameworkspezifische Helfer-Funktionsmuster. Wenn eine Codebasis einen Helfer isInternalRequest(req) hat, ist die Regel, die ihn erfasst, eine einzige Zeile YAML.
rules/<lang>/<name>.yaml.tests/<lang>/<name>.<ext> mit positiven Beispielen, die mit # ruleid: <rule-id> gekennzeichnet sind, und negativen Beispielen, die mit # ok: <rule-id> gekennzeichnet sind.semgrep --test --config rules/ tests/ aus. Die neue Regel und das Fixture werden automatisch erkannt; Tests müssen bestanden sein, bevor eine Änderung eingereicht wird.MIT.
Bruce Kang. Der Quellcode des Begleitblogbeitrags befindet sich unter bk-security.github.io.