XSS en un archivo jpeg

2

Hoy vi este informe: enlace . Allí, el pirata informático subió un archivo con JavaScript, que pudo activar con éxito ese código. Pero no entiendo dos cosas y quizás puedas ayudarme a aclarar esto.

En primer lugar, ¿dónde coloca el pirata informático el código JavaScript? Al utilizar la herramienta dhex , obtengo esta salida y también puedo ver el código JavaScript

El archivo también es un archivo jpeg válido, así que puedo abrirlo y verlo. Al buscar en los Metatags con exiftool , no veo ningún código de JavaScript:

ExifTool Version Number         : 10.23
File Name                       : xss.jpg
Directory                       : .
File Size                       : 57 kB
File Modification Date/Time     : 2017:07:06 19:02:47+02:00
File Access Date/Time           : 2017:07:06 19:06:44+02:00
File Inode Change Date/Time     : 2017:07:06 19:02:47+02:00
File Permissions                : rwxrwxrwx
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : inches
X Resolution                    : 72
Y Resolution                    : 72
Profile CMM Type                : lcms
Profile Version                 : 2.1.0
Profile Class                   : Display Device Profile
Color Space Data                : RGB
Profile Connection Space        : XYZ
Profile Date Time               : 2012:01:25 03:41:57
Profile File Signature          : acsp
Primary Platform                : Apple Computer Inc.
CMM Flags                       : Not Embedded, Independent
Device Manufacturer             : 
Device Model                    : 
Device Attributes               : Reflective, Glossy, Positive, Color
Rendering Intent                : Perceptual
Connection Space Illuminant     : 0.9642 1 0.82491
Profile Creator                 : lcms
Profile ID                      : 0
Profile Description             : c2
Profile Copyright               : IX
Media White Point               : 0.9642 1 0.82491
Media Black Point               : 0.01205 0.0125 0.01031
Red Matrix Column               : 0.43607 0.22249 0.01392
Green Matrix Column             : 0.38515 0.71687 0.09708
Blue Matrix Column              : 0.14307 0.06061 0.7141
Red Tone Reproduction Curve     : (Binary data 64 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 64 bytes, use -b option to extract)
Blue Tone Reproduction Curve    : (Binary data 64 bytes, use -b option to extract)
Image Width                     : 882
Image Height                    : 650
Encoding Process                : Progressive DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 882x650
Megapixels                      : 0.573

La segunda parte que quiero entender es: ¿bajo qué condición se puede activar el javascript?

    
pregunta kristian 06.07.2017 - 20:30
fuente

1 respuesta

2
  

En primer lugar, ¿dónde coloca el pirata informático el código JavaScript?

Lo más probable es que el autor solo pueda colocar el Javascript en cualquier lugar del archivo, siempre que no esté dañado de forma que la aplicación lo rechace. Esto no necesariamente tiene que ser un campo de metadatos asignado.

De hecho, la herramienta ImageMagick identify detecta que el archivo tiene un formato incorrecto:

$ identify xss.jpg
xss.jpg JPEG 882x650 882x650+0+0 8-bit sRGB 58189B 0.010u 0:00.009
identify: Corrupt JPEG data: 25 extraneous bytes before marker 0xdb 'xss.jpg' @ warning/jpeg.c/JPEGWarningHandler/351.

Estos "bytes extraños" son exactamente la carga útil de Javascript.

  

La segunda parte que quiero entender es: ¿bajo qué condición se puede activar el javascript?

El Javascript se activa si la imagen se sirve como text/html en lugar de image/jpeg .

La vulnerabilidad que el autor descubrió fue que la aplicación deriva el tipo de contenido de la extensión del archivo en lugar del tipo de medio deseado. Así que solo podrían cambiar una extensión .jpg a .html y la aplicación automáticamente enviaría los mismos datos con Content-type: text/html , sin importar si se cargó originalmente como un archivo de imagen.

Este es un error en la aplicación, y no puedes esperar que otras aplicaciones se comporten de esa manera. Para obtener el mismo efecto, puede cambiar el nombre del archivo PoC JPG a xss.html y abrirlo en su navegador.

    
respondido por el Arminius 06.07.2017 - 20:43
fuente

Lea otras preguntas en las etiquetas