Faille Ruby : Onigmo corrigé après quatre RCE critiques GitLab

Une faille Ruby dans Onigmo est à l'origine de quatre failles critiques GitLab. Trois versions publient le correctif.
Une faille Ruby vient d’être corrigée dans le moteur d’expressions régulières du langage. En effet, les mainteneurs ont publié les versions 4.0.9, 3.4.12 et 3.3.13. Ces mises à jour traitent trois bugs situés dans Onigmo, la bibliothèque de regex intégrée à Ruby. Or ces défauts sont à l’origine de quatre vulnérabilités critiques. Par ailleurs, GitLab a corrigé ces vulnérabilités au cours du dernier mois.
L’affaire montre comment un défaut dans un composant de base peut se répercuter sur une plateforme très utilisée. Elle rappelle également que la sécurité d’une application dépend de ses dépendances les plus discrètes.
Une faille Ruby au cœur du moteur Onigmo
Onigmo est le moteur chargé d’interpréter les expressions régulières en Ruby. En effet, chaque fois qu’un programme utilise un motif de recherche, ce composant le compile puis l’exécute. Cette étape est donc exécutée très souvent. Elle l’est parfois sur des données fournies par un utilisateur.
Trois bugs ont été identifiés dans ce moteur. Ruby a corrigé l’ensemble dans trois branches distinctes. Ainsi, les utilisateurs de la série 4.0, de la série 3.4 et de la série 3.3 disposent chacun d’une version à jour :
- Ruby 4.0.9 pour la branche 4.0 ;
- Ruby 3.4.12 pour la branche 3.4 ;
- Ruby 3.3.13 pour la branche 3.3.
Les informations disponibles ne détaillent pas chacun des trois bugs. En revanche, le mécanisme général est connu. Autrement dit, un motif spécialement construit peut provoquer une corruption de mémoire pendant la compilation de l’expression par Ruby.
Quatre failles critiques côté GitLab
C’est l’équipe de GitLab qui a mis au jour le problème. D’abord, elle a constaté qu’un motif piégé pouvait corrompre la mémoire au moment de la compilation. Par conséquent, un attaquant pouvait potentiellement exécuter du code sur les serveurs de la plateforme.
Ce type de scénario porte un nom : l’exécution de code à distance, ou RCE. Il figure parmi les plus graves en sécurité. En effet, il permet souvent de prendre le contrôle d’une machine sans autorisation préalable.
GitLab a corrigé quatre failles critiques liées à ces bugs en l’espace d’un mois. Ces correctifs ont été publiés de manière échelonnée. Les équipes de GitLab ont donc agi côté application avant que Ruby ne traite la cause à la racine.
Cette séquence est révélatrice. Un éditeur peut atténuer les symptômes dans son produit. Cependant, seule la correction du moteur sous-jacent élimine réellement la source du défaut.
Pourquoi une faille Ruby de ce type est sensible
Les expressions régulières sont partout dans les applications web. Par exemple, on les trouve dans la validation de formulaires, l’analyse de journaux, le routage ou le filtrage de contenus. Par ailleurs, de nombreuses applications acceptent des motifs ou des données qui influencent leur compilation.
Une corruption de mémoire lors de cette étape est particulièrement délicate. En effet, elle se produit avant même l’exécution de la recherche. De plus, elle touche un composant que peu d’équipes auditent directement.
Cette situation concerne aussi bien GitLab que tout projet reposant sur Ruby. Toutefois, l’exposition réelle dépend de la manière dont chaque application construit ou accepte ses motifs. Ainsi, une application qui compile des expressions issues de sources non fiables présente un risque plus élevé.
L’épisode illustre enfin un point important. Les failles critiques d’une grande plateforme ont parfois une origine commune dans une bibliothèque partagée. Corriger le langage ou son moteur profite donc à tout l’écosystème, et pas seulement à un éditeur.
Recommandations pour les administrateurs
Les équipes qui utilisent Ruby doivent agir sans attendre. D’abord, identifiez la version installée sur vos serveurs, vos conteneurs et vos environnements de build. Ensuite, planifiez la montée de version vers la mise à jour correspondant à votre branche.
Voici les priorités à suivre :
- Passer à Ruby 4.0.9, 3.4.12 ou 3.3.13 selon la série utilisée.
- Appliquer les derniers correctifs de sécurité de GitLab si vous hébergez votre propre instance.
- Reconstruire les images de conteneurs qui embarquent une ancienne version de Ruby.
- Examiner les endroits où l’application compile des motifs fournis par des utilisateurs.
Il est également utile de vérifier les journaux de vos instances GitLab. Recherchez toute activité inhabituelle survenue durant le dernier mois. Cette précaution vaut notamment pour les serveurs exposés sur Internet.
Ce qu’il faut retenir
- Ruby corrige trois bugs du moteur Onigmo dans les versions 4.0.9, 3.4.12 et 3.3.13.
- Ces bugs sont à l’origine de quatre failles critiques de GitLab, corrigées durant le dernier mois.
- Un motif spécialement conçu peut corrompre la mémoire pendant la compilation et ouvrir la voie à l’exécution de code.
- Par conséquent, la mise à jour de Ruby reste la seule façon de supprimer la cause profonde du problème.
Source : Ruby Fixes Three Regex Engine Bugs Responsible for Four Critical GitLab RCE Flaws