XSS – Cross Site Scripting mit Bildern – Drupal Security Teil 2

Im Post von gestern habe ich kurz erklärt, worum es beim Cross Site Scripting geht. Jetzt geht es jedoch darum, das ganze noch ein wenig auszuweiten. Bisher ging es ja vor allem um triviale/offensichtliche Sicherheitslücken.

Es geht aber unter Umständen viel heimtückischer zum Beispiel mit Bildern. Z.B. das Bild unten von der netten kleinen Katze, aber diese Katze hat es in sich.

Schauen wir uns nämlich die Exif Daten dieses Bildes an, so werden wir sehen, dass es einen XSS Angriff enthält:

Color SpacesRGB
Components ConfigurationYCbCr
Compressed Bits Per Pixel4
CompressionJPEG (old-style)
Create Date2000:12:31 15:20:13
8 years, 3 months, 6 days, 17 hours, 1 minute, 43 seconds ago
Date/Time Original2000:12:31 15:20:13
8 years, 3 months, 6 days, 17 hours, 1 minute, 43 seconds ago
Exif Image Size600 × 450
Exif Version0210
Exposure Compensation0
Exposure ProgramProgram AE
Exposure Time1/112
F Number6.0
File SourceDigital Camera
FlashNo Flash
Flashpix Version0100
Focal Length15.8 mm
ISO80
Image Description
Interoperability IndexR98 – DCF basic file (sRGB)
Interoperability Version0100
Light SourceUnknown
Make<script type="text/javascript">alert("xss");</script>
Max Aperture Value2.5
Metering ModeMulti-segment
Camera Model Name<script type="text/javascript">alert("xss");</script>
Modify Date2009:04:07 17:21:04
8 hours, 59 minutes, 8 seconds ago
OrientationHorizontal (normal)
Resolution72 pixels/inch
Scene TypeDirectly photographed
SoftwareGIMP 2.6.2
Thumbnail Length6,271
User Comment
X Resolution300
Y Cb Cr PositioningCo-sited
Y Resolution300

Würde ich jetzt auf meiner Applikation den Exif Wert "Camera Model Name" einfach so ausgeben würde, dann würde eine hübsche kleine Javascript Message Box mit xss erscheinen… oder es lassen sich eben auch noch andere Dinge machen. Das wäre eine massive Sicherheitslücke einer Applikation.

In Drupal verwendet man dazu am Besten die check_plain() Funktion, welche eben dafür schaut, dass keine bösen Sachen reinkommen. Beim Entwickeln von Anwendungen also nicht immer nur die offensichtlichen Sicherheitslücken beachten sondern auch weniger offensichtliche aber dennoch gefährliche.