Hallo,
ein Sicherheitscheck bemängelt den Login im Contenido Backend:
PROBLEM:
"Reflected Cross Site Scripting
Beim nicht-permanenten Cross-Site Scripting kann HTML- oder JavaScript-Code über einen speziellen Link in die anzugreifende Webseite eingeschleust werden. Der Link zeigt dabei entweder direkt auf die verwundbare Webseite oder auf eine vom Angreifer manipulierte Sprungseite. Klickt ein Opfer auf einen solchen Link (z.B. aus einer Phishing-E-Mail) wird das JavaScript des Angreifers im Kontext des Opfers in dessen Browser ausgeführt.
Die Schwachstelle kann vom Angreifer ausgenutzt werden, um User-Credentials von Benutzern der Webseite zu stehlen (Relogin-Trojan-, Session-Hijacking- oder Session-Fixation-Attacken), Inhalte der Webseite zu verändern oder auf andere Seiten umzuleiten. Zudem werden Benutzer der Webseite zu potentiellen Opfern von Browser-Exploits und JavaScript-Trojanern.
Die beim Aufruf einer ungültigen URL zurückgelieferte Fehlerseite gibt ungefilterten User-Input zurück. Dies führt zu einer nicht-permanenten Cross-Site Scripting Schwachstelle."
LÖSUNG:
"Alle Benutzer Ein- und Ausgaben müssen einer strikten Ein- und Ausgabeüberprüfung unterzogen werden. Bei derartigen Überprüfungen sind Whitelist-Methoden den Blacklist-Methoden unbedingt vorzuziehen. Es wird empfohlen, beispielsweise in Parametern oder Eingabefeldern, welche nur numerischen Input aufweisen können (z.B. IDs, Postleitzahlen, usw.), nur die Eingabe von Zahlen zu erlauben. Dabei ist es wichtig, diese Überprüfung serverseitig durchzuführen, da clientseitige Maßnahmen umgangen werden können.
Um Cross-Site Scripting zu verhindern, müssen zusätzlich spezielle Zeichen wie z.B. [;()"´`,<>/\'=] in der Benutzerausgabe durch ihre HTML Äquivalente (", ', <, >, ...) ersetzt werden. Auf keinen Fall dürfen nur bestimmte HTML-Tags wie z.B. <script> gefiltert werden, da es zahlreiche andere Methoden gibt, XSS auszunutzen bzw. derartige Filter zu umgehen."
Meine Frage nun: an welcher Stelle und wie kann ich diese Sicherheitslücke des Backends schließen?
Sicherheit Backend
-
- Beiträge: 63
- Registriert: Fr 21. Jan 2011, 13:29
- Kontaktdaten:
Re: Sicherheit Backend
Hallo Bernbacher,
In CONTENIDO gibt es den RequestValidator, dieser wird sowohl in Frontend als auch im Backend beim Initialisieren des CMS ausgeführt und validiert per GET, POST & COOKIE ankommende Request-Parameter.
Die in CONTENIDO verwendeten Parameter sind in der default-Konfiguration definiert:
Zusätzlich kann man für seine eigenen Plugins oder Module eine eigene Konfiguration anlegen:
Zum Thema Sicherheit der DB-Abfragen gibt es eine Doku-Seite:
https://docs.contenido.org/display/COND ... b+features
Sollte das nicht ausreichend sein, muss man das Sicherheitskonzept des CMS entsprechend anpassen.
Gruß
xmurrix
In CONTENIDO gibt es den RequestValidator, dieser wird sowohl in Frontend als auch im Backend beim Initialisieren des CMS ausgeführt und validiert per GET, POST & COOKIE ankommende Request-Parameter.
Die in CONTENIDO verwendeten Parameter sind in der default-Konfiguration definiert:
Code: Alles auswählen
data/config/{ENVIRONMENT}/config.http_check.php
Code: Alles auswählen
data/config/{ENVIRONMENT}/config.http_check.local.php
https://docs.contenido.org/display/COND ... b+features
Sollte das nicht ausreichend sein, muss man das Sicherheitskonzept des CMS entsprechend anpassen.
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Re: Sicherheit Backend
Hier auch im Forum: viewtopic.php?f=95&t=32058&p=162089xmurrix hat geschrieben: ↑Fr 17. Aug 2018, 22:27Zum Thema Sicherheit der DB-Abfragen gibt es eine Doku-Seite:
https://docs.contenido.org/display/COND ... b+features
Gut dokumentiert
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
-
- Beiträge: 63
- Registriert: Fr 21. Jan 2011, 13:29
- Kontaktdaten:
Re: Sicherheit Backend
Danke für Eure Hinweise, ich verstehe ehrlich gesagt noch nicht ganz genau, wo da was angepasst werden muss. In dem konkreten Fall geht es wirklich um das Contenido-Backend-Login, das wohl nicht sicher ist. Hier die Kommentare des Testers dazu:
Start Anmerkung xmurrix
Die Kommentare des Testers habe ich hier entfernt, diese aber vorher gesichert. Mögliche Sicherheitslücken sollten nicht öffentlich präsentiert werden.
Ende Anmerkung xmurrix
Hoffe das Problem ist verständlich? Was kann man konkret tun, um das zu verhindern?
Start Anmerkung xmurrix
Die Kommentare des Testers habe ich hier entfernt, diese aber vorher gesichert. Mögliche Sicherheitslücken sollten nicht öffentlich präsentiert werden.
Ende Anmerkung xmurrix
Hoffe das Problem ist verständlich? Was kann man konkret tun, um das zu verhindern?
Re: Sicherheit Backend
Hallo Bernbacher,
vielen Dank für die Mitteilung der Ergebnisse des Testers. Ich habe deinen Post überarbeitet und die Details zur der potentiellen Lücke entfernt, wir sollten solche sensiblen Infos nicht öffentlich zur Verfügung stellen.
In folgenden Beispielen ist der Wert "post_feld_name" gegen den eigentlichen Feldnamen im POST zu ersetzen.
Um das Problem bei dir zu lösen, kannst du folgendes machen:
Falls nicht vorhanden, erstelle folgende Datei:
Schreibe folgendes rein:
Einen Nachteil hat das aber. Sollte der Wert Sonderzeichen enthalten, werden diese dafür sorgen, dass die Prüfung fehlschlägt. Du kannst auch einen benutzerdefinierten regulären Ausdruck angeben:
Du kannst aber auch ankommende Werte manuell prüfen, also anstatt eine Konfiguration zu definieren, einfach ein Code einfügen, der die Validierung macht und gegebenenfalls den Wert ändert.
Gruß
xmurrix
vielen Dank für die Mitteilung der Ergebnisse des Testers. Ich habe deinen Post überarbeitet und die Details zur der potentiellen Lücke entfernt, wir sollten solche sensiblen Infos nicht öffentlich zur Verfügung stellen.
In folgenden Beispielen ist der Wert "post_feld_name" gegen den eigentlichen Feldnamen im POST zu ersetzen.
Um das Problem bei dir zu lösen, kannst du folgendes machen:
Falls nicht vorhanden, erstelle folgende Datei:
Code: Alles auswählen
data/config/{ENVIRONMENT}/config.http_check.local.php
Code: Alles auswählen
$aCheck['POST']['post_feld_name'] = cRequestValidator::CHECK_PRIMITIVESTRING;
Code: Alles auswählen
// Beispiel
$aCheck['POST']['post_feld_name'] = '/^[a-zA-Z0-9 -_.@]*$/';
Code: Alles auswählen
if (isset($_POST['post_feld_name'])) {
// ... hier die Prüfung implementieren, falls es fehlschlägt, also der Wert von $_POST['post_feld_name'] nicht valide ist, sollte es überschrieben werden.
}
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 63
- Registriert: Fr 21. Jan 2011, 13:29
- Kontaktdaten:
Re: Sicherheit Backend
Hallo xmurixx,
danke für das schnelle Feedback, werden das ausprobieren. Mit den sensiblen Daten hast Du natürlich recht. Danke!
danke für das schnelle Feedback, werden das ausprobieren. Mit den sensiblen Daten hast Du natürlich recht. Danke!