Ruby on Rails a publié des mises à jour de sécurité pour une vulnérabilité critique dans Active Storage qui permet à un attaquant non authentifié de lire des fichiers arbitraires depuis un serveur d’applications via des téléchargements d’images préparées. Suivie sous le code CVE-2026-66066 et notée 9,5 sur l’échelle CVSS, cette faille peut exposer des secrets accessibles au processus Rails et potentiellement permettre l’exécution de code à distance ou un déplacement latéral dans les systèmes connectés.
Le problème provient de l’interaction entre Active Storage et libvips, la bibliothèque de traitement d’images sélectionnée par les applications Rails utilisant les paramètres par défaut de la version 7.0 et plus. Dans une configuration par défaut de Rails qui accepte les téléchargements d’images d’utilisateurs non fiables, des opérations libvips non sûres peuvent traiter un fichier malveillant et divulguer des données qui ne devraient jamais être accessibles via une image téléchargée.
Les détails les plus importants pour le CVE-2026-66066 concernent la sensibilité des informations potentiellement exposées. Un attaquant peut récupérer l’environnement du processus Rails, le secret_key_base, la clé maître de Rails, les identifiants de la base de données, les clés de stockage cloud et les jetons d’API tiers. Selon les secrets obtenus, l’attaque peut progresser d’une divulgation de fichiers arbitraires à une falsification de session, une compromission de l’application ou un accès à une infrastructure externe.
Analyse du CVE-2026-66066
La faiblesse réside dans le traitement des variantes d’Active Storage lorsque l’application utilise libvips. Libvips prend en charge de nombreux chargeurs, enregistreurs et autres opérations pour la gestion des formats de fichiers. Certaines de ces opérations dépendent de bibliothèques tierces et sont classées comme « non testées par fuzzing » ou non fiables car elles ne sont pas sûres pour traiter des entrées hostiles.
Active Storage n’a pas bloqué ces opérations avant de transmettre les pièces jointes téléchargées à l’analyseur et au transformateur Vips. Par conséquent, un téléchargement préparé peut invoquer une opération non sûre et obtenir le contenu de fichiers arbitraires lisibles par le travailleur Rails.
Dans les scénarios les plus graves, les attaquants lisent les fichiers du serveur via des téléchargements d’images et récupèrent des valeurs sensibles de l’environnement de l’application. La faille ne nécessite pas une fonction spécifique de redimensionnement ou de miniature pour être exposée. Selon l’avis de Rails, la génération de variantes d’image n’est pas une exigence distincte pour qu’une application soit vulnérable.
CVE-2026-66066 affecte les applications qui remplissent les deux conditions suivantes :
- Elles utilisent libvips pour le traitement des images d’Active Storage, généralement via config.active_storage.variant_processor = :vips.
- Elles permettent aux utilisateurs non fiables de télécharger des images.
Les gammes affectées rapportées incluent Rails 7.0.0 jusqu’à 7.2.3.1, Rails 8.0.0 jusqu’à 8.0.5, et Rails 8.1.0 jusqu’à 8.1.3. Les applications Rails 6.0 et 6.1 peuvent également être exposées lorsque les administrateurs configurent explicitement Vips comme processeur d’image, bien que ce ne soit pas le paramètre par défaut pour ces versions. Les applications qui utilisent MiniMagick au lieu de Vips ne sont pas exposées via ce chemin d’attaque particulier.
Une fois que la lecture de fichiers arbitraires est réalisée, les attaquants peuvent cibler :
- secret_key_base
- config/master.key ou la variable d’environnement RAILS_MASTER_KEY
- Secrets déchiffrés à partir de config/credentials.yml.enc
- Noms d’utilisateur et mots de passe de la base de données
- Clés de stockage Amazon S3, Google Cloud Storage, ou Azure
- Jetons pour le paiement, la messagerie, la surveillance et d’autres services tiers
Obtenir le secret_key_base peut être particulièrement dangereux car Rails l’utilise pour protéger les données de l’application signées et chiffrées. Selon l’application et les chaînes d’appareils disponibles, une valeur volée peut permettre à un attaquant de falsifier des données de confiance et potentiellement de progresser vers l’exécution de code. Les identifiants Cloud ou API peuvent également supporter un déplacement latéral au-delà du serveur Rails compromis.
Un PoC tier supprimé pour CVE-2026-66066 est apparu peu de temps après la divulgation coordonnée et prétend reproduire une chaîne de lecture de fichiers arbitraires à exécution de code à distance dans un environnement Docker isolé. The Hacker News n’avait pas vérifié ce code de manière indépendante à la date de son rapport mis à jour, tandis que les équipes de recherche originales avaient intentionnellement retenu les mécanismes d’exploitation détaillés pour donner du temps aux administrateurs de patcher.
Il n’existe actuellement aucun IOC CVE-2026-66066 publié par le fournisseur ni de rapports confirmés d’exploitation sauvage. L’équipe de sécurité de Rails a déclaré qu’elle n’était pas au courant de tentatives d’exploitation avant ou après la divulgation, mais l’absence d’attaques connues ne doit pas être interpretée comme preuve que les applications exposées sont sûres.
Mitigation CVE-2026-66066
Les administrateurs devraient mettre à jour Active Storage à l’une des versions corrigées suivantes :
- Rails 7.2.3.2 ou supérieur
- Rails 8.0.5.1 ou supérieur
- Rails 8.1.3.1 ou supérieur
Rails 7.0 et 7.1 ne bénéficient plus de support de sécurité et ne recevront pas de correctif rétroporté. Les applications exécutant ces branches doivent migrer vers Rails 7.2.3.2 ou une version plus récente supportée.
La configuration corrigée nécessite également libvips 8.13 ou version ultérieure. Les applications qui utilisent directement la gemme ruby-vips doivent exécuter ruby-vips 2.2.1 ou version ultérieure. La correction appelle Vips.block_untrusted(true) lors de l’initialisation d’Active Storage, empêchant les opérations libvips non sûres de traiter des téléchargements hostiles.
La mise à jour clôt le chemin de traitement vulnérable, mais elle n’invalide pas les secrets qui ont peut-être déjà été divulgués. Les organisations devraient considérer chaque valeur lisible par le processus d’application Rails comme potentiellement compromise et la faire tourner. Cela inclut les secrets de signature de l’application, les clés maîtresses, les identifiants de base de données, les clés de service de stockage et les jetons tiers.
Changer secret_key_base invalidera les sessions actives et obligera les utilisateurs à se reconnecter. Cela affecte également les cookies chiffrés, les cookies signés, les IDs globaux signés et les URL d’Active Storage précédemment émises. Les administrateurs ne devraient pas conserver un secret exposé comme solution de secours après rotation.
Lorsque la mise à jour immédiate de Rails n’est pas possible, les applications utilisant libvips 8.13 ou version ultérieure peuvent définir la variable d’environnement suivante :
VIPS_BLOCK_UNTRUSTED
Les applications utilisant ruby-vips 2.2.1 ou version ultérieure peuvent également ajouter l’appel suivant à un initialiseur :
Vips.block_untrusted(true)
Les versions de libvips antérieures à 8.13 ne peuvent pas bloquer les opérations non sûres. Dans ces environnements, il n’y a pas de solution de contournement sécurisée réservée à la configuration. Les administrateurs doivent mettre à niveau libvips ou supprimer la dépendance, par exemple en retirant ruby-vips de Gemfile où il n’est pas requis.
La détection du CVE-2026-66066 devrait commencer par un inventaire des applications utilisant Active Storage, Vips, et les téléchargements d’images non fiables. Les équipes de sécurité devraient examiner les journaux d’application et de proxy pour une activité de téléchargement inhabituelle, des formats d’image inattendus, des erreurs de traitement de variantes répétées, et des requêtes suivies d’une utilisation suspecte de sessions ou d’identifiants.
Pour détecter une exposition à CVE-2026-66066, les équipes devraient vérifier les versions exactes d’Active Storage, libvips et ruby-vips plutôt que de ne se fier qu’à la version principale de Rails. Les applications devraient également être examinées pour des preuves d’accès non autorisé concernant les identifiants disponibles du processus Rails.
FAQ
Qu’est-ce que le CVE-2026-66066 et comment fonctionne-t-il ?
CVE-2026-66066 est une vulnérabilité critique de lecture de fichiers arbitraires dans Ruby on Rails Active Storage. Active Storage a permis à des opérations libvips non sûres de traiter des téléchargements contrôlés par l’attaquant, permettant à un utilisateur non authentifié de récupérer des fichiers lisibles par le processus de l’application Rails. Les secrets de l’application volés peuvent alors supporter l’exécution de code à distance ou le déplacement latéral.
Quand le CVE-2026-66066 a-t-il été découvert pour la première fois ?
Les dates de découverte privée n’ont pas été divulguées au public. Le problème a été signalé indépendamment par des chercheurs d’Ethiack et de GMO Flatt Security, et l’avis de sécurité coordonné de Rails a été publié le 29 juillet 2026.
Quel est l’impact du CVE-2026-66066 sur les systèmes ?
L’impact direct est la divulgation de fichiers arbitraires. Les attaquants peuvent obtenir les secrets de signature de l’application, les identifiants Rails, les mots de passe de base de données, les clés de stockage cloud, ou les jetons tiers. Selon les données exposées et la configuration de l’application, la compromission peut s’étendre à la falsification de session, à l’exécution de code à distance ou à l’accès à des services connectés.
Le CVE-2026-66066 peut-il encore m’affecter en 2026 ?
Oui. Les applications Rails restent exposées si elles utilisent une version vulnérable d’Active Storage, traitent des images avec libvips, et acceptent des téléchargements d’utilisateurs non fiables. Les applications Rails des versions 7.0 et 7.1 qui sont en fin de vie sont également à risque et doivent être mises à niveau vers une branche supportée.
Comment puis-je me protéger du CVE-2026-66066 ?
Mettez à jour vers Rails 7.2.3.2, 8.0.5.1, 8.1.3.1, ou une version ultérieure ; assurez-vous que libvips est en version 8.13 ou plus récente ; et utilisez ruby-vips 2.2.1 ou version ultérieure, le cas échéant. Faites tourner tous les secrets disponibles pour le processus de l’application et examinez l’activité de téléchargement pour une éventuelle exploitation.