Alpine Linux reconstruit GitLab après une tentative d'exploitation critique de la regex Ruby
Alpine Linux a reconstruit son serveur GitLab et réinitialisé tous les mots de passe après qu'un attaquant a ciblé une faille CVSS 10.0 dans le moteur regex de Ruby, qui persistait malgré une mise à jour de GitLab.
Traduit automatiquement depuis l'original anglais.
Alpine Linux a annoncé le 28 octobre avoir entièrement reconstruit son serveur GitLab et réinitialisé tous les mots de passe utilisateurs suite à une attaque ciblée exploitant une vulnérabilité critique. Cet incident met en lumière un risque majeur dans les procédures de correctifs pour les instances auto-hébergées, où l'environnement d'exécution Ruby sous-jacent reste vulnérable même après la mise à jour de l'application GitLab elle-même.
Ce qui s'est passé
Un attaquant a tenté d'exploiter la CVE-2026-97229, une faille avec un score CVSS parfait de 10.0, sur l'instance GitLab d'Alpine hébergeant le dépôt aports. La vulnérabilité permet l'exécution de code à distance via des expressions régulières élaborées dans les configurations CI. Bien qu'Alpine n'ait trouvé aucune preuve définitive que l'attaquant ait réussi à exécuter du code, ils ne pouvaient pas l'exclure en raison de logs manquants et de la nature de l'exploitation. Par conséquent, ils ont considéré le serveur comme compromis, l'ont arrêté le 27 octobre et ont terminé une reconstruction complète le 28 octobre.
L'attaque a commencé le 20 octobre, soit une semaine seulement après la publication d'un correctif par GitLab. Un compte nouvellement enregistré a sondé le serveur, envoyant des configurations CI malveillantes qui ont fait planter les processus workers huit fois. Le 21 octobre, l'attaquant a provoqué des erreurs 502 et des échecs de jobs CI. Alpine a bloqué le compte le 23 octobre, mais l'attaquant est revenu les 25 et 26 octobre. Crucialement, Alpine a découvert le 26 octobre que leur mise à niveau vers GitLab 19.3.6 effectuée le 22 octobre n'avait en réalité pas corrigé la vulnérabilité, car leur installation utilisait un Ruby système standard plutôt que la version patchée incluse dans les packages officiels de GitLab.
Comment cela fonctionne
La cause profonde réside dans Onigmo, le moteur d'expressions régulières intégré à Ruby. La CVE-2026-97229 est un bug dans ce moteur qui peut être déclenché par des motifs regex spécifiques fournis par un attaquant dans un fichier de configuration CI. Lorsque GitLab traite ces configurations, il compile le regex en utilisant Ruby. Si la version de Ruby est vulnérable, cette étape de compilation peut mener à l'exécution de code à distance.
GitLab a traité ce problème dans sa release du 12 octobre en appliquant un correctif à l'interpréteur Ruby inclus dans ses packages Linux officiels et ses images conteneur. Cependant, de nombreux administrateurs, y compris l'équipe d'Alpine, exécutent GitLab sur leur propre Ruby installé au niveau système ou sur des images conteneurs personnalisées. Dans ces configurations, la mise à jour du code applicatif GitLab ne met pas à jour l'interpréteur Ruby sous-jacent. Puisque le correctif se trouve dans le langage Ruby lui-même, les serveurs exécutant des versions non patchées de Ruby restent exposés, quelle que soit la version de GitLab installée. L'image d'Alpine utilisait un Ruby standard, donc leur mise à niveau de GitLab a laissé le moteur vulnérable intact jusqu'à ce qu'ils mettent explicitement à jour Ruby vers la version 3.3.13, 3.4.12 ou ultérieure.
Détails clés
- Vulnérabilité : CVE-2026-97229 (CVSS 10.0) dans le moteur regex Onigmo de Ruby.
- Vecteur d'attaque : Expressions régulières élaborées dans les fichiers
.gitlab-ci.ymlsoumis via la configuration CI. - Faille de correctif : Mettre à jour GitLab seul est insuffisant pour les installations compilées localement ou les images personnalisées ; Ruby lui-même doit être mis à jour vers 3.3.13, 3.4.12, 4.0.9 ou ultérieur.
- Chronologie de l'incident : Les sondes d'attaque ont commencé le 20 octobre ; le serveur a été fermé le 27 octobre ; la reconstruction a été terminée le 28 octobre.
- Risque de données : L'exposition potentielle inclut les emails utilisateurs, les hashs de mots de passe, les secrets 2FA, les variables CI/CD et les dépôts privés si l'exécution de code a eu lieu.
- Vérification : Alpine a vérifié l'intégrité des paquets du 20 au 24 octobre par rapport aux registres externes, confirmant qu'il n'y avait pas eu de compromission de la chaîne d'approvisionnement dans les paquets construits.
Pourquoi c'est important
Cet incident sert de rappel sévère pour les équipes d'ingénierie gérant des infrastructures auto-hébergées. Il expose un angle mort courant dans la gestion des dépendances : supposer que la mise à jour d'une application sécurise automatiquement son environnement d'exécution. Pour les développeurs créant des produits avec IA ou des pipelines CI/CD complexes, comprendre la distinction entre les correctifs au niveau applicatif et ceux au niveau runtime est crucial. Ne pas mettre à jour l'interpréteur du langage sous-jacent peut laisser un système grand ouvert aux exploits critiques, même lorsque l'éditeur de l'application affirme que le problème est résolu.
De plus, l'ambiguïté du résultat souligne la difficulté de l'analyse forensique dans les environnements cloud-native. Parce qu'une exploitation réussie de cette nature pourrait ne pas laisser de traces traditionnelles comme des plantages ou des entrées de log, les organisations doivent adopter une approche zero-trust pour la réponse aux incidents. La décision d'Alpine de tout reconstruire depuis zéro plutôt que de tenter un nettoyage illustre le coût opérationnel élevé de telles vulnérabilités. Pour les fondateurs techniques et les responsables IT, cela renforce la nécessité d'une journalisation robuste, de pratiques d'infrastructure immuable et d'une vérification rigoureuse de tous les composants de la chaîne d'approvisionnement logicielle.
Ce que vous pouvez faire
- Vérifiez votre version de Ruby : Si vous exécutez GitLab compilé localement ou des conteneurs personnalisés, assurez-vous que Ruby est mis à jour vers 3.3.13, 3.4.12, 4.0.9 ou ultérieur immédiatement.
- Vérifiez les mises à jour de GitLab : Confirmez que votre méthode d'installation de GitLab inclut le Ruby patché. Sinon, mettez à jour manuellement le Ruby système.
- Faites tourner les secrets : Si vous suspectez une exposition, faites tourner toutes les variables CI/CD, les tokens runner, les tokens d'accès personnels et les identifiants webhook.
- Restreignez l'accès : Limitez l'accès anonyme aux projets publics et empêchez les utilisateurs non fiables de créer ou d'écrire dans des dépôts publics.
- Surveillez les indicateurs : Utilisez les règles de détection Sigma publiées par GitLab pour rechercher des motifs regex hostiles, des chemins de fichiers anormalement longs contenant des caractères non ASCII, et des rapports de plantage Ruby.
- Tirez les images mises à jour : Si vous utilisez l'image GitLab d'Alpine, tirez à nouveau
alpinelinux/gitlab:19.3.6, en vous assurant qu'elle a été publiée après le 27 octobre pour inclure le Ruby corrigé.



