Présentation de la vulnérabilité

Forgejo, fork open‑source de Gitea écrit en Go, a publié en juin 2024 une note de version indiquant la présence d’une faille d’exécution de code à distance (RCE) affectant toutes les versions antérieures ou égales à 16.0.3. La gravité a été classée « critical », ce qui implique que l’exploitation peut se faire sans authentification et conduire à la prise de contrôle totale du serveur hébergeant le service Git. Aucun CVE n’est encore référencé, mais la description officielle mentionne explicitement la correction dans la version 16.0.4.

Impact technique et vecteurs d’exploitation

Le composant vulnérable réside dans le traitement des requêtes HTTP destinées aux API REST et aux webhooks. Une chaîne d’entrée spécialement conçue peut être injectée dans le moteur de templates Go, déclenchant l’exécution de commandes système via la fonction exec.Command. Cette chaîne passe les contrôles d’authentification habituels, ce qui rend l’attaque possible depuis n’importe quel client externe. En pratique, un attaquant peut télécharger ou modifier des dépôts, injecter du code malveillant dans les hooks, puis obtenir un accès shell sur le serveur. La portée de la compromission dépend du niveau de privilèges du processus Forgejo, souvent exécuté en tant que forgejo avec accès en écriture aux répertoires de dépôts et aux bases de données SQLite ou PostgreSQL.

Correction dans Forgejo 16.0.4 et bonnes pratiques de mitigation

La mise à jour 16.0.4 introduit un filtrage strict des paramètres de template et désactive l’évaluation dynamique des expressions non‑sanitisées. Le code modifié remplace l’appel direct à exec.Command par une fonction wrapper qui valide le contexte d’exécution et refuse les caractères de contrôle. Le correctif a été back‑ported aux branches de maintenance 15.x et 14.x, mais la documentation officielle recommande de migrer vers 16.0.4 ou ultérieure. En attendant le déploiement, les administrateurs peuvent réduire le risque en limitant l’accès réseau aux endpoints /api/v1 et /hooks via un pare‑feu, en désactivant les webhooks non essentiels, et en exécutant le service sous un compte à privilèges réduits, séparé du système de fichiers des dépôts.

Conséquences pour les environnements de production

Dans un contexte d’intégration continue, la faille RCE peut être exploitée pour injecter des charges utiles dans les pipelines CI/CD, compromettant ainsi l’ensemble de la chaîne d’approvisionnement logicielle. Les logs d’accès HTTP montrent typiquement des requêtes POST contenant des payloads encodés en base64, ce qui indique une tentative d’obfuscation. Les équipes de sécurité doivent scruter les journaux pour détecter ces motifs et, si nécessaire, révoquer les tokens d’API exposés. La mise à jour immédiate vers 16.0.4 élimine le vecteur d’injection, mais ne restaure pas les éventuels accès déjà obtenus ; une réinitialisation des clés SSH et des mots de passe d’administration reste indispensable.