Seite 1 von 1

DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Di 2. Mai 2017, 17:22
von helas
Hallo in die Runde,

wir haben gerade festgestellt, dass die webEdition-Suche JS-Code interpretiert und ausführt.
Die Eingabe

Code: Alles auswählen

<img src=y onerror=prompt(/openbugbounty/)>
öffnet nach dem Senden eine Eingabe - egal ob POST oder GET. (Der Edge lässt diese Anfragen zu.)

Gibt's dafür bereits eine Lösung durch spezielle Attribute für search oder muss hier noch etwas entwickelt werden?

Freue mich über eine Rückmeldung. Danke und Grüße
Lars

Re: DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Di 2. Mai 2017, 20:47
von WBTMagnum
Hallo Lars,

Wundert mich jetzt etwas. In mehreren security Audits bei einigen unserer Projekte ist in diese Richtung bislang nichts aufgepoppt.

Welche webEdition Version habt ihr denn da im Einsatz?? Wie sieht das Template zur Anzeige der Suchergebnisse aus?

Liebe Grüße,
Sascha

Re: DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Mi 3. Mai 2017, 10:37
von helas
Hallo Sascha,

festgestellt haben wir das in der Version: webEdition 7.0.2 (7.0.2.0, SVN-Revision: 12643)
Das Script sieht folgendermaßen aus:

Code: Alles auswählen

<we:form type="search" name="suche" method="get">
<we:search type="textinput" value="Suchbegriff" name="suche" id="Suchbegriff"/><input type="image" src="/_standards/img/btn_suche.gif" />
</we:form>
Der Seite haben wir schon einige webEdition-Updates verpasst - die Seite ist mal in der Version 6.* gestartet und basiert noch auf XHTML. Vielleicht liegt's auch daran? Siehe http://www.bewegteschule.de/

Freue mich über Tipps und Hinweise.
Danke und sonnige Grüße,
Lars

Re: DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Mi 3. Mai 2017, 16:46
von mokraemer
Der Fehler kommt von Euch:

Code: Alles auswählen

Zu Ihrer Suchanfrage "
<em>
<b>XXSS</b>
</em>
" konnte leider kein Treffer gefunden werden.
Ihr gebt an der Stelle vermutlich einfach $_REQUEST aus und benutzt kein

Code: Alles auswählen

<we:var type="request" varType="string" name="we_lv_search_suche"/>

Re: DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Mi 3. Mai 2017, 16:50
von WBTMagnum
Hallo Lars,

Ich habe das mal nachgebaut:
Code: Alles auswählen
<!DOCTYPE HTML>
<html dir="ltr" lang="<we:pageLanguage type="language" doc="top" />">
<head>
<we:title></we:title>
<we:description></we:description>
<we:keywords></we:keywords>
<we:charset defined="UTF-8">UTF-8</we:charset>
</head>
<body>
<we:form type="search" name="suche" method="get">
<we:search type="textinput" placeholder="Suchbegriff" name="suche" id="Suchbegriff"/><input type="submit" value="suchen" />
</we:form>
</body>
</html>
und in einem unserer Testsystem getestet. Das von dir beschriebene Verhalten war weder in Edge, Opera, Firefox oder Chrome nachvollziehbar. Getestet mit webEdition V6.4.3 und V7.0.3.

Hast du noch Code zur Anzeige der Suchergebnisse? Bzw. wird der Suchbegriff im Template noch mal ausgegeben?


Liebe Grüße,
Sascha

Re: DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Mi 3. Mai 2017, 17:31
von helas
Hallo Sascha,

danke schon mal für deine Mühe.
Hier der komplette Code und ja, der Suchbegriff wird noch mal ausgegeben:

Code: Alles auswählen

<div>Suchbegriff: </div>
<div id="searchform">
<?php if($_GET['we_lv_search_suche']){ $search_term = $_GET['we_lv_search_suche'];	} ?>
<we:form type="search" name="suche" class="suchen" method="get">
<we:search type="textinput" value="\$search_term" name="suche" id="Suchbegriff"/><input type="image" src="/_standards/img/btn_suche.gif" />
</we:form>
</div>

<we:listview type="search" name="suche" order="Title" desc="true" workspaceID="34,32,33,35,264" objectseourls="true" hidedirindex="true">
    <we:ifFound>
      <p>Ihre Suche nach "<em><b><?php echo $search_term;?></b></em>" ergab folgende Treffer:</p><br />
      <we:repeat>
        <we:field name="Title" alt="we_path" hyperlink="true"/><br />
        <we:ifFieldNotEmpty match="Description">
        	<we:field name="Description" max="140"/><br />
        </we:ifFieldNotEmpty>
        <br />
      </we:repeat>
    </we:ifFound>
    <we:ifNotFound>
      Zu Ihrer Suchanfrage "<em><b><?php echo $search_term;?></b></em>" konnte leider kein Treffer gefunden werden.
    </we:ifNotFound>
  </we:listview>
Beste Grüße
Lars

Re: DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Mi 3. Mai 2017, 20:52
von WBTMagnum
Hallo Lars,

Wie von Marc bereits angemerkt, sollten "Benutzereingaben" via $_REQUEST, $_GET & $_POST nicht ohne weitere Prüfung übernommen und ausgegeben werden. Damit öffnet ihr Tür und Tor für Injections. Besser die dafür vorgesehenen we-Tags verwenden.

Liebe Grüße,
Sascha

Re: DOM-Injection bzw. Cross-Site Scripting verhindern

Verfasst: Do 4. Mai 2017, 11:11
von helas
Hallo Sascha, hallo Mark,

...das war's. Sorry, dass wir euch mit unserer einer Nachlässigkeit hier behelligen.

Aber großen Dank an euren Einsatz. Ich bin immer wieder begeistert, wie schnell es hier im Forum Rückmeldung und Lösungsvorschläge gibt.
Weiter so! Zeigt, dass webEdition lebt und im Ergebnis ein TOP CMS ist.

Grüße, Lars