
🫖 PoC de validation RCE CVE-2026-60004 Gitea à cible unique directe
Un outil de validation directe et à cible unique pour la vulnérabilité d'exécution de code à distance via le hook Git
diffpatchde Gitea.
Ce dépôt contient le validateur AfterDark ciblé : un script, une cible, une exécution. Il n'y a pas de sous-commandes de découverte, de reconnaissance, de vérification ou autres.
Ce projet est fourni uniquement pour des tests de sécurité autorisés, une validation défensive, la recherche et l'éducation. Utilisez-le exclusivement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite d'évaluation.
Les auteurs et contributeurs ne sont pas responsables des mauvaises utilisations, des dommages, des interruptions de service, des pertes de données ou des conséquences juridiques. Vous êtes responsable du respect des lois applicables, des contrats, des règles d'engagement et des exigences de divulgation.
Il s'agit d'une preuve de concept RCE active. Elle crée un compte, crée un dépôt privé, écrit un marqueur de contrat et exécute une commande en tant qu'utilisateur du système d'exploitation Gitea. Traitez-la en conséquence. 🛡️
CVE-2026-60004 affecte le flux de travail diffpatch des dépôts de Gitea. Un attaquant disposant d'un accès en écriture au dépôt peut soumettre un contenu de patch contrôlé qui installe et déclenche un hook Git, entraînant l'exécution de commandes en tant que compte de service Gitea.
| Élément | Détail |
|---|---|
| Produit | Gitea |
| Versions affectées | >= 1.17.0, < 1.27.1 |
| Version corrigée | 1.27.1 |
| Impact | Exécution de commandes à distance en tant qu'utilisateur OS Gitea |
| Avis en amont | GHSA-rcr6-4jqh-j84m |
Forgejo et les autres forks nécessitent un examen manuel de l'implémentation et ne sont pas automatiquement considérés comme affectés.
Chaque exécution effectue un flux de travail fixe :
post-index-change conçu via diffpatch.id par défaut.L'outil n'accepte qu'une seule cible. Il n'a pas de mode liste de cibles, de caractères génériques, de scan de masse ou de découverte passive.
PATHLe script n'utilise que la bibliothèque standard de Python. Aucun pip install n'est requis.
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-RCE-PoC.git
cd CVE-2026-60004-Gitea-RCE-PoC
python3 scanner.py --help
python3 scanner.py \
--contract-number ENG-2026-001 \
--username audit-eng-2026-001 \
--password 'use-a-unique-disposable-password' \
https://gitea.example
Des options courtes sont également disponibles :
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
https://gitea.example
🚨 Le mot de passe est fourni en ligne de commande et affiché dans le panneau de résultats final. Utilisez uniquement un identifiant de test jetable unique. Soyez conscient que les arguments de ligne de commande peuvent être conservés dans l'historique du shell ou temporairement visibles par les outils locaux d'inspection des processus.
La commande par défaut est id. Une commande personnalisée étroitement limitée peut être fournie avec --cmd :
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
--cmd 'uname -a' \
https://gitea.example
Les commandes personnalisées n'ont intentionnellement aucun délai d'attente. Le validateur attend que la commande distante se termine, évitez donc les commandes interactives ou de longue durée, sauf si l'engagement l'exige spécifiquement.
Par défaut, chaque exécution écrit sous :
afterdark-results/<contract>/<UTC timestamp>/
Vous pouvez sélectionner une racine différente ou un répertoire d'exécution exact :
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
--results-root ./engagement-evidence \
https://gitea.example
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
--output-dir ./engagement-evidence/run-01 \
https://gitea.example
Chaque exécution crée des fichiers privés 0600 et refuse d'écraser les résultats existants :
confirmation.json — cible, résultat de version, nom de compte, horodatages, commande, code de retour et artefacts capturésconfirmation.command-output.txt — sortie complète de la commande distanteLes preuves peuvent contenir des informations sensibles d'engagement. Ne les committez pas dans Git. Le .gitignore inclus exclut les chemins de résultats par défaut et les noms de fichiers de preuves courants.
Le validateur ne supprime pas automatiquement les artefacts côté serveur. Après l'évaluation, un administrateur autorisé doit :
afterdark-*/tmp/gitea-validation-<contract>/client.txt1.27.1 ou plus récentUn résultat réussi prouve l'exécution de commandes en tant que compte de service Gitea. Il ne prouve pas en soi l'accès root, la persistance, le mouvement latéral ou la compromission complète de l'hôte.
idLes tests exercent l'analyse et la construction du PoC sans effectuer de requêtes réseau :
python3 -m unittest discover -s tests -v
Les améliorations qui rendent le validateur plus sûr, plus fiable ou plus facile à nettoyer sont les bienvenues. Ne soumettez pas de détails réels de cibles, d'identifiants, de preuves privées ou de charges utiles destructrices.
Pour les vulnérabilités de cet outil, suivez SECURITY.md.
Conçu pour une validation de sécurité soigneuse et liée par contrat. 🫖🛡️