veilletech.fr
5 nov. Feed du jour
#02 SÉCURITÉ Faille

Rails : un SVG écrit des fichiers via ImageMagick

Votre ImageMagick fait confiance au contenu du fichier : donnez-lui une politique.

Rails corrige une faille critique d'Active Storage (GHSA-f3w6-w445-fwh9, CVSS 9.8) : un fichier forgé, envoyé sans compte, peut faire écrire des fichiers arbitraires sur le serveur quand l'application traite les images avec ImageMagick, et lire tout fichier si le stockage est le disque local. Les versions 8.1.4.1 et 8.0.5.2 livrent une politique ImageMagick qui bloque les décodeurs en cause.

4 min de lectureintermédiairevidéo 1:13
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Le mécanisme
  3. Êtes-vous concerné ?
  4. Que faire
  5. Ce que l'on ne sait pas
  6. À retenir

Ce qui se passe

Le projet Rails a corrigé une faille critique d'Active Storage, la partie du framework qui gère les fichiers envoyés par les utilisateurs. Identifiant : GHSA-f3w6-w445-fwh9, score CVSS 9.8, pas encore de CVE. Un attaquant sans compte qui téléverse un fichier forgé peut faire écrire des fichiers arbitraires sur le serveur, si l'application traite ses images avec ImageMagick. Quand les fichiers sont stockés par le service Disk (le disque du serveur), il peut aussi lire tout fichier que l'application lit : typiquement secret_key_base et les identifiants vers d'autres systèmes, ce qui ouvre la voie à l'exécution de code ou au rebond. Le défaut a été signalé via HackerOne par RyotaK, de GMO Flatt Security.

Le mécanisme

ImageMagick choisit un décodeur (un coder) d'après le contenu du fichier, pas d'après son nom. Certains décodeurs agissent sur d'autres fichiers cités dans l'image. Active Storage ne limitait pas les décodeurs permis : la seule barrière était la politique ImageMagick du serveur.

Le commit de correction montre le chemin : un SVG envoyé atteint, par l'analyseur d'Active Storage, le décodeur MSL, un langage de script qui lit et écrit les fichiers nommés dans son script. L'analyseur tourne dès que le fichier est attaché : l'application n'a besoin ni de créer une variante, ni un aperçu, ni d'appeler analyze.

Êtes-vous concerné ?

Il faut que les trois conditions soient réunies :

  1. Le traitement d'images passe par ImageMagick : config.active_storage.variant_processor = :mini_magick. Sans réglage explicite, c'est le défaut des applications en load_defaults 6.1 ou plus ancien ; à partir de 7.0, le défaut est :vips. Ce réglage décide aussi quelle bibliothèque analyse les envois.
  2. La politique ImageMagick ne bloque pas ces décodeurs. Selon Rails, celles livrées par Debian et Ubuntu ne les bloquent pas.
  3. L'application accepte des fichiers d'utilisateurs non fiables.

Toutes les versions d'Active Storage antérieures à 8.0.5.2 sont touchées, ainsi que les 8.1 avant 8.1.4.1. Les séries antérieures à 8.0 ne sont plus maintenues : aucune version corrigée n'y sera publiée.

Que faire

Terminal
bin/rails runner 'puts MiniMagick.identify { |i| i.list "policy" }'
XML
<policy domain="coder" rights="none" pattern="MSL" />

Ce que l'on ne sait pas

Rails dit qu'une seule chaîne d'attaque lui a été signalée, sans supposer qu'elle soit la seule. L'avis ne dit pas si la faille est exploitée ni comment savoir si une application a déjà été visée. Les mêmes versions corrigent un second défaut, GHSA-v924-7rp8-4mxh (8.8, élevée) : Active Storage passait les envois à ImageMagick et FFmpeg sous des noms temporaires qui gardaient l'extension fournie, laissant l'attaquant choisir le décodeur. Au total, ces deux versions corrigent 21 problèmes de sécurité.

Une extrapolation de cette fiche, que la source ne formule pas : toute application qui confie à ImageMagick des fichiers d'inconnus, en PHP avec Imagick ou en ligne de commande, relève de la même question de politique système.

Source : The Hacker News, qui cite l'avis GHSA-f3w6-w445-fwh9. Source en anglais.