Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-3456-OAuth2-PKCE-Race-Condition-Account-Takeover- — PoC Python pour CVE-2026-3456 démontrant une prise de contrôle de compte par condition de course dans OAuth2 PKCE, avec un serveur d'authentification vulnérable et un script d'exploitation concurrent du code-verifier. | Kitploit
Outils/GitHubGitHub/george0papasotiriou/cve-2026-3456-oauth2-pkce-race-condition-account-takeover-
Authentification et AutorisationAnalyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebSécurité des API
GitHubgeorge0papasotiriou/cve-2026-3456-oauth2-pkce-race-condition-account-takeover-

CVE-2026-3456-OAuth2-PKCE-Race-Condition-Account-Takeover-

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PoC Python pour CVE-2026-3456 démontrant une prise de contrôle de compte par condition de course dans OAuth2 PKCE, avec un serveur d'authentification vulnérable et un script d'exploitation concurrent du code-verifier.

Voir le dépôt
il y a 17 joursPas encore vérifié

8. CVE-2026-3456 – Condition de course PKCE OAuth2 (Prise de contrôle de compte)

Vue d'ensemble

Une condition de course dans le serveur d'autorisation OAuth2 permet à un attaquant de réutiliser le code d'autorisation d'une victime avant que le client légitime ne l'échange, en devinant ou en forçant par force brute le code_verifier PKCE dans une courte fenêtre temporelle.

Gravité : Élevée (Prise de contrôle de compte)

Simulation (Serveurs HTTP Python)

root@kitploit:~
#!/usr/bin/env python3
"""
vulnerable_auth_server.py - Authorization server with race condition window.
"""
import time, random, hashlib, base64, secrets
from http.server import HTTPServer, BaseHTTPRequestHandler
import urllib.parse

# Simulated storage
auth_codes = {}  # code -> {client_id, redirect_uri, code_challenge, scope, user}
tokens = {}

def generate_code():
    return secrets.token_urlsafe(16)

class AuthHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        parsed = urllib.parse.urlparse(self.path)
        params = urllib.parse.parse_qs(parsed.query)
        if parsed.path == '/authorize':
            # User approves, redirect with code
            code = generate_code()
            auth_codes[code] = {
                'client_id': params.get('client_id', ['unknown'])[0],
                'redirect_uri': params.get('redirect_uri', [''])[0],
                'code_challenge': params.get('code_challenge', [''])[0],
                'user': '[email protected]'
            }
            redirect = f"{params['redirect_uri'][0]}?code={code}&state={params.get('state',[''])[0]}"
            self.send_response(302)
            self.send_header('Location', redirect)
            self.end_headers()
        elif parsed.path == '/token':
            # Token endpoint (POST) but simplified as GET for demo
            code = params.get('code', [''])[0]
            verifier = params.get('code_verifier', [''])[0]
            if code in auth_codes:
                entry = auth_codes[code]
                # Check PKCE: SHA256(verifier) == challenge?
                challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).decode().rstrip('=')
                if challenge == entry['code_challenge']:
                    # Race condition: we do not invalidate code immediately (small window)
                    # Attacker can try to redeem same code with a different verifier if they win race.
                    access_token = secrets.token_urlsafe(32)
                    tokens[access_token] = entry['user']
                    # Insecure: code still present for a few milliseconds
                    # To simulate, we add a deliberate delay
                    time.sleep(0.1)  # window of opportunity
                    del auth_codes[code]  # remove after use (but after sleep)
                    self.send_response(200)
                    self.end_headers()
                    self.wfile.write(f'access_token={access_token}'.encode())
                else:
                    self.send_response(400)
                    self.end_headers()
                    self.wfile.write(b'invalid code_verifier')
            else:
                self.send_response(400)
                self.end_headers()
                self.wfile.write(b'invalid code')
        else:
            self.send_response(404)
            self.end_headers()

server = HTTPServer(('0.0.0.0', 5000), AuthHandler)
print("Auth server on :5000")
server.serve_forever()

CVE-2026-3456 – Condition de course PKCE OAuth2 (Prise de contrôle de compte)

Severity: High

📖 Vue d'ensemble

Une vulnérabilité dans le flux PKCE du serveur d'autorisation OAuth2 permet à un attaquant de consommer un code d'autorisation avant le client légitime, contournant PKCE via une condition de course. Le serveur ne parvient pas à invalider le code de manière atomique, laissant une fenêtre durant laquelle un verifier malveillant peut être essayé.

⚙️ Détails de la vulnérabilité

  • Type : Condition de course / TOCTOU
  • Impact : Prise de contrôle de compte par obtention du jeton d'accès de la victime.
  • Cause racine : Le point de terminaison de jeton vérifie PKCE, émet un jeton, puis supprime le code, mais le code reste valide pendant un bref instant. Un attaquant disposant d'un code capturé (par exemple, via une redirection ouverte) peut tenter de nombreux verifiers en parallèle.

🧪 Démonstration de l'exploit

  1. Démarrez le serveur d'authentification vulnérable :
    root@kitploit:~
    python vulnerable_auth_server.py
    
  2. Exécutez l'exploit de course :
    root@kitploit:~
    python race_condition_exploit.py
    
Télécharger l’outil