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 Space sRGB
Components Configuration YCbCr
Compressed Bits Per Pixel 4
Compression JPEG (old-style)
Create Date 2000:12:31 15:20:13
8 years, 3 months, 6 days, 17 hours, 1 minute, 43 seconds ago
Date/Time Original 2000:12:31 15:20:13
8 years, 3 months, 6 days, 17 hours, 1 minute, 43 seconds ago
Exif Image Size 600 × 450
Exif Version 0210
Exposure Compensation 0
Exposure Program Program AE
Exposure Time 1/112
F Number 6.0
File Source Digital Camera
Flash No Flash
Flashpix Version 0100
Focal Length 15.8 mm
ISO 80
Image Description
Interoperability Index R98 – DCF basic file (sRGB)
Interoperability Version 0100
Light Source Unknown
Make <script type="text/javascript">alert("xss");</script>
Max Aperture Value 2.5
Metering Mode Multi-segment
Camera Model Name <script type="text/javascript">alert("xss");</script>
Modify Date 2009:04:07 17:21:04
8 hours, 59 minutes, 8 seconds ago
Orientation Horizontal (normal)
Resolution 72 pixels/inch
Scene Type Directly photographed
Software GIMP 2.6.2
Thumbnail Length 6,271
User Comment
X Resolution 300
Y Cb Cr Positioning Co-sited
Y Resolution 300

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.