Une vulnérabilité critique dans Ruby on Rails pourrait permettre à un attaquant non authentifié d’écrire des fichiers arbitraires sur un serveur en téléversant un fichier spécialement conçu, si l’application traite les téléversements avec ImageMagick. Rails a divulgué le problème dans un avis de sécurité et publié des correctifs dans les versions 8.1.4.1 et 8.0.5.2.
La faille concerne Active Storage, le composant de Rails chargé des téléversements de fichiers. Les applications sont exposées lorsqu’elles utilisent ImageMagick pour traiter les téléversements, acceptent des fichiers provenant d’utilisateurs non fiables et disposent d’une politique de sécurité ImageMagick qui ne bloque pas les coders concernés. Rails indique que les politiques fournies avec Debian et Ubuntu ne les bloquent pas.
Le risque peut aller au-delà de l’écriture de fichiers. Les applications utilisant le service Disk d’Active Storage stockent les fichiers téléversés sur le serveur, et un attaquant pourrait également être en mesure de lire les fichiers accessibles à l’application. Il peut s’agir notamment de secret_key_base de Rails et d’identifiants pour d’autres systèmes, ce qui pourrait permettre une compromission plus poussée, notamment l’exécution de code à distance ou le déplacement vers des systèmes connectés.
Rails attribue à la vulnérabilité une note de 9,8 sur 10 sur l’échelle CVSS. Elle est référencée sous GHSA-f3w6-w445-fwh9 et n’a pas d’identifiant CVE. Le problème a été signalé par l’intermédiaire de HackerOne par RyotaK, chercheur chez GMO Flatt Security. Rails a déclaré avoir reçu le signalement d’une chaîne d’attaque, tout en avertissant que d’autres méthodes pourraient exister ; l’avis ne précise pas si la faille a été exploitée.
Le chemin vulnérable est emprunté lorsqu’Active Storage analyse un téléversement joint. Il n’est pas nécessaire de générer une variante ou un aperçu, et l’application n’a pas besoin d’appeler la méthode analyze. Selon le commit du correctif, un SVG téléversé pouvait atteindre le coder MSL d’ImageMagick, capable de lire et d’écrire les fichiers indiqués dans son script. Active Storage ne limitait pas les coders ImageMagick autorisés à traiter un téléversement, laissant la politique ImageMagick du serveur comme seul mécanisme de contrôle.
Toutes les versions d’Active Storage antérieures à la version 8.0.5.2 sont concernées, de même que les versions 8.1 antérieures à la version 8.1.4.1. Rails indique que les séries de versions antérieures à la 8.0 ne sont plus prises en charge et ne recevront pas de versions corrigées. Le paramètre concerné est config.active_storage.variant_processor : :mini_magick utilise ImageMagick, tandis que la valeur par défaut dépend du paramètre load_defaults de l’application. Ce paramètre détermine également quelle bibliothèque analyse les téléversements.
Les mêmes versions corrigent une vulnérabilité distincte d’Active Storage, GHSA-v924-7rp8-4mxh, notée 8,8 sur l’échelle CVSS. Dans ce cas, les téléversements étaient transmis à ImageMagick et FFmpeg sous des noms de fichiers temporaires qui conservaient leurs extensions, ce qui pouvait permettre à un attaquant d’influencer le décodeur chargé de traiter un fichier. Rails indique que les deux versions corrigent au total 21 problèmes de sécurité.
Rails recommande vivement la mise à niveau. Les applications utilisant :mini_magick ont également besoin de mini_magick 5.1 ou d’une version ultérieure, faute de quoi elles risquent de rencontrer une erreur au démarrage. Les versions incluent une politique ImageMagick qui bloque MSL, certains coders capables d’accéder à d’autres fichiers ou références, les coders faisant appel à Ghostscript ainsi que le délégué gs, et l’indirection @filename.
Les administrateurs doivent confirmer que l’application charge la nouvelle politique et vérifier si une configuration personnalisée de MiniMagick l’empêche de prendre effet. Cette politique complète celle d’ImageMagick sur le serveur, mais ne la remplace pas ; une règle existante autorisant un coder peut donc l’emporter sur le nouveau blocage. La politique incluse ne protège pas les applications utilisant GraphicsMagick.
Si une mise à niveau est impossible, Rails recommande d’appliquer les règles de la politique fournie à la politique système d’ImageMagick, en bloquant au minimum MSL, les coders Ghostscript et le délégué gs. Pour les applications utilisant le service Disk, Rails conseille également de modifier secret_key_base ainsi que tous les autres secrets lisibles par l’application, notamment les identifiants, les mots de passe du stockage et de la base de données, et les jetons de services tiers. L’avis ne fournit pas de méthode permettant de déterminer si une application a déjà été ciblée.
Sources: The Hacker News.