Oauth Testing: Anwendung, typische Fehler, Praxiswissen und saubere Workflows
OAuth im Pentest richtig einordnen: Protokoll, Rollen und reale Angriffsfläche
OAuth wird in vielen Anwendungen unpräzise als Login-Verfahren bezeichnet. Technisch ist OAuth jedoch primär ein Autorisierungsframework. Die eigentliche Authentisierung wird häufig durch OpenID Connect ergänzt oder durch proprietäre Erweiterungen des Identity Providers umgesetzt. Genau an dieser Stelle entstehen in Tests regelmäßig Fehleinschätzungen: Wer nur auf die sichtbare Login-Maske schaut, übersieht die eigentliche Vertrauenskette zwischen Client, Authorization Server, Resource Server und Browser.
Im Test muss zuerst geklärt werden, welche Rolle die Zielanwendung tatsächlich einnimmt. Handelt es sich um einen OAuth Client, der Benutzer zu einem externen Identity Provider weiterleitet? Oder ist die Anwendung selbst Authorization Server und stellt Tokens aus? Ebenso wichtig ist die Frage, wo Tokens verarbeitet werden: im Browser, im Backend oder in mobilen Komponenten. Ohne diese Einordnung wird Burp zwar Requests aufzeichnen, aber keine belastbaren Aussagen über die Sicherheit des Flows liefern.
Ein typischer Fehler in Assessments besteht darin, nur den Callback-Endpunkt zu betrachten. Der eigentliche Angriffspfad beginnt oft deutlich früher: bei der Initialisierung des Flows, bei der Generierung von state, bei der Auswahl der redirect_uri, bei optionalen Parametern wie prompt, scope, response_mode oder bei clientseitigen JavaScript-Komponenten, die Tokens aus URL-Fragmenten extrahieren. Für die saubere Analyse ist ein stabiler Proxy-Aufbau mit Proxy, sauberem Scope über Scope und reproduzierbaren Wiederholungen im Repeater Pflicht.
OAuth-Tests sind keine reine Parameter-Manipulation. Sie verlangen Verständnis für Vertrauensgrenzen. Ein Access Token ist nur dann kritisch, wenn klar ist, gegen welche Ressource es akzeptiert wird. Ein Authorization Code ist nur dann verwertbar, wenn Bindungen an Client, Redirect URI oder PKCE fehlen oder fehlerhaft umgesetzt sind. Ein state-Parameter ist nur dann wirksam, wenn er serverseitig an die Session gebunden und beim Callback strikt validiert wird. Genau diese Bindungen sind der Kern jeder belastbaren Prüfung.
In realen Umgebungen laufen OAuth-Flows selten isoliert. Häufig greifen Session-Cookies, API-Gateways, Single-Sign-On, Reverse Proxies und JavaScript-SPAs ineinander. Deshalb überschneidet sich OAuth-Testing oft mit Login Testing, Session Management und API Testing. Wer diese Zusammenhänge nicht mitprüft, erkennt zwar einzelne Auffälligkeiten, aber nicht die eigentliche Ausnutzbarkeit.
Ein belastbarer Test beginnt daher nicht mit Payloads, sondern mit Modellbildung: Wer sendet welchen Request, mit welchem Kontext, über welchen Kanal, mit welcher Bindung und mit welcher erwarteten Rückkopplung? Erst wenn diese Fragen beantwortet sind, lohnt sich die eigentliche Manipulation.
Featured Empfehlung: Cybersecurity strukturiert lernen
Die relevanten OAuth-Flows im Test: Authorization Code, PKCE, Implicit, Device und Client Credentials
Nicht jeder Flow erzeugt dieselben Risiken. Der klassische Authorization Code Flow ist heute in Webanwendungen am häufigsten anzutreffen. Dabei wird der Benutzer zum Authorization Server umgeleitet, authentisiert sich dort und kehrt mit einem Code zur Anwendung zurück. Dieser Code wird anschließend serverseitig gegen Tokens eingetauscht. Der Sicherheitsgewinn liegt darin, dass Access Tokens nicht direkt über den Browser transportiert werden müssen. In der Praxis scheitert die Sicherheit aber oft an schwacher Redirect-Validierung, fehlender State-Prüfung oder mangelhafter Bindung des Codes an den Client.
PKCE erweitert den Authorization Code Flow um einen code_verifier und eine daraus abgeleitete code_challenge. Ursprünglich für öffentliche Clients wie Mobile Apps gedacht, ist PKCE heute auch bei Browser-basierten Anwendungen Standard. Im Test ist entscheidend, ob PKCE wirklich erzwungen wird oder nur optional vorhanden ist. Viele Implementierungen akzeptieren weiterhin Code-Einlösungen ohne gültigen Verifier oder erlauben schwache Fallbacks. Ebenso relevant ist, ob der Verifier im Frontend unnötig exponiert wird, etwa in Logs, lokalen Speicherbereichen oder Debug-Ausgaben.
Der Implicit Flow spielt in modernen Umgebungen eine geringere Rolle, taucht aber in Legacy-SPAs weiterhin auf. Hier werden Tokens direkt an den Browser zurückgegeben, oft im URL-Fragment. Das erhöht die Gefahr von Token-Leaks über Browser-Historie, Referrer-Fehlkonfigurationen, Third-Party-Skripte oder unsaubere JavaScript-Verarbeitung. Auch wenn viele Plattformen diesen Flow offiziell zurückdrängen, bleibt er in Altanwendungen ein lohnendes Ziel.
Der Device Authorization Flow ist in Smart-TV-, CLI- oder IoT-Szenarien relevant. Hier authentisiert sich der Benutzer auf einem zweiten Gerät und bestätigt einen User Code. Die Schwachstellen liegen weniger in Redirects, sondern eher in Polling-Mechanismen, Rate Limits, Vorhersagbarkeit von Codes und unzureichender Bindung zwischen Device Code und Benutzerkontext.
Client Credentials wiederum ist kein Benutzer-Flow, sondern ein Maschinen-zu-Maschinen-Verfahren. Trotzdem wird er oft falsch in Frontends eingebaut oder mit zu weitreichenden Scopes versehen. Wenn ein Client Secret in JavaScript, Mobile Bundles oder Desktop-Konfigurationen auftaucht, ist das kein kleiner Konfigurationsfehler, sondern ein Architekturproblem. In solchen Fällen verschiebt sich der Testfokus von Browser-Interaktion auf Secret Exposure, Token-Reuse und API-Berechtigungen.
- Authorization Code Flow: Fokus auf Code-Bindung, Redirect URI, State und Token-Austausch.
- Authorization Code mit PKCE: zusätzlich Prüfung auf erzwungene Verifier-Validierung und sichere Challenge-Verarbeitung.
- Implicit Flow: Fokus auf Token-Exposition im Browser und clientseitige Verarbeitung.
- Device Flow: Fokus auf User-Code-Schutz, Polling und Missbrauch fremder Geräte-Sessions.
- Client Credentials: Fokus auf Secret-Handling, Scope-Begrenzung und API-Missbrauch.
Vor jeder Manipulation muss klar sein, welcher Flow tatsächlich verwendet wird. Viele Anwendungen mischen mehrere Varianten, etwa Web-Login per Authorization Code und API-Zugriffe per Client Credentials. Ohne diese Trennung werden Requests falsch interpretiert und Schwachstellen falsch priorisiert.
Sauberer Burp-Workflow für OAuth: Scope, Intercept, Browser-Verhalten und reproduzierbare Sessions
OAuth-Tests scheitern oft nicht an fehlendem Fachwissen, sondern an unsauberem Mitschnitt. Redirect-Ketten, Cross-Domain-Wechsel, SameSite-Cookies, Browser-Schutzmechanismen und JavaScript-Navigation machen den Flow empfindlich. Deshalb muss Burp vor dem eigentlichen Test stabil eingerichtet sein. Dazu gehören ein korrekt installierter CA-Trust, ein sauber konfigurierter Browser und ein Scope, das sowohl die Zielanwendung als auch den relevanten Identity Provider umfasst, sofern dieser im Test enthalten ist. Für die technische Basis sind Proxy Einrichten, Zertifikat Installieren und Erste Schritte die entscheidenden Vorarbeiten.
Im OAuth-Kontext ist es sinnvoll, Intercept nicht dauerhaft auf jedem Request aktiv zu lassen. Zu aggressive Unterbrechungen zerstören leicht den Browser-Zustand oder führen zu Timeouts beim Identity Provider. Besser ist ein gezielter Mitschnitt über Proxy History und selektives Abfangen kritischer Requests: Initiale Autorisierungsanfrage, Callback, Token-Exchange, Refresh-Request und API-Aufrufe mit Bearer Token. Für die eigentliche Manipulation wird der relevante Request in den Repeater überführt, nicht im Live-Flow improvisiert.
Ein weiterer Punkt ist die Session-Isolation. Viele Provider erkennen bestehende Logins und überspringen Teile des Flows. Das ist für Benutzer komfortabel, für Tests aber problematisch. Deshalb sollten getrennte Browser-Profile, Inkognito-Sessions oder Burps eingebauter Browser verwendet werden. Zusätzlich lohnt sich das gezielte Löschen von Cookies und Storage-Einträgen zwischen Testläufen. Sonst wird ein vermeintlich erfolgreicher Angriff nur deshalb reproduzierbar, weil noch ein alter Session-Kontext aktiv ist.
Im Mitschnitt müssen Requests logisch gruppiert werden. Ein sauberer Ablauf sieht typischerweise so aus: Browser ruft Client auf, Client erzeugt Redirect zum Authorization Server, Benutzer authentisiert sich, Authorization Server leitet mit Code oder Token zurück, Client tauscht Code gegen Token, Client setzt eigene Session, Browser ruft geschützte Ressourcen ab. Wenn diese Kette nicht vollständig dokumentiert ist, fehlt später die Grundlage für die Bewertung. Besonders wichtig ist die Unterscheidung zwischen Browser-Session der Anwendung und OAuth-Artefakten des Identity Providers.
Für reproduzierbare Tests empfiehlt sich ein Arbeitsstil mit klaren Snapshots: ein Baseline-Flow ohne Manipulation, danach einzelne kontrollierte Änderungen. Wer mehrere Parameter gleichzeitig verändert, verliert die Aussagekraft. In Burp bedeutet das: Requests aus der History markieren, sinnvoll benennen, in Repeater-Tabs sortieren und Antworten mit Comparer gegeneinander prüfen. Gerade bei Redirects und Fehlerseiten sind kleine Unterschiede in Statuscode, Headern oder Response-Body oft der entscheidende Hinweis.
OAuth-Tests profitieren außerdem von einer sauberen Trennung zwischen Browser- und Backend-Perspektive. Manche Fehler sind nur sichtbar, wenn der Browser den kompletten Flow ausführt. Andere lassen sich erst im Repeater sauber isolieren. Ein professioneller Workflow wechselt bewusst zwischen beiden Ebenen, statt sich auf eine einzige Ansicht zu verlassen.
Sponsored Links
Autorisierungsanfrage zerlegen: state, nonce, scope, response_type und redirect_uri präzise prüfen
Die initiale Autorisierungsanfrage ist der wichtigste Einstiegspunkt. Hier entscheidet sich, welche Bindungen der Client vorgibt und welche Freiheiten der Authorization Server akzeptiert. Typische Parameter sind client_id, redirect_uri, response_type, scope, state und bei OpenID Connect zusätzlich nonce. Bei PKCE kommen code_challenge und code_challenge_method hinzu. Jeder dieser Werte ist ein potenzieller Prüfpunkt.
redirect_uri ist einer der häufigsten Schwachstellenbereiche. Unsichere Implementierungen erlauben Wildcards, unvollständige Host-Prüfungen, Subdomain-Missbrauch, Pfad-Tricks oder Parameter-Injektion. Kritisch ist nicht nur eine komplett fremde Domain, sondern auch eine kontrollierbare Subdomain, ein offener Redirect innerhalb der erlaubten Domain oder eine URI, die zwar formal akzeptiert wird, aber Tokens an unerwartete Endpunkte weiterleitet. Im Test werden Varianten mit geänderten Pfaden, URL-Encoding, doppelten Parametern, Fragmenten und alternativen Schemes geprüft. Besonders aufschlussreich ist der Vergleich zwischen Fehlerfällen und stillschweigend akzeptierten Abweichungen.
state dient dem Schutz gegen CSRF und gegen unerwartete Callback-Zuordnungen. Ein häufiger Implementierungsfehler besteht darin, den Wert zwar zu senden, aber beim Rücklauf nicht oder nur oberflächlich zu validieren. Im Test wird geprüft, ob fehlendes, leeres, manipuliertes oder wiederverwendetes State akzeptiert wird. Ebenso relevant ist, ob State vorhersagbar ist oder nur als kosmetischer Wert dient. Wenn die Anwendung State clientseitig generiert und serverseitig nicht an die Session bindet, ist die Schutzwirkung gering.
scope wird oft unterschätzt. Viele Anwendungen fordern mehr Rechte an als nötig oder akzeptieren zusätzliche Scopes, wenn sie manuell ergänzt werden. Das ist besonders kritisch, wenn ein Client eigentlich nur Basisinformationen benötigt, aber durch Scope-Manipulation plötzlich E-Mail-Adressen, Profilattribute oder administrative API-Rechte erhält. Die Prüfung endet nicht bei der Autorisierungsanfrage; entscheidend ist, welche Rechte das resultierende Token tatsächlich besitzt.
response_type und response_mode sind ebenfalls lohnende Ziele. Manche Server akzeptieren unerwartete Kombinationen, etwa token statt code oder zusätzliche Werte wie id_token. Solche Abweichungen können dazu führen, dass Tokens an Stellen auftauchen, an denen die Anwendung sie nicht sicher verarbeitet. Bei OpenID-ähnlichen Setups ist nonce relevant, um Replay- oder Mix-up-Szenarien zu verhindern. Fehlt die Prüfung, kann ein fremdes ID Token unter Umständen in einen falschen Kontext eingebracht werden.
GET /authorize?client_id=web-client
&redirect_uri=https%3A%2F%2Fapp.example.com%2Foauth%2Fcallback
&response_type=code
&scope=openid%20profile%20email
&state=7f8c2a1b9d
&code_challenge=K2x...abc
&code_challenge_method=S256 HTTP/1.1
Host: idp.example.com
Bei der Analyse dieses Requests geht es nicht darum, blind Werte zu verändern, sondern die Bindungslogik zu verstehen. Welche Parameter sind serverseitig registriert? Welche werden nur gespiegelt? Welche Fehlercodes erscheinen bei Abweichungen? Welche Werte tauchen später im Callback oder Token-Request wieder auf? Erst diese Korrelation macht aus einem Mitschnitt einen belastbaren Test.
Callback und Token-Austausch angreifen: Code-Reuse, PKCE-Bypass, Client-Bindung und Token-Exposition
Nach erfolgreicher Autorisierung folgt der Callback zur Anwendung. Genau hier zeigt sich, ob der Client den Rücklauf robust verarbeitet. Ein sauberer Test prüft zunächst, ob der Callback-Endpunkt fremde oder manipulierte Parameter akzeptiert. Wird ein unbekannter code verarbeitet? Reagiert die Anwendung auf fehlendes oder geändertes state? Werden Fehlerparameter wie error oder error_description sicher behandelt oder führen sie zu Informationslecks, Open Redirects oder Debug-Ausgaben?
Der nächste kritische Schritt ist der Token-Austausch. Beim Authorization Code Flow sendet der Client typischerweise einen POST an den Token-Endpunkt des Authorization Servers. Dort müssen Code, Client-Kontext, Redirect URI und gegebenenfalls PKCE-Verifier zusammenpassen. Im Test wird geprüft, ob ein abgefangener Code mehrfach eingelöst werden kann, ob derselbe Code mit geänderter Redirect URI akzeptiert wird oder ob ein Code für einen anderen Client verwendbar ist. Ein einmal verwendbarer Code, der korrekt an Client und Redirect URI gebunden ist, reduziert die Angriffsfläche erheblich. Fehlt diese Bindung, entsteht ein direkter Übernahmepfad.
PKCE-Bypass-Tests sind besonders wertvoll, wenn öffentliche Clients oder SPAs im Spiel sind. Dabei wird untersucht, ob der Token-Endpunkt den code_verifier wirklich validiert, ob alternative Methoden akzeptiert werden oder ob bei Fehlern unsichere Fallbacks greifen. Manche Implementierungen prüfen nur die Existenz des Parameters, nicht aber die kryptografische Beziehung zur ursprünglichen Challenge. Andere akzeptieren plain unerwartet neben S256. Solche Abweichungen sind keine akademischen Details, sondern direkte Schwachstellen in der Code-Einlösung.
Ein weiterer Prüfpunkt ist die Exposition von Tokens. Selbst wenn der eigentliche OAuth-Server korrekt arbeitet, kann die Client-Anwendung Tokens unsicher speichern oder weiterreichen. Access Tokens in Local Storage, Session Storage, JavaScript-Variablen, Browser-History oder URL-Parametern sind klassische Funde. Bei SPAs lohnt sich die Kombination aus Proxy-Mitschnitt und Browser-Devtools. In Burp kann zusätzlich Decoder genutzt werden, um Token-Inhalte schnell zu analysieren, während für signierte Token die Vertiefung über Jwt Testing relevant ist.
- Authorization Code erneut einlösen und auf Replay-Schutz prüfen.
- Redirect URI im Token-Request variieren und auf schwache Bindung testen.
- PKCE-Verifier entfernen, ändern oder Methode wechseln.
- Callback mit manipuliertem oder fehlendem State senden.
- Token-Speicherung im Browser und in API-Aufrufen nachvollziehen.
Wichtig ist die Trennung zwischen Protokollfehlern und Anwendungsfehlern. Wenn der Authorization Server korrekt arbeitet, die Anwendung aber Tokens in unsicheren Kontexten speichert, liegt die Schwachstelle nicht im OAuth-Standard, sondern in der Implementierung des Clients. Für die Risikobewertung ist diese Unterscheidung entscheidend.
POST /oauth/token HTTP/1.1
Host: idp.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=SplxlOBeZQQYbYS6WxSbIA&
redirect_uri=https%3A%2F%2Fapp.example.com%2Foauth%2Fcallback&
client_id=web-client&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
Genau dieser Request gehört in den Repeater. Dort lassen sich Bindungen kontrolliert brechen, ohne den Browser-Flow jedes Mal neu durchlaufen zu müssen.
Sponsored Links
Tokens fachlich bewerten: Access Token, Refresh Token, ID Token, Claims und Lebenszyklen
Nicht jedes Token ist gleich kritisch. Ein Access Token gewährt Zugriff auf Ressourcen, ein Refresh Token dient zur Verlängerung der Sitzung, ein ID Token beschreibt Identitätsinformationen. Im Test muss deshalb zuerst geklärt werden, welche Token-Art vorliegt und wie sie verwendet wird. Viele Fehlbewertungen entstehen, weil ein ID Token fälschlich als API-Berechtigung interpretiert wird oder ein Access Token nur oberflächlich anhand seines Formats beurteilt wird.
Bei JWT-basierten Tokens sind Header und Claims schnell sichtbar, aber Sichtbarkeit ist nicht gleich Vertrauenswürdigkeit. Ein Token kann lesbar sein und trotzdem korrekt signiert und sicher validiert werden. Umgekehrt kann ein formal sauberes JWT durch schwache Signaturprüfung, falsche Audience-Validierung oder fehlende Ablaufkontrolle angreifbar sein. Deshalb reicht das Dekodieren allein nicht aus. Entscheidend ist, wie Resource Server und Client die Inhalte auswerten.
Besonders relevant sind Claims wie iss, aud, sub, exp, nbf, scope und gegebenenfalls Rollen- oder Gruppenattribute. Im Test wird geprüft, ob das Token für die angesprochene API bestimmt ist, ob mehrere APIs dasselbe Token akzeptieren und ob Scope- oder Rolleninformationen zu weit gefasst sind. Ein häufiger Fehler ist die Akzeptanz eines Tokens mit falscher Audience oder aus einem anderen Mandanten. In Multi-Tenant-Umgebungen kann das zu horizontaler oder sogar organisatorischer Eskalation führen.
Refresh Tokens verdienen besondere Aufmerksamkeit. Sie sind oft langlebiger als Access Tokens und werden von Anwendungen unsauber behandelt. Kritisch sind fehlende Rotation, Wiederverwendbarkeit nach Logout, fehlende Bindung an Gerät oder Session sowie die Speicherung in unsicheren Browser-Kontexten. Wenn ein gestohlenes Refresh Token beliebig neue Access Tokens erzeugen kann, ist die Kompromittierung deutlich gravierender als bei einem kurzlebigen Access Token.
Auch die Lebenszyklen müssen geprüft werden. Läuft ein Access Token tatsächlich nach der angegebenen Zeit ab? Wird ein widerrufenes Token noch akzeptiert? Führt Logout nur zum Löschen lokaler Cookies oder auch zur serverseitigen Invalidierung? Diese Fragen verbinden OAuth-Testing direkt mit Session Management und Cookies. In vielen Anwendungen existieren OAuth-Tokens und eigene Anwendungssessions parallel. Ein Logout, das nur eine Ebene beendet, hinterlässt oft verwertbare Artefakte.
Bei der Bewertung von Token-Sicherheit zählt nicht nur Kryptografie, sondern auch Kontext. Ein perfekt signiertes Token ist wertlos, wenn es nur minimale Rechte besitzt und korrekt abläuft. Ein schwach geschütztes Refresh Token mit breiten Scopes ist dagegen hochkritisch. Genau diese Priorisierung trennt einen oberflächlichen Test von einer belastbaren Sicherheitsbewertung.
Typische OAuth-Schwachstellen in realen Anwendungen: Redirect-Missbrauch, Mix-Up, Scope-Eskalation und Session-Verkettung
Die häufigsten OAuth-Funde sind selten exotisch. Meist handelt es sich um schwache Redirect-Validierung, fehlende State-Prüfung, unsichere Token-Speicherung oder unzureichende Trennung zwischen Identität und Berechtigung. Gerade Redirect-Probleme sind in der Praxis gefährlich, weil sie oft mit bereits vorhandenen Schwachstellen kombiniert werden können, etwa mit Open Redirect innerhalb einer erlaubten Domain. Wenn der Authorization Server nur den Host prüft, aber interne Weiterleitungen ignoriert, lassen sich Codes oder Tokens an unerwartete Ziele umlenken.
Mix-Up-Angriffe entstehen, wenn ein Client mehrere Identity Provider unterstützt und Antworten nicht sauber dem ursprünglichen Provider zuordnet. In solchen Szenarien kann ein Callback aus einem anderen Kontext akzeptiert werden. Das Problem ist weniger sichtbar als ein offener Redirect, aber in föderierten Umgebungen hochrelevant. Der Test erfordert hier saubere Modellierung: Welcher Provider wurde initial gewählt, welche Endpunkte werden später angesprochen und wie wird diese Zuordnung serverseitig gespeichert?
Scope-Eskalation ist ein weiterer Klassiker. Anwendungen fordern oft standardmäßig harmlose Rechte an, akzeptieren aber zusätzliche Scopes, wenn sie manuell ergänzt werden. Kritisch wird das, wenn Backend-Komponenten die resultierenden Rechte ungeprüft übernehmen. Dann wird aus einer kosmetischen Parameter-Manipulation ein echter Berechtigungsgewinn. Besonders in API-zentrierten Architekturen muss deshalb nach dem OAuth-Flow immer geprüft werden, welche Endpunkte mit dem erhaltenen Token tatsächlich erreichbar sind.
Ein unterschätztes Feld ist die Verkettung mit Anwendungssessions. Viele Clients setzen nach erfolgreichem OAuth-Login ein eigenes Session-Cookie. Wenn diese Session nicht sauber an den OAuth-Kontext gebunden ist, können Session Fixation, Account Confusion oder unvollständige Logout-Prozesse entstehen. Ein Benutzer authentisiert sich dann zwar korrekt über den Identity Provider, landet aber in einer bereits vorbereiteten oder fremden Anwendungssession. Solche Fehler wirken auf den ersten Blick wie klassische Web-Schwachstellen, entstehen aber oft genau an der Schnittstelle zum OAuth-Flow.
Auch Fehlerbehandlung ist relevant. Unsichere Debug-Responses, reflektierte Fehlermeldungen, Stack Traces oder das Zurückgeben interner Parameter können wertvolle Informationen liefern. In manchen Implementierungen werden komplette Token-Responses oder Benutzerattribute in Frontend-Logs geschrieben. Das ist kein Randproblem, sondern ein direkter Datenabfluss.
- Zu großzügige Redirect-URI-Prüfung mit Host-, Pfad- oder Parameter-Schwächen.
- Fehlende oder wiederverwendbare State-Werte im Callback.
- PKCE nur optional oder fehlerhaft validiert.
- Access- oder Refresh-Tokens in Local Storage, URL oder Logs.
- Zusätzliche Scopes werden akzeptiert und führen zu erweiterten API-Rechten.
- Logout beendet nur die lokale Session, nicht aber Token-Gültigkeit oder Refresh-Fähigkeit.
In Berichten sollte jede dieser Schwachstellen entlang des tatsächlichen Angriffswegs beschrieben werden. Ein theoretisch manipulierbarer Parameter ohne verwertbare Auswirkung ist etwas anderes als ein Redirect-Fehler, der unmittelbar zur Kontoübernahme führt.
Sponsored Links
Praxisnahe Testmethoden mit Burp: Repeater, Intruder, Comparer und gezielte Automatisierung
OAuth-Testing ist nur teilweise automatisierbar. Die Stärke von Burp liegt darin, manuelle Analyse mit gezielter Unterstützung zu kombinieren. Der Repeater ist das wichtigste Werkzeug, weil er kontrollierte Einzeländerungen erlaubt. Gerade bei Token-Requests, Callback-Parametern und API-Aufrufen mit Bearer Tokens ist diese Präzision unverzichtbar. Für systematische Variantenprüfungen, etwa bei Redirect-URI-Bypasses oder Scope-Kombinationen, kann zusätzlich Intruder sinnvoll sein. Dabei sollte jedoch nicht blind gefuzzt werden. OAuth-Endpunkte reagieren empfindlich auf Rate Limits, Anti-Automation und Session-Verfall.
Comparer ist hilfreich, um Antworten auf subtile Unterschiede zu prüfen. Zwei Redirect-Antworten mit identischem Statuscode können sich in Headern, Set-Cookie-Werten oder Fehlermeldungen unterscheiden. Gerade bei der Frage, ob ein manipuliertes state wirklich serverseitig abgelehnt wird oder nur kosmetisch anders behandelt wird, liefert der direkte Vergleich belastbare Hinweise.
Für Token-Analyse und Encodings ist der Decoder nützlich, insbesondere wenn URL-encodierte Parameter, Base64-Fragmente oder JWT-Bestandteile schnell geprüft werden müssen. Bei komplexeren Umgebungen können Erweiterungen aus dem Bapp Store unterstützen, etwa für JWT-Analyse, bessere Browser-Integration oder Workflow-Hilfen. Erweiterungen ersetzen aber kein Protokollverständnis. Wer nicht weiß, welche Bindung geprüft werden soll, bekommt auch mit Plugins keine belastbaren Ergebnisse.
Gezielte Automatisierung lohnt sich vor allem bei wiederkehrenden Prüfungen: mehrere Redirect-URI-Varianten, Scope-Kombinationen, Replay-Tests von Codes oder Refresh-Token-Rotation. Dabei muss jeder Testlauf sauber dokumentiert werden: Ausgangszustand, verwendete Session, ursprünglicher Request, manipulierte Parameter, beobachtete Antwort und tatsächliche Auswirkung auf Ressourcen. Ohne diese Struktur werden Ergebnisse schnell unklar oder nicht reproduzierbar.
GET /authorize?client_id=web-client&redirect_uri=https://app.example.com/callback HTTP/1.1
Host: idp.example.com
GET /authorize?client_id=web-client&redirect_uri=https://app.example.com/callback/../evil HTTP/1.1
Host: idp.example.com
GET /authorize?client_id=web-client&redirect_uri=https://app.example.com/callback%3Fnext%3Dhttps://attacker.tld HTTP/1.1
Host: idp.example.com
Solche Varianten sollten nicht nur auf Akzeptanz geprüft werden, sondern auf den vollständigen Effekt: Wohin wird tatsächlich umgeleitet, welche Parameter werden übernommen und ob Codes oder Tokens am Ende in einem kontrollierbaren Kontext landen. Genau hier trennt sich ein echter Sicherheitsfund von einem bloßen Parsing-Kuriosum.
In größeren Assessments lohnt sich ein definierter Ablauf: Baseline im Browser, kritische Requests in Repeater, Varianten mit Intruder, Antwortvergleich mit Comparer, anschließend Validierung an echten Ressourcen. Dieser Stil passt gut zu einem sauberen Workflow und verhindert, dass einzelne Beobachtungen ohne Auswirkungsnachweis im Raum stehen.
Fehleranalyse, Priorisierung und belastbare Befunde: Was wirklich kritisch ist und was nur auffällig wirkt
OAuth-Befunde werden häufig falsch priorisiert. Ein sichtbares JWT wirkt spektakulär, ist aber nicht automatisch kritisch. Ein manipulierbarer Scope-Parameter klingt harmlos, kann aber in der Praxis zu weitreichendem API-Zugriff führen. Deshalb muss jede Beobachtung entlang von drei Fragen bewertet werden: Welche Bindung fehlt oder ist schwach? Welche Auswirkung hat das konkret? Unter welchen Voraussetzungen ist der Angriff realistisch?
Ein Beispiel: Fehlendes state ist nicht in jedem Szenario gleich kritisch. Wenn der Client zusätzlich starke Session-Bindungen besitzt und keine fremden Callbacks akzeptiert, kann die praktische Ausnutzbarkeit begrenzt sein. Umgekehrt kann ein scheinbar kleiner Redirect-Fehler in Kombination mit einem offenen Redirect und einem fehlenden PKCE-Zwang direkt zur Code-Übernahme führen. Die Bewertung muss also immer die Kette betrachten, nicht nur den Einzelparameter.
Auch Fehlalarme sind häufig. Viele Tester interpretieren jede Abweichung in der Redirect-URI-Prüfung als Schwachstelle, obwohl der Authorization Server am Ende nur exakt registrierte URIs verwendet. Andere halten jede Token-Speicherung im Browser für kritisch, obwohl das konkrete Token nur kurzlebig, eng scoped und an zusätzliche Schutzmechanismen gebunden ist. Solche Differenzierung ist wichtig, damit echte Risiken nicht zwischen Nebengeräuschen untergehen.
Belastbare Befunde enthalten deshalb immer einen reproduzierbaren Ablauf. Dazu gehören der originale Request, die manipulierte Variante, die beobachtete Serverreaktion und der Nachweis der Auswirkung, etwa Zugriff auf eine geschützte Ressource, Session-Übernahme oder Scope-Erweiterung. Reine Vermutungen ohne End-to-End-Nachweis sind in OAuth-Umgebungen besonders problematisch, weil viele Komponenten beteiligt sind und scheinbar auffällige Antworten oft nur Zwischenschritte ohne Sicherheitsrelevanz darstellen.
Bei der Fehleranalyse hilft es, zwischen Protokoll-, Implementierungs- und Betriebsfehlern zu unterscheiden. Protokollfehler betreffen etwa fehlende State- oder PKCE-Bindungen. Implementierungsfehler betreffen unsichere Speicherung, mangelhafte Session-Verkettung oder unzureichende Audience-Prüfung. Betriebsfehler umfassen zu breite Scopes, falsch registrierte Redirect-URIs oder Debug-Konfigurationen in Produktivsystemen. Diese Einordnung erleichtert nicht nur die Priorisierung, sondern auch die spätere Behebung.
Wenn Burp-Mitschnitte unvollständig sind oder der Flow instabil wirkt, sollte zuerst die Testumgebung geprüft werden. Probleme mit Zertifikaten, Browser-Trust oder Proxy-Ketten verfälschen Ergebnisse schnell. In solchen Fällen helfen saubere Grundlagen über Debugging und Proxy Verbindungsfehler, bevor vermeintliche OAuth-Anomalien als Schwachstellen bewertet werden.
Ein guter Befund beschreibt nicht nur, dass etwas falsch ist, sondern warum die vorhandene Bindung nicht ausreicht und wie sich das praktisch ausnutzen lässt. Genau diese technische Präzision macht den Unterschied zwischen einem brauchbaren Sicherheitsbericht und einer Sammlung unscharfer Beobachtungen.
Saubere Workflows für reale Assessments: Vorbereitung, Testreihenfolge, Dokumentation und typische Denkfehler
Ein professioneller OAuth-Test folgt einer klaren Reihenfolge. Zuerst wird die Architektur verstanden: Welche Clients existieren, welche Identity Provider sind beteiligt, welche Flows werden genutzt, welche APIs akzeptieren welche Tokens? Danach folgt ein sauberer Baseline-Durchlauf ohne Manipulation. Erst wenn dieser vollständig dokumentiert ist, beginnen gezielte Änderungen an Autorisierungsanfrage, Callback, Token-Austausch und Ressourcenzugriff.
In der Praxis bewährt sich eine Testreihenfolge von außen nach innen. Zuerst werden sichtbare Browser-Parameter und Redirects geprüft. Danach folgen Callback-Verarbeitung und Session-Bindung. Anschließend wird der Token-Endpunkt analysiert, inklusive PKCE, Code-Reuse und Refresh-Verhalten. Zum Schluss werden die resultierenden Tokens gegen reale APIs und Berechtigungsgrenzen getestet. Dieser Ablauf verhindert, dass zu früh auf Token-Ebene optimiert wird, obwohl der eigentliche Fehler bereits in der Redirect-Logik liegt.
Dokumentation ist im OAuth-Umfeld besonders wichtig, weil viele Schwachstellen nur als Kette verständlich sind. Ein einzelner Screenshot reicht selten aus. Nötig sind Request- und Response-Paare, Zeitpunkte, Session-Kontext, Benutzerrollen und der Nachweis der finalen Auswirkung. Wer mehrere Testkonten verwendet, sollte strikt protokollieren, welches Konto welchen Flow ausgelöst hat. Sonst werden Account-Confusion-Effekte leicht mit normalen Session-Resten verwechselt.
Ein häufiger Denkfehler besteht darin, OAuth isoliert von der restlichen Anwendung zu betrachten. In Wirklichkeit hängen Login, Session-Cookies, API-Gateways, CORS, Frontend-Storage und Rollenmodelle eng zusammen. Deshalb sollte OAuth-Testing immer mit angrenzenden Bereichen verknüpft werden, etwa Authentication Bypass, Session Hijacking und allgemeinem Web Pentest. Gerade die Kombination mehrerer kleiner Schwächen erzeugt oft den eigentlichen Impact.
Ebenso wichtig ist die Disziplin, nur eine Variable pro Testlauf zu ändern. Wenn gleichzeitig Redirect URI, State und Scope manipuliert werden, ist ein positives Ergebnis kaum sauber zuzuordnen. Reproduzierbarkeit schlägt Geschwindigkeit. Das gilt besonders bei föderierten Logins, wo Caches, bestehende Sessions und Provider-seitige Schutzmechanismen das Verhalten zwischen Testläufen verändern können.
Am Ende eines Assessments sollte für jeden getesteten Flow klar dokumentiert sein: Welche Bindungen existieren, welche wurden geprüft, welche ließen sich brechen und welche Auswirkungen ergaben sich daraus. Genau daraus entsteht ein belastbares Gesamtbild der OAuth-Sicherheit einer Anwendung.
Weiter Vertiefungen und Link-Sammlungen
Passende Vertiefungen, Vergleiche und angrenzende Hydra-Themen:
Passender Lernpfad:
Passende Erweiterungen:
Passende Lernbundels:
Passende Zertifikate: