Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-3456-OAuth2-PKCE-Race-Condition-Account-Takeover- — PoC en Python para CVE-2026-3456 que demuestra la apropiación de cuenta mediante condición de carrera en OAuth2 PKCE, con un servidor de autenticación vulnerable y un script de explotación concurrente de code-verifier. | Kitploit
Herramientas/GitHubGitHub/george0papasotiriou/cve-2026-3456-oauth2-pkce-race-condition-account-takeover-
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebSeguridad de APIs
GitHubgeorge0papasotiriou/cve-2026-3456-oauth2-pkce-race-condition-account-takeover-

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

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

PoC en Python para CVE-2026-3456 que demuestra la apropiación de cuenta mediante condición de carrera en OAuth2 PKCE, con un servidor de autenticación vulnerable y un script de explotación concurrente de code-verifier.

Ver Repositorio
hace 17 díasAún no revisado

8. CVE-2026-3456 – Condición de carrera en OAuth2 PKCE (Toma de control de cuenta)

Resumen

Una condición de carrera en el servidor de autorización OAuth2 permite que un atacante reutilice el código de autorización de la víctima antes de que el cliente legítimo lo canjee, adivinando o forzando por fuerza bruta el code_verifier de PKCE dentro de una pequeña ventana de tiempo.

Severidad: Alta (Toma de control de cuenta)

Simulación (Servidores HTTP en 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 – Condición de carrera en OAuth2 PKCE (Toma de control de cuenta)

Severity: High

📖 Resumen

Una vulnerabilidad en el flujo PKCE del servidor de autorización OAuth2 permite que un atacante canjee un código de autorización antes que el cliente legítimo, omitiendo PKCE mediante una condición de carrera. El servidor no invalida el código de forma atómica, dejando una ventana en la que se puede intentar un verifier malicioso.

⚙️ Detalles de la vulnerabilidad

  • Tipo: Condición de carrera / TOCTOU
  • Impacto: Toma de control de la cuenta mediante la obtención del token de acceso de la víctima.
  • Causa raíz: El endpoint de token verifica PKCE, emite un token y luego elimina el código, pero el código permanece válido por un breve instante. Un atacante con un código capturado (por ejemplo, mediante una redirección abierta) puede probar muchos verifiers de forma concurrente.

🧪 Demostración del exploit

  1. Inicia el servidor de autenticación vulnerable:
    root@kitploit:~
    python vulnerable_auth_server.py
    
  2. Ejecuta el exploit de condición de carrera:
    root@kitploit:~
    python race_condition_exploit.py
    
Descargar herramienta