Skip to main content

Atténuer les vulnérabilités d’ImageMagick dans Node.js

Écrit par

6 mai 2016

0 minutes de lecture

Plusieurs vulnérabilités graves et faciles à exploiter dans ImageMagick ont été divulguées en début de semaine et sont déjà exploitées dans la nature. En l’absence de correctif officiel, nous avons créé un package appelé imagemagick-safe qui désactive les fonctionnalités vulnérables et protège contre les exploits connus.

En bref

ImageMagick est une bibliothèque et un binaire extrêmement populaires pour manipuler des images. On les utilise souvent, entre autres, pour traiter des contenus générés par les utilisateurs, comme des avatars ou des photos de produits, ou pour afficher des images sur les réseaux sociaux.

En début de semaine, plusieurs vulnérabilités graves et faciles à exploiter dans ImageMagick ont été divulguées. Aucun correctif officiel n’est disponible, mais il est possible d’atténuer le risque en désactivant certaines fonctionnalités.

Dans Node.js, ImageMagick est principalement utilisé via le package npm imagemagick. Celui-ci n’a pas été mis à jour depuis plus de deux ans et ne devrait donc pas aider à résoudre ce problème.

Pour aider à protéger les utilisateurs de ImageMagick dans Node.js, nous avons publié un package npm dédié appelé imagemagick-safe, qui désactive les fonctionnalités vulnérables. Nous avons également proposé une pull request intégrant cette modification au dépôt GitHub du package imagemagick. Toutefois, vu l’inactivité du dépôt, nous pensons qu’elle a peu de chances d’être intégrée.

ImageTragick : contexte

Les vulnérabilités divulguées méritent une attention particulière pour trois raisons :

  1. Certaines sont extrêmement graves : elles permettent aux attaquants d’exécuter des commandes sur le serveur, d’accéder aux fichiers du serveur, et bien plus encore.

  2. Ces vulnérabilités sont faciles à exploiter : un fichier image spécialement conçu et une seule requête HTTP suffisent.

  3. Aucun correctif officiel n’est encore disponible.

  4. Ces vulnérabilités sont déjà exploitées dans la nature.

L’ensemble de l’incident est désigné sous le nom d’ImageTragick. Vous trouverez plus de détails sur les vulnérabilités sur son site dédié, imagetragick.com.

Cause et mesures d’atténuation

D’après les informations disponibles, les vulnérabilités sont toutes liées au traitement de certains types de fichiers image et mots-clés, comme MVG, URL et HTTPS. Ces types de fichiers prennent en charge des actions internes (par exemple, inclure une autre image), dont le traitement n’est pas suffisamment sécurisé, ce qui permet l’exécution de commandes à distance. Voici un exemple d’exploit, repris du site officiel consacré aux vulnérabilités :

Exemple d’exploit.svg

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";> 
<svg width="640px" height="480px" version="1.1" xmlns="http://www.w3.org/2000/svg"; xmlns:xlink= "http://www.w3.org/1999/xlink";> 
<image xlink:href="https://example.com/image.jpg"|ls "-la" 
x="0" y="0" height="640px" width="480px"/>

Exemple d’exécution

$ convert exploit.mvg out.png
total 32
drwxr-xr-x 6 user group 204 Apr 29 23:08 .
drwxr-xr-x+ 232 user group 7888 Apr 30 10:37 ..

Pour désactiver la prise en charge de ces formats et mots-clés, modifiez le fichier de configuration (facultatif) policy.xml d’ImageMagick en veillant à ce qu’il contienne le texte ci-dessous. Cette opération supprimera réellement certaines fonctionnalités, mais permettra également de corriger les vulnérabilités. Notez que la modification de la stratégie ne garantit pas l’élimination de tous les exploits possibles. Toutefois, les chercheurs en sécurité affirment qu’elle bloque tous ceux qu’ils connaissent à ce jour.

<policymap>
  <policy domain="coder" rights="none" pattern="EPHEMERAL" />
  <policy domain="coder" rights="none" pattern="URL" />
  <policy domain="coder" rights="none" pattern="HTTPS" />
  <policy domain="coder" rights="none" pattern="MVG" />
  <policy domain="coder" rights="none" pattern="MSL" /> 
  <policy domain="coder" rights="none" pattern="TEXT" />
  <policy domain="coder" rights="none" pattern="SHOW" />
  <policy domain="coder" rights="none" pattern="WIN" />
  <policy domain="coder" rights="none" pattern="PLT" />
</policymap>

Package npm imagemagick-safe

Comme le package principal imagemagick n’est plus maintenu, nous avons créé un nouveau package appelé imagemagick-safe.

Ce package impose l’utilisation de la stratégie ci-dessus. Il désactive certaines fonctionnalités, mais élimine ainsi les vulnérabilités. Nous vous recommandons de l’utiliser jusqu’à la publication de nouveaux binaires ImageMagick et jusqu’à ce que vous ayez confirmé la mise à niveau de vos systèmes.

Vous pouvez également utiliser ImageMagick via le package gm. Nous étudions la possibilité d’y proposer aussi une pull request.

Si vous rencontrez des problèmes ou souhaitez nous faire part de vos commentaires sur ce package, écrivez-nous à l’adresse support@snyk.io.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.