Für Uneingeweihte: ein JSON Web-Signatur dekodieren Der Vorgang scheint trivial zu sein - eine einfache Base64URL-Dekodierung, um die Angaben in einem Token anzuzeigen. Doch für Sicherheitsingenieure, Penetrationstester und KI-Sicherheitsforscher ist die "Entschlüsselung" nur die Erkundungsphase eines viel komplexeren Schlachtfelds.
Während Entwickler die Dekodierung verwenden, um Authentifizierungsabläufe zu debuggen, nutzen Angreifer sie, um die Signierlogik zurückzuentwickeln. Die Lücke zwischen Dekodierung eine Wertmarke und Überprüfung von Seine Integrität ist der Ort, an dem die gefährlichsten Schwachstellen bei der Umgehung der Authentifizierung in der Geschichte der modernen API entstanden sind.
Dieser Artikel untersucht die Anatomie von JWS, analysiert kritische Überprüfungsfehler, darunter auch CVEs mit hoher Auswirkung, und erforscht, wie KI-gesteuerte Sicherheit - wie die Motoren, die Sträflich-ändert die Art und Weise, wie wir diese kryptografischen Mechanismen prüfen.

Die Anatomie eines JWS: Mehr als nur Base64
Bevor wir die Exploits analysieren, müssen wir uns an der Struktur orientieren, die in RFC 7515. Eine JSON-Web-Signatur (JWS) stellt Inhalte dar, die mit einer digitalen Signatur oder einem Message Authentication Code (MAC) gesichert sind.
Ein kompakter JWS-String besteht aus drei Teilen, die durch Punkte getrennt sind (.):
Header.Payload.Signature
Die Dekodierlogik
Wenn Sie eine json web signatur dekodierenkonvertieren Sie im Wesentlichen die ersten beiden Segmente vom Base64URL-Format zurück in JSON.
Hier ist eine Python-Rohimplementierung für Sicherheitsforscher, die CLI gegenüber webbasierten Tools bevorzugen, die möglicherweise sensible Token protokollieren:
Python
`import sys import json import base64
def padding_fix(data): missing_padding = len(data) % 4 if missing_padding: data += '=' * (4 - missing_padding) return data
def decode_jws(token): try: header_b64, payload_b64, signature_b64 = token.split('.')
header = json.loads(base64.urlsafe_b64decode(padding_fix(header_b64)))
payload = json.loads(base64.urlsafe_b64decode(padding_fix(payload_b64)))
return header, payload
except ValueError:
print("[-] Ungültiges Token-Format")
sys.exit(1)
Verwendungskontext
header, payload = decode_jws(sys.argv[1])
print(json.dumps(header, indent=2))`
Die Ausgabe eines Dekodiervorgangs enthält in der Regel die Metadaten, die vorgeben, wie die Überprüfung sollte passieren. Diese Metadaten sind das Hauptziel der Angreifer.
| Kopfzeile Parameter | Beschreibung | Auswirkungen auf die Sicherheit |
|---|---|---|
alg | Algorithmus (z. B. HS256, RS256) | Legt das Krypto-Primitiv fest. Primäres Ziel für Downgrade-Angriffe. |
Typ | Token-Typ (z. B. JWT) | Wird oft ignoriert, kann aber zur Verwechslung von Typen verwendet werden. |
Kind | Schlüssel-ID | Gibt Hinweise, welche Taste zu verwenden ist. Kann manipuliert werden für Verzeichnis Traversal oder SQL-Einschleusung in seltenen Fällen. |
jku / x5u | JSON Web-Schlüssel-URL | Verweist auf die URL des öffentlichen Schlüssels. Ziel für SSRF oder böswilliges Keyhosting. |

Die "Decode-Verify"-Lücke: Wo Schwachstellen leben
Das Kernproblem besteht darin, dass viele Bibliotheken und kundenspezifische Implementierungen die dekodieren Schritt vom Überprüfen Sie Schritt. Eine Anwendung könnte den Header dekodieren, um die alg und verwenden dann diese benutzergesteuerte Eingabe, um zu entscheiden, wie die Signatur geprüft werden soll.
1. Die Umgehung des "Keine"-Algorithmus
Dies ist das "Hello World" der JWS-Exploits, das jedoch in Altsystemen fortbesteht. Wenn sich eine Backend-Implementierung auf die alg Header aus dem entschlüsselten Token, um die Verifizierungslogik zu bestimmen, kann ein Angreifer das Token verändern:
- Dekodieren die Kopfzeile.
- Ändern Sie
algzukeine(oderKeine,KEINE). - Entfernen Sie die Unterschrift.
Wenn die Bibliothek unterstützt keine (für die Fehlersuche) und nicht auf der Whitelist der Algorithmen steht, wird die Signaturprüfung vollständig übersprungen.
2. Algorithmus-Konfusion (Schlüsselkonfusion)
Dies ist ein raffinierterer Angriff. Er tritt auf, wenn ein Server sowohl symmetrische (HMAC) als auch asymmetrische (RSA/ECDSA) Signaturen unterstützt, aber nicht überprüfen kann, welche davon für einen bestimmten Schlüssel verwendet wird.
- Szenario: Der Server erwartet ein RS256-Token (signiert mit einem privaten Schlüssel, verifiziert mit einem öffentlichen Schlüssel).
- Attacke: Der Angreifer führt eine json web signatur dekodieren, Änderungen
algzuHS256(HMAC), und signiert das Token mit dem Server Öffentlicher Schlüssel als das HMAC-Geheimnis. - Ergebnis: Da der öffentliche Schlüssel dem Client oft zur Verfügung steht (oder leicht zugänglich ist), kann der Angreifer eine gültige Signatur fälschen, die der Server mit seinem eigenen öffentlichen Schlüssel überprüft (wobei er ihn wie ein HMAC-Geheimnis behandelt).
Fallstudie: CVE-2022-21449 ("Psychic Paper")
Während die Verwirrung des Algorithmus ein logischer Fehler ist, liegen einige Schwachstellen tief in der kryptografischen Implementierung selbst.
CVE-2022-21449 (CVSS 7.5), auch "Psychic Paper" genannt, betraf die Java-Implementierung von ECDSA-Signaturen. Es ist ein Paradebeispiel dafür, warum die bloße Überprüfung, ob eine "Signatur existiert", nicht ausreicht.
Der Mechanismus
Bei ECDSA beinhaltet die Überprüfung eine mathematische Gleichung: $v = R'$ (vereinfacht). Die Schwachstelle lag in Javas ECDSA Implementierung, bei der, wenn die Signaturteile $r$ und $s$ beide auf 0würde die Verifizierungslogik fälschlicherweise Folgendes zurückgeben wahr für jede Nutzlast.
Ein Angreifer könnte:
- Dekodieren ein rechtmäßiger JWS.
- Ändern Sie die Nutzlast (z.B.,
{"admin": true}). - Konstruieren Sie eine Signatur mit $r=0$ und $s=0$.
- Senden Sie es an ein Java-basiertes Backend (mit Java 15, 16, 17 oder 18).
Der Server würde die Signatur als gültig verifizieren und damit eine vollständige Umgehung der Authentifizierung ermöglichen. Dies zeigt, dass selbst weit verbreitete Standardbibliotheken nicht vor katastrophalen Fehlern gefeit sind.
KI-gesteuerte JWS-Prüfung: Der Penligent-Ansatz
Die manuelle Analyse von JWS-Tokens ist für einzelne Exploits effektiv, aber moderne Microservices-Architekturen verwenden oft Hunderte von verschiedenen Schlüsseln, Rotationsrichtlinien und Algorithmuskonfigurationen. Ein menschlicher Ingenieur kann nicht manuell json web signatur dekodieren und testen jede Permutation von Header-Injection, Schlüsselkonfusion und bibliotheksspezifischen Umgehungen über eine gesamte Angriffsfläche.
An dieser Stelle werden KI-gesteuerte automatisierte Penetrationstests unerlässlich.
Sträflich nutzt fortschrittliche Large Language Models (LLMs) und Reinforcement Learning, um diese Tiefe der Prüfung zu automatisieren. Im Gegensatz zu herkömmlichen Scannern, die statische Regex verwenden, um nach bekannten schädlichen Zeichenfolgen zu suchen, ist die Penligent-Engine:
- Kontextuelle Dekodierung: Es fängt den Datenverkehr ab, entschlüsselt JWS-Token und versteht den Kontext (z. B. "Dieses Token wird für das Zahlungs-Gateway verwendet, nicht nur für die Anmeldung").
- Adaptive Nutzlasterzeugung: Es wird nicht nur versucht
alg: keine. Er analysiert die Fehlerantworten des Servers, um auf die Backend-Bibliothek zu schließen. Wenn er eine Java-Umgebung erkennt, könnte er Variationen von CVE-2022-21449 versuchen. Wenn er siehtKindParametern prüft er auf SQL-Injection oder Command-Injection über Key ID. - Logische Flussanalyse: Penligent kann erkennen, ob ein Token an einem Endpunkt korrekt verifiziert wurde, aber einfach entschlüsselt und ohne Überprüfung in einem sekundären Mikrodienst vertrauenswürdig ist - ein häufiger Architekturfehler.
Durch die Integration intelligenter JWS-Analysen geht Penligent über das einfache Scannen von Schwachstellen hinaus und wird zum autonomes Red TeamingDadurch wird sichergestellt, dass kryptografische Implementierungen sowohl gegen bekannte CVEs als auch gegen Zero-Day-Logikfehler robust sind.
Härtungsrichtlinien für Ingenieure
Um Anwendungen gegen JWS-Angriffe zu schützen, müssen wir von "implizitem Vertrauen" zu "expliziter Verifizierung" übergehen.
1. Algorithmus-Whitelisting durchsetzen
Verlassen Sie sich niemals auf die alg Header aus dem dekodierten Token, um die Verifizierungsmethode zu bestimmen. Kodieren Sie den erwarteten Algorithmus in Ihrem Verifizierer fest.
JavaScript
// Sicherer Ansatz (Node.js jose-Bibliothek) const verified = await jose.jwtVerify(token, secretKey, { algorithms: ['RS256'], // Explizite Whitelist NUR RS256 });
2. Validieren Sie die Kind (Schlüssel-ID) STRICTLY
Wenn Ihre Einrichtung mehrere Schlüssel (JWKS) verwendet, stellen Sie sicher, dass die Kind Kopfzeile mit einem Schlüssel in Ihrer Whitelist übereinstimmt. Übergeben Sie nicht den Kind Wert direkt an eine Datenbankabfrage oder einen Dateisystemaufruf übergeben.
3. Moderne Bibliotheken nutzen
Vermeiden Sie es, Ihre eigenen Krypto-Wrapper zu schreiben. Verwenden Sie kampferprobte Bibliotheken wie jose (Node.js), PyJWT (Python), oder jjwt (Java). Stellen Sie jedoch sicher, dass Sie die Sicherheitsbulletins für diese Bibliotheken abonniert haben.
4. Dekodieren und Verifizieren trennen (logisch)
Verstehen Sie, dass json web signatur dekodieren ist für Anzeige Zwecke (UI, Protokollierung). Überprüfen Sie ist für Genehmigung. Verwenden Sie niemals dekodierte Daten für die Geschäftslogik, bevor der Verifizierungsschritt zurückkehrt wahr.
Schlussfolgerung
Die Fähigkeit zur json web signatur dekodieren ist eine grundlegende Fähigkeit, aber sie kratzt nur an der Oberfläche. Für den Sicherheitstechniker ist das rohe JSON eine Karte mit potenziellen Fehlkonfigurationen. Vom klassischen "None"-Algorithmus bis hin zu mathematischen Umgehungen wie CVE-2022-21449 - die Integrität des Webs hängt von einer strengen Überprüfung ab, nicht nur von einer erfolgreichen Dekodierung.
Da die Komplexität von Anwendungen zunimmt, ist der Einsatz von KI-gestützten Tools wie Sträflich um die Erkennung dieser subtilen kryptografischen Schwachstellen zu automatisieren, wird zu einer Notwendigkeit für eine robuste Sicherheitslage in Unternehmen.
Referenzen:

