vendredi 1 novembre 2013

Mon petit 0day pour l'ANSSI :)

Au cours d'un test un peu farfelu je suis tombé sur une faille un peu inclassable et un peu inutile :)
Mais finalement vu tous les articles sur la "privacy" qu'on peut lire actuellement, je vais balancer mon 0day... et puis je doute obtenir un bug bounty de Microsoft.

Je faisais de la classification d'informations recueillies avec FOCA et j'ai creusé un peu plus que nécessaire dans les metadata des documents récupérés. Dans un premier temps j'ai fait une passe sur les metadata des fichiers PDF avec pdfinfo, puis j'ai fait la même chose sur les images avec exiv2. Et là je me suis dit. Est-ce qu'on ne pourrait pas chopper les données exif des images contenues dans les pdf ???

Rien de plus simple ! Il existe un outil qui s'appelle pdfimages pour extraire les images des pdf. Alors en route.

#!/bin/bash

# dependances:
# md5deep
# poppler-utils -> pdfimages

mkdir images
for file in *.pdf
do
 echo ${file}
 pdfimages -j "${file}" ./images/"${file}"
 #on vire les bouzins n&b
 find ./images/ -name "${file}*.pbm" -exec rm -f {} \; 
 #ppm
 find ./images/ -name "${file}*.ppm" -size -300k -exec rm -f {} \; 
 #jpg
 find ./images/ -name "${file}*.jpg" -size -20k -exec rm -f {} \;
 #moulinette pour virer les doublons
 md5deep "./images/${file}"* | sort | while read arg1 arg2
 do
  newsum=$arg1
  if [ "$newsum" = "$oldsum" ]
  then
   rm  "$arg2"
  fi
  oldsum="$newsum"
 done
done
#doublons inter documents
md5deep ./images/* | sort | while read arg1 arg2
do
 newsum=$arg1
 if [ "$newsum" = "$oldsum" ]
 then
  rm  "$arg2"
 fi
 oldsum="$newsum"
done

Ce script va extraire les images dans un sous-répertoire, ma première idée était de visualiser les images pour ne pas à me palucher 800 documents à lire. Donc j'ai mis une moulinette qui supprime les images trop petites. A vous de voir la quantité d'images que vous obtenez.
A noter que PDF Creator simule une imprimante virtuelle. J'ai l'impression qu'il fait des miettes d'images minuscules (des milliers). C'est pour cela que j'ai viré les petites images.

Puis enfin je passe le script exif sur les images :

#!/bin/bash
# dependance: exiv2

for file in *.jpg
do
 nbLine=$(exiv2 ${file} | grep -c "Exif")
 if [ "${nbLine}" -ne 0 ]
 then
  echo ${file}
  exiv2 -pt -u "${file}"
 fi
done

Si je prends par exemple un fichier appelé ANSSI_Presentation_PASSI_du_10_sept_2013.pdf, j'obtiens les informations suivantes avec pdfinfo :

pdfinfo ANSSI_Presentation_PASSI_du_10_sept_2013.pdf 
Creator:        Microsoft® PowerPoint® 2010

Et la sortie de mon script :

Exif.Image.0x0302                            Ascii      22  Photoshop ICC profile
Exif.Image.Software                          Ascii      37  Adobe Photoshop Elements 8.0 Windows
Exif.Image.DateTime                          Ascii      20  2011:08:09 09:08:37
Exif.Photo.UserComment                       Undefined 122  CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90

Rien de vraiment intéressant, mais une belle preuve de concept montrant qu'Office 2010 ne supprime pas les données Exif des images intégrées dans les documents lorsqu'ils sont enregistrés en PDF. Je n'ai constaté le même résultat avec PDF creator ou PDF distiller. Je n'ai pas non plus tester sur un fichier issu d'Office 2013.