Sicherheit Backend

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
Bernbacher
Beiträge: 63
Registriert: Fr 21. Jan 2011, 13:29
Kontaktdaten:

Sicherheit Backend

Beitrag von Bernbacher » Fr 17. Aug 2018, 09:53

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 (&quot;, &#39;, &lt;, &gt;, ...) 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?

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Sicherheit Backend

Beitrag von xmurrix » Fr 17. Aug 2018, 22:27

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:

Code: Alles auswählen

data/config/{ENVIRONMENT}/config.http_check.php
Zusätzlich kann man für seine eigenen Plugins oder Module eine eigene Konfiguration anlegen:

Code: Alles auswählen

data/config/{ENVIRONMENT}/config.http_check.local.php
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
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.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Sicherheit Backend

Beitrag von Faar » Sa 18. Aug 2018, 13:11

xmurrix hat geschrieben:
Fr 17. Aug 2018, 22:27
Zum Thema Sicherheit der DB-Abfragen gibt es eine Doku-Seite:
https://docs.contenido.org/display/COND ... b+features
Hier auch im Forum: viewtopic.php?f=95&t=32058&p=162089

Gut dokumentiert :!:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Bernbacher
Beiträge: 63
Registriert: Fr 21. Jan 2011, 13:29
Kontaktdaten:

Re: Sicherheit Backend

Beitrag von Bernbacher » Mi 24. Okt 2018, 10:40

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?

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Sicherheit Backend

Beitrag von xmurrix » Mi 24. Okt 2018, 12:06

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:

Code: Alles auswählen

data/config/{ENVIRONMENT}/config.http_check.local.php
Schreibe folgendes rein:

Code: Alles auswählen

$aCheck['POST']['post_feld_name'] = cRequestValidator::CHECK_PRIMITIVESTRING;
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:

Code: Alles auswählen

// Beispiel
$aCheck['POST']['post_feld_name'] = '/^[a-zA-Z0-9 -_.@]*$/';
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.

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.
}
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.

Bernbacher
Beiträge: 63
Registriert: Fr 21. Jan 2011, 13:29
Kontaktdaten:

Re: Sicherheit Backend

Beitrag von Bernbacher » Mi 24. Okt 2018, 13:07

Hallo xmurixx,

danke für das schnelle Feedback, werden das ausprobieren. Mit den sensiblen Daten hast Du natürlich recht. Danke!

Antworten