Faille Gitea Docker : CVE-2026-20896 permet d'usurper un utilisateur via un en-tête HTTP
CVE-2026-20896 affecte les images Docker officielles de Gitea jusqu'en 1.26.2. Avec l'authentification reverse proxy activée, un attaquant peut se faire passer pour un utilisateur, y compris administrateur.
Dans le cadre de notre veille sécurité, nous signalons une vulnérabilité critique dans les images Docker officielles de Gitea, la forge Git open source auto-hébergée.
CVE-2026-20896 permet à un attaquant de se faire passer pour n’importe quel utilisateur — potentiellement un administrateur — en envoyant un en-tête HTTP forgé. La vulnérabilité est notée 9,8/10 (CVSS) et fait l’objet de signaux d’exploitation active.
Le sujet ne concerne pas toutes les installations Gitea. Il vise les images Docker jusqu’à 1.26.2 lorsque l’authentification via reverse proxy est activée et que le port HTTP du conteneur reste directement joignable. C’est précisément le type de détail de déploiement qui transforme une mise à jour en incident potentiel.
CVE-2026-20896 : le défaut de confiance dans l’image Docker Gitea
Gitea peut déléguer l’authentification à un reverse proxy ou à une brique SSO. Dans ce modèle, le proxy authentifie l’utilisateur puis transmet son identité à Gitea, notamment via l’en-tête X-WEBAUTH-USER.
Ce mécanisme n’est sûr que si Gitea accepte cet en-tête uniquement lorsqu’il provient du reverse proxy attendu.
Or, les images Docker officielles vulnérables embarquaient dans leur modèle de configuration :
REVERSE_PROXY_TRUSTED_PROXIES = *
Le caractère * revient à faire confiance à toute adresse IP. Si ENABLE_REVERSE_PROXY_AUTHENTICATION est activé et qu’un attaquant peut atteindre directement le port HTTP de Gitea, il peut fournir un X-WEBAUTH-USER correspondant à un nom de compte connu ou devinable.
Il n’a alors besoin ni du mot de passe, ni d’un jeton, ni d’une session existante.
Pourquoi cette faille Gitea est critique
Une forge Git ne contient pas seulement du code source. Elle concentre souvent des éléments très sensibles :
- dépôts privés et historique de développement ;
- clés de déploiement et clés SSH ;
- jetons d’accès personnels et jetons d’automatisation ;
- variables et secrets CI/CD ;
- webhooks, intégrations et registres de conteneurs ;
- comptes administrateurs capables de modifier les droits et la configuration.
L’impact dépend des permissions du compte usurpé. Un compte administrateur peut ouvrir l’accès à l’ensemble de l’instance ; un compte développeur peut déjà suffire à lire du code privé, récupérer des secrets exposés par erreur ou modifier une chaîne de livraison.
Cette vulnérabilité rappelle une règle importante en infrastructure : un reverse proxy ne protège pas une application si celle-ci reste accessible en contournant le proxy.
Les installations réellement concernées par CVE-2026-20896
Les conditions d’exposition documentées sont les suivantes :
| Condition | Pourquoi elle compte |
|---|---|
| Image Docker Gitea en version 1.26.2 ou antérieure | Le modèle app.ini vulnérable est fourni par ces images. |
| Authentification reverse proxy activée | C’est ce qui rend l’en-tête d’identité utilisable par Gitea. |
REVERSE_PROXY_TRUSTED_PROXIES = * | Toute source est alors considérée comme un proxy de confiance. |
| Port HTTP Gitea joignable sans passer par le proxy | L’attaquant peut injecter directement l’en-tête d’identité. |
Les installations binaires et les déploiements compilés qui utilisent le modèle app.example.ini documenté ne sont pas touchés par ce défaut Docker. Cela ne dispense pas de vérifier la configuration effective : une configuration personnalisée trop permissive produirait le même risque.
Vérifier rapidement son déploiement Gitea Docker
Commencez par identifier l’image et le service réellement utilisés. Dans un projet Docker Compose, adaptez gitea au nom de votre service :
docker compose ps
docker compose exec gitea gitea --version
docker compose config | grep -A 12 -B 2 'image:.*gitea'
Contrôlez ensuite la configuration effective. L’emplacement peut varier selon l’image et le volume de données ; sur l’image officielle, il se trouve généralement sous /data/gitea/conf/app.ini :
docker compose exec gitea sh -lc "grep -nE '^(ENABLE_REVERSE_PROXY_AUTHENTICATION|REVERSE_PROXY_TRUSTED_PROXIES)[[:space:]]*=' /data/gitea/conf/app.ini"
Deux vérifications sont indispensables :
ENABLE_REVERSE_PROXY_AUTHENTICATIONest-il activé ?- La liste
REVERSE_PROXY_TRUSTED_PROXIEScontient-elle*, ou une plage bien plus large que les adresses réelles de vos proxies ?
Enfin, regardez votre compose.yml, vos règles pare-feu et votre reverse proxy. Une publication telle que 0.0.0.0:3000:3000 ou 3000:3000 peut rendre le port directement accessible selon l’hôte et son filtrage réseau. Le bon chemin d’accès doit être : Internet → reverse proxy → réseau applicatif interne → Gitea.
Remédiation : mettre à jour et fermer le chemin direct
Le correctif durable consiste à mettre à jour vers la dernière version stable de Gitea. Pour la branche 1.26, Gitea recommande de passer directement à 1.26.4, qui inclut le correctif de CVE-2026-20896 et un correctif supplémentaire apporté après 1.26.3.
Dans votre fichier Compose, utilisez un tag explicite et corrigé, puis recréez le service après avoir sauvegardé les données et testé la procédure sur un environnement de préproduction si votre forge est critique :
services:
gitea:
image: gitea/gitea:1.26.4
docker compose pull gitea
docker compose up -d gitea
docker compose exec gitea gitea --version
Ne vous arrêtez pas à la mise à jour. Si l’authentification reverse proxy est nécessaire, définissez explicitement les seules adresses ou sous-réseaux de vos proxies de confiance dans app.ini. L’adresse à autoriser est celle vue par Gitea, souvent l’adresse du conteneur proxy sur le réseau Docker, et non son adresse publique.
[security]
REVERSE_PROXY_TRUSTED_PROXIES = 172.20.0.10/32
Cette adresse est un exemple : elle doit être remplacée par celle de votre proxy. Évitez le joker * et les plages larges par facilité. Après une modification de app.ini, redémarrez Gitea puis testez le parcours d’authentification normal et le refus des accès directs.
En parallèle, supprimez l’exposition directe du port Gitea lorsqu’elle n’est pas nécessaire. Un proxy déployé sur le même réseau Docker peut joindre le service par son nom sans publication de 3000. Si le proxy tourne sur l’hôte, une écoute liée à 127.0.0.1 est généralement préférable à une écoute sur toutes les interfaces, sous réserve de votre architecture.
Si la mise à jour doit attendre
La mise à jour reste prioritaire, d’autant plus que l’exploitation est signalée. Si une contrainte métier impose un délai, les mesures suivantes réduisent l’exposition sans remplacer le patch :
- remplacez immédiatement
REVERSE_PROXY_TRUSTED_PROXIES = *par les IP ou CIDR exacts des proxies de confiance ; - bloquez tout accès direct au port HTTP du conteneur depuis Internet et les réseaux non nécessaires ;
- limitez temporairement l’accès à l’interface via VPN, filtrage IP ou réseau d’administration ;
- vérifiez que les en-têtes d’identité sont retirés par le proxy sur les requêtes entrantes, puis posés seulement après authentification ;
- documentez la dérogation et planifiez le passage vers une image corrigée.
Une configuration de confiance explicite est une mesure de confinement. Elle ne doit pas devenir le prétexte pour rester sur une image vulnérable.
Rechercher une compromission avant de refermer le sujet
Comme l’usurpation peut viser un administrateur, il faut traiter toute exposition plausible comme une investigation, pas comme une simple opération de patch.
Contrôlez notamment :
- les journaux du reverse proxy et de Gitea pour des requêtes directes ou des en-têtes
X-WEBAUTH-USERinattendus ; - les connexions, créations de comptes, élévations de privilèges et modifications de clés SSH ;
- les nouveaux jetons d’accès, applications OAuth, webhooks et clés de déploiement ;
- les accès inhabituels aux dépôts privés et aux registres ;
- les exécutions CI/CD ou changements de configuration non expliqués.
Si vous identifiez une exposition directe ou un accès suspect, conservez les journaux avant rotation, désactivez les sessions et jetons douteux, révoquez les clés concernées et faites tourner les secrets susceptibles d’avoir été lus : tokens, clés de déploiement, credentials CI/CD, mots de passe applicatifs et clés cloud.
Ce que nous retenons pour les infrastructures auto-hébergées
Cette faille ne vient pas d’un manque de sophistication chez l’attaquant. Elle exploite une confiance implicite dans une valeur par défaut d’image Docker.
Sur une application sensible, la configuration livrée par une image doit être considérée comme du code de production : versionnée, relue, contrôlée après déploiement et surveillée. Les principes restent simples : pas de port applicatif exposé sans nécessité, séparation claire entre proxy et application, listes de confiance minimales et mises à jour suivies.
Chez Forget About IT, ce travail fait partie de l’exploitation : qualification de l’exposition, correctif, durcissement, contrôle des journaux et traçabilité. L’objectif n’est pas seulement d’appliquer un patch, mais de vérifier que l’architecture ne laisse pas le même chemin ouvert demain.
Sources
- NVD - CVE-2026-20896
- CVE - CVE-2026-20896
- Gitea GitHub Security Advisory - GHSA-f75j-4cw6-rmx4
- Gitea - Release 1.26.3 and 1.26.4
- Security Affairs - Critical Gitea Docker bug under active exploitation
- Cyber Security Agency of Singapore - Critical Vulnerability in Gitea Docker
FAQ : faille Gitea Docker CVE-2026-20896
Quelles versions de Gitea sont touchées par CVE-2026-20896 ?
Les images Docker officielles de Gitea jusqu’en version 1.26.2 sont concernées. Les distributions binaires et les déploiements construits depuis les sources ne sont pas affectés par ce défaut de modèle Docker.
La faille Gitea Docker est-elle exploitable sur toutes les instances ?
Non. Le scénario documenté exige que l’authentification par reverse proxy soit activée et qu’un attaquant puisse atteindre directement le port HTTP de Gitea sans passer par le proxy de confiance. Ces conditions doivent toutefois être vérifiées immédiatement.
Quelle est la correction recommandée pour CVE-2026-20896 ?
Mettre à jour l’image Gitea vers la dernière version stable disponible, au minimum 1.26.4 pour la branche 1.26, puis contrôler que REVERSE_PROXY_TRUSTED_PROXIES ne contient pas le joker *.
Faut-il changer les secrets après avoir corrigé Gitea ?
Si l’instance a pu être exposée, il faut investiguer avant de conclure : journaux, comptes administrateurs, clés SSH, jetons API, applications OAuth, dépôts privés et secrets de CI/CD. La rotation des secrets sensibles est à prévoir en cas de doute sérieux.
Articles recommandés
Sécurité
GhostLock (CVE-2026-43499): faille Linux locale root et container escape à patcher
GhostLock, suivie sous CVE-2026-43499, est une faille locale du noyau Linux dans rtmutex/futex PI. Elle peut mener à une élévation de privilèges root et à une évasion de conteneur sur noyau vulnérable.
Sécurité
Januscape (CVE-2026-53359): faille KVM/x86 guest-to-host à corriger sur les hôtes de virtualisation
Januscape est une faille KVM/x86 dans le noyau Linux: un invité avec virtualisation imbriquée peut provoquer un crash hôte, avec un risque d'évasion guest-to-host sur certains environnements.
Sécurité
Archivage des données en entreprise: obligations légales, sauvegardes et copies immuables
Conserver ses données 5, 6 ou 10 ans ne suffit pas: encore faut-il pouvoir les restaurer, les vérifier et les protéger contre la suppression, le piratage ou la dépendance à un Drive.