Le chasseur de vulnérabilité, Tavis Ormandy, vient de signaler une série de problèmes de sécurité dans une application appelée Ghostscript.
Ormandy travaille pour Google Project Zero, il chasse littéralement des bugs pour gagner sa vie, et son travail est à la fois connu et réputé…
… mais à quoi sert Ghostscript, et pourquoi quelqu’un d’aussi talentueux qu’Ormandy a ressenti le besoin d’approfondir ce sujet ?
Eh bien, pour beaucoup de gens, Ghostscript est un logiciel dont ils n’ont jamais entendu parler, mais qu’ils utilisent ou sur lequel ils comptent régulièrement, et ce sans même s’en rendre compte !
Ghostscript est une implémentation libre et gratuite d’Adobe PostScript, un langage de programmation et un écosystème qui alimente de nombreuses imprimantes. C’est la base technique de presque tous les fichiers PDF.
En effet, si vous ouvrez un fichier PDF ou en générez un, vous êtes presque certainement en train de lancer un environnement d’exécution PostScript pour exécuter un programme PostScript décrivant le document.
De nombreux toolkits open source, des éditeurs d’images, des créateurs de documents, des packages d’illustration, des visionneuses de PDF, etc, font appel à Ghostscript pour réaliser l’essentiel du rendu texte et graphique.
En d’autres termes, que vous le sachiez ou non, vous avez probablement utilisé Ghostscript récemment, que ce soit localement au niveau de votre propre ordinateur, ou bien à distance via les serveurs d’un tiers, lors de l’utilisation d’un service cloud.
L’exécution de code à distance et les bugs favorisant les fuites de données dans Ghostscript sont donc à connaître, même s’ils ne vous mettent pas immédiatement en danger et que vous devez compter sur un tiers pour les résoudre.
Les vulnérabilités analysées par Ormandy couvrent toute une série de failles de sécurité, notamment celles permettant :
- L’exécution de commandes shell de votre choix.
- La création de fichiers dans des répertoires auxquels vous n’êtes pas censé accéder.
- La suppression de fichiers même si vous ne disposez que des droits de lecture.
- L’extraction des données de fichiers pour lesquels vous n’avez pas d’autorisation.
Les bugs d’Ormandy vous obligent à alimenter un moteur Ghostscript installé (connu dans le métier sous le nom d’interpréteur, car il interprète et donne un sens au code Ghostscript) avec un fichier d’entrée malveillant de votre propre conception, rendant à première vue ces bugs pas réellement dangereux.
Après tout, si vous pouvez télécharger un fichier arbitraire et le lancer de la manière que vous désirez, vous pouvez tout aussi bien exécuter des malwares via un large éventail de langages de programmation différents.
Sur un Mac, par exemple, vous pouvez choisir par défaut des versions préinstallées de Perl, Python, Ruby, PHP, Tcl, Bash, AppleScript, etc. Sous Windows, vous pouvez exécuter du code dans Visual Basic Script, JavaScript ou Powershell, et ce directement…
… ou vous pouvez simplement télécharger ou créer un malware binaire compilé et l’exécuter directement.
Néanmoins, même s’il s’agit de votre propre ordinateur et que vous êtes autorisé à installer de nouveaux programmes, votre compte classique ne peut ni lire ni supprimer les fichiers appartenant à d’autres utilisateurs. Ainsi les bugs de ce type représentent donc des vulnérabilités EoP (Elevation des Privileges).
Le problème majeur
Mais il existe un problème plus important ici, causé par la façon dont Ghostscript est souvent utilisé. En effet, il n’est généralement pas traité comme un langage de programmation comme Perl ou Python, mais comme un mécanisme de conversion de graphismes ou de documents d’impression.
Si un individu vous envoie un fichier de document à imprimer, ou un fichier image pour conversion, vous êtes censé pouvoir le traiter sans trop de difficultés via l’application de rendu appropriée, et cette dernière pourrait bien être Ghostscript !
Ghostscript dispose même d’un paramètre spécial, activable grâce à l’option de ligne de commande -dSAFER
, qui agit comme une sorte de sandbox pour limiter les dommages causés par une image ou un document malveillant. Or, les dernières vulnérabilités d’Ormandy permettent d’échapper justement aux restrictions de SAFER
.
Et de nombreux serveurs, notamment ceux qui exécutent des blogs et des forums, incluent et utilisent Ghostscript, que l’entreprise qui les exploite en ait conscience ou non.
Par exemple, de nombreux sites de blogs et de réseaux sociaux vous permettent d’uploader vos propres images et retravailleront automatiquement les fichiers que vous avez uploadés afin qu’ils correspondent aux exigences de formatage et de rendu du site.
Ces modifications en matière de reformatage comprennent généralement la conversion du fichier en un format de fichier choisi, son redimensionnement vers un jeu standard de tailles, l’application de filtres de couleur, l’ajout de droits d’auteur ou d’autres messages, la compression pour économiser de l’espace, etc (dans le jargon technique, cette étape s’appelle le transcodage).
Très souvent, un outil de ligne de commande très répandu et appelé ImageMagick est utilisé à cette fin, signifiant ainsi que l’utilitaire ImageMagick est régulièrement censé accepter et traiter en toute sécurité des fichiers non fiables, uploadés depuis l’extérieur …
… et ImageMagick, par défaut, utilise Ghostscript dans son processus de transcodage, s’il rencontre du contenu PostScript.
Par conséquent, une faille de sécurité exploitable dans Ghostscript signifie souvent une faille également dans ImageMagick, et une faille dans ImageMagick implique très certainement une faille exploitable depuis l’extérieur, au sein de votre système de gestion de contenu, de votre serveur de blogs ou de votre forum en ligne.
Quoi faire ?
Ghostscript, semble-t-il, fonctionne toujours avec les derniers bugs d’Ormandy, il n’y a donc pas encore de mise à jour disponible !
Mais l’un des moyens les plus probables d’être affecté par l’un de ces bugs, du moins par le contenu distant uploadé pour vous attaquer, est via ImageMagick.
Vous pouvez donc utiliser les paramètres de configuration d’ImageMagick pour limiter votre exposition.
Par exemple, vous pouvez désactiver la capacité d’ImageMagick à traiter les fichiers PostScript définitivement (et le format de fichier similaire associé, appelé Encapsulated PostScript), à moins d’être certain d’avoir à gérer des fichiers de ce type.
Par défaut, ImageMagick affichera les fichiers PS et EPS s’ils sont présentés avec des données PostScript, mais vous pouvez modifier ce réglage via policy.xml
, l’un des fichiers de configuration d’ImageMagick.
Pour savoir où se trouve votre fichier policy.xml
, essayez la commande suivante :
$ identify -list configure | grep CONFIGURE-PATH CONFIGURE_PATH /usr/local/etc/ImageMagick-7/ $
Pour connaitre les formats de fichiers, pris en charge par votre ImageMagick, et qui peuvent être désactivés de manière sélective :
$ identify -list format Format Mode Description ----------------------------------------------- 3FR r-- Hasselblad CFV/H3D39II 3G2 r-- Media Container 3GP r-- Media Container . . . . EPS rw- Encapsulated PostScript EPS2* -w- Level II Encapsulated PostScript EPS3* -w+ Level III Encapsulated PostScript EPSF rw- Encapsulated PostScript . . . . PDF rw+ Portable Document Format PDFA rw+ Portable Document Archive Format . . . . PS rw+ PostScript PS2* -w+ Level II PostScript PS3* -w+ Level III PostScript . . . . YCbCrA* rw+ Raw Y, Cb, Cr, and alpha samples YUV* rw- CCIR 601 4:1:1 or 4:2:2 . . . . * native blob support r read support w write support + support for multiple images $
Pour désactiver la gestion des formats individuels, ajoutez une ou plusieurs lignes de ce type à policy.xml
:
<policy domain="coder" rights="none" pattern="{EPS,PS,PDF,PDFA}" />
NB : Ci-dessus, nous venons de sélectionner tous les formats apparemment PostScript ou PDF que notre installation a listés comme ayant un “support en lecture”.
Une meilleure solution, en utilisant une approche d’activation plutôt que de désactivation afin de réduire au maximum votre surface d’exposition à une éventuelle attaque, est la suivante :
<policy domain="coder" rights="none" pattern="*" /> <policy domain="coder" rights="read|write" pattern="{GIF,JPEG,PNG}" />
Le motif d’identification du transcodeur "*"
, au niveau de la première ligne est une sorte de joker, signifiant ainsi qu’il peut tout traiter et par conséquent désactive tout.
La deuxième ligne vous renvoie alors explicitement sur un ensemble minimum de transcodeurs, en fonction des formats de fichiers que vous devez prendre en charge pour les uploads non fiables.
La prochaine étape ?
Si vous utilisez Linux ou un gestionnaire de paquets tel que Macports, Homebrew ou Fink sur un Mac, votre système doit vous alerter lorsqu’une mise à jour officielle de Ghostscript est disponible. Gardez les yeux grands ouverts !
Billet inspiré de How an uploaded image could take over your website, and how to stop it, sur Sophos nakedsecurity.