La vulnérabilité est une injection d'argument classique (CWE-88). Elle réside dans la manière dont Gogs gère les demandes de fusion (pull requests) lorsque le style de fusion du dépôt est réglé sur « Rebase before merging » (« Rebaser avant de fusionner »). Lorsqu'un utilisateur crée une demande de fusion, le nom de sa branche source est passé directement à une commande git rebase exécutée sur le serveur. De façon critique, l'application omet d'utiliser le délimiteur --, une pratique standard dans les outils en ligne de commande qui signale la fin des options.
Cette omission signifie que si un attaquant nomme sa branche de manière malveillante, par exemple --exec='commande_malveillante', le système n'interprète pas ce nom comme une simple étiquette mais comme une option de commande pour git rebase. L'option --exec est prévue pour exécuter une commande shell après chaque commit rejoué. Le résultat est une exécution de commande arbitraire sur le système d'exploitation sous-jacent, avec les privilèges du processus serveur Gogs.
L'attaque en bref :
--exec, suivie de la commande shell de son choix. Jonah Burgess, le chercheur en sécurité de Rapid7 Labs qui a découvert la faille, a expliqué le mécanisme de manière directe : « Cette vulnérabilité permet à n'importe quel utilisateur authentifié d'obtenir une exécution de code à distance (RCE) sur le serveur en créant une demande de fusion avec un nom de branche malveillant qui injecte l'option --exec dans git rebase. »
Pour ceux qui suivent le projet Gogs, cette faille critique zero-day non corrigée n'est pas une surprise. C'est le dernier exemple, et le plus sévère, d'un schéma qui dure depuis des années, où les signalements de sécurité restent sans réponse de la part du mainteneur principal, et de facto unique, du projet.
La chronique de cette négligence est bien documentée par plusieurs équipes de recherche indépendantes :
Cet historique a transformé la dernière divulgation de Rapid7 en quelque chose de plus qu'un simple avis de sécurité. Comme l'a résumé un média spécialisé, la situation est « un rappel des limites des projets open source » lorsqu'ils dépendent d'un unique mainteneur qui ne répond pas . Sans gouvernance multi-parties prenantes, un outil d'infrastructure critique largement utilisé peut devenir un risque permanent.
Puisqu'aucun correctif logiciel n'est disponible, les administrateurs doivent s'appuyer sur des changements de configuration et des contrôles au niveau du réseau pour neutraliser le vecteur d'attaque. Les étapes suivantes bloquent la menace immédiate et réduisent la surface d'exposition.
1. Désactiver immédiatement l'option "Rebase before merging"
C'est la mesure d'atténuation la plus efficace. Toute la chaîne d'attaque dépend de ce style de fusion spécifique. Passer les paramètres du dépôt ou de l'instance à « Merge commit » ou « Squash » élimine entièrement le chemin de code vulnérable .
2. Restreindre l'accès réseau
L'attaque nécessite un accès HTTP authentifié pour créer une demande de fusion. Si votre serveur Gogs n'a pas besoin d'être public, placez-le derrière un VPN ou un pare-feu qui n'autorise que les utilisateurs internes de confiance. Cela le retire des radars des scanners internet de masse et des attaquants opportunistes.
3. Renforcer l'enregistrement des utilisateurs et leurs permissions
Étant donné que n'importe quel utilisateur authentifié peut exploiter cette faille, minimiser le nombre de comptes sur le serveur est une défense clé. Désactivez l'auto-enregistrement et approuvez manuellement les nouveaux utilisateurs. Auditez immédiatement votre liste d'utilisateurs et désactivez tout compte inactif ou inconnu .
4. Surveiller les demandes de fusion pour détecter les anomalies
Mettez en place une surveillance rigoureuse des noms de branches des demandes de fusion contenant des caractères suspects, y compris les doubles tirets (--), les points-virgules, les guillemets obliques (backticks) ou des tokens de commande shell clairs comme exec, curl ou wget. Un nom de branche inhabituel est un indicateur fort d'une tentative d'exploitation active .
5. Planifier votre sortie à long terme de Gogs
Au vu du schéma documenté de vulnérabilités critiques non corrigées, continuer à utiliser Gogs est un risque stratégique. L'alternative la plus viable est Gitea, un fork communautaire de Gogs qui possède une équipe de développement solide et multi-mainteneurs ainsi qu'un processus de sécurité réactif. Plusieurs autres plateformes de services Git majeures existent, mais pour les équipes ayant choisi Gogs spécifiquement pour sa nature légère et auto-hébergée, Gitea est un remplacement quasi transparent qui élimine le goulot d'étranglement du mainteneur unique .
6. Se préparer à un correctif (s'il arrive un jour)
Restez abonné à la page de sécurité de Gogs et aux sorties GitHub. Si un correctif est finalement publié, mettez à jour immédiatement. Cependant, construisez votre posture de sécurité en partant du principe que ce schéma va se répéter, et qu'une future vulnérabilité critique restera à nouveau sans correctif pendant des mois.
La vulnérabilité est une injection d'argument classique (CWE-88). Elle réside dans la manière dont Gogs gère les demandes de fusion (pull requests) lorsque le style de fusion du dépôt est réglé sur « Rebase before merging » (« Rebaser avant de fusionner »). Lorsqu'un utilisateur crée une demande de fusion, le nom de sa branche source est passé directement à une commande git rebase exécutée sur le serveur. De façon critique, l'application omet d'utiliser le délimiteur --, une pratique standard dans les outils en ligne de commande qui signale la fin des options.
Cette omission signifie que si un attaquant nomme sa branche de manière malveillante, par exemple --exec='commande_malveillante', le système n'interprète pas ce nom comme une simple étiquette mais comme une option de commande pour git rebase. L'option --exec est prévue pour exécuter une commande shell après chaque commit rejoué. Le résultat est une exécution de commande arbitraire sur le système d'exploitation sous-jacent, avec les privilèges du processus serveur Gogs.
L'attaque en bref :
--exec, suivie de la commande shell de son choix. Jonah Burgess, le chercheur en sécurité de Rapid7 Labs qui a découvert la faille, a expliqué le mécanisme de manière directe : « Cette vulnérabilité permet à n'importe quel utilisateur authentifié d'obtenir une exécution de code à distance (RCE) sur le serveur en créant une demande de fusion avec un nom de branche malveillant qui injecte l'option --exec dans git rebase. »
Pour ceux qui suivent le projet Gogs, cette faille critique zero-day non corrigée n'est pas une surprise. C'est le dernier exemple, et le plus sévère, d'un schéma qui dure depuis des années, où les signalements de sécurité restent sans réponse de la part du mainteneur principal, et de facto unique, du projet.
La chronique de cette négligence est bien documentée par plusieurs équipes de recherche indépendantes :
Cet historique a transformé la dernière divulgation de Rapid7 en quelque chose de plus qu'un simple avis de sécurité. Comme l'a résumé un média spécialisé, la situation est « un rappel des limites des projets open source » lorsqu'ils dépendent d'un unique mainteneur qui ne répond pas . Sans gouvernance multi-parties prenantes, un outil d'infrastructure critique largement utilisé peut devenir un risque permanent.
Puisqu'aucun correctif logiciel n'est disponible, les administrateurs doivent s'appuyer sur des changements de configuration et des contrôles au niveau du réseau pour neutraliser le vecteur d'attaque. Les étapes suivantes bloquent la menace immédiate et réduisent la surface d'exposition.
1. Désactiver immédiatement l'option "Rebase before merging"
C'est la mesure d'atténuation la plus efficace. Toute la chaîne d'attaque dépend de ce style de fusion spécifique. Passer les paramètres du dépôt ou de l'instance à « Merge commit » ou « Squash » élimine entièrement le chemin de code vulnérable .
2. Restreindre l'accès réseau
L'attaque nécessite un accès HTTP authentifié pour créer une demande de fusion. Si votre serveur Gogs n'a pas besoin d'être public, placez-le derrière un VPN ou un pare-feu qui n'autorise que les utilisateurs internes de confiance. Cela le retire des radars des scanners internet de masse et des attaquants opportunistes.
3. Renforcer l'enregistrement des utilisateurs et leurs permissions
Étant donné que n'importe quel utilisateur authentifié peut exploiter cette faille, minimiser le nombre de comptes sur le serveur est une défense clé. Désactivez l'auto-enregistrement et approuvez manuellement les nouveaux utilisateurs. Auditez immédiatement votre liste d'utilisateurs et désactivez tout compte inactif ou inconnu .
4. Surveiller les demandes de fusion pour détecter les anomalies
Mettez en place une surveillance rigoureuse des noms de branches des demandes de fusion contenant des caractères suspects, y compris les doubles tirets (--), les points-virgules, les guillemets obliques (backticks) ou des tokens de commande shell clairs comme exec, curl ou wget. Un nom de branche inhabituel est un indicateur fort d'une tentative d'exploitation active .
5. Planifier votre sortie à long terme de Gogs
Au vu du schéma documenté de vulnérabilités critiques non corrigées, continuer à utiliser Gogs est un risque stratégique. L'alternative la plus viable est Gitea, un fork communautaire de Gogs qui possède une équipe de développement solide et multi-mainteneurs ainsi qu'un processus de sécurité réactif. Plusieurs autres plateformes de services Git majeures existent, mais pour les équipes ayant choisi Gogs spécifiquement pour sa nature légère et auto-hébergée, Gitea est un remplacement quasi transparent qui élimine le goulot d'étranglement du mainteneur unique .
6. Se préparer à un correctif (s'il arrive un jour)
Restez abonné à la page de sécurité de Gogs et aux sorties GitHub. Si un correctif est finalement publié, mettez à jour immédiatement. Cependant, construisez votre posture de sécurité en partant du principe que ce schéma va se répéter, et qu'une future vulnérabilité critique restera à nouveau sans correctif pendant des mois.