Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
forgejo-restore-file-open — Forgejo 16.0.5 - Élevé - À distance - Lecture de fichier - restore-repo suit file:// côté dump vers les pièces jointes | Kitploit
Outils/GitHubGitHub/abraxas/forgejo-restore-file-open
Analyse des VulnérabilitésExploitationExploitation d'Applications WebCollecte d'InformationsTests d'IntrusionLabs et Pratique
GitHubabraxas/forgejo-restore-file-open

forgejo-restore-file-open

Forgejo 16.0.5 - Élevé - À distance - Lecture de fichier - restore-repo suit file:// côté dump vers les pièces jointes

Voir le dépôt
3il y a 3 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - forgejo-restore-file-open

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-restore-file-open

forgejo-restore-file-open

Classe : Lecture de fichier Portée : Locale

Forgejo 16.0.5 (8d24b7d) - Forgejo

forgejo restore-repo d'un dump non fiable réécrit les URLs des assets de release avec un filepath.Join(baseDir, download_url) brut et préfixe file://. uri.Open fait toujours un os.Open sur ce chemin. Un --units vide restaure les releases. Gitea 1.27.0 a ajouté localFileURL et ignoré l'échappement des entrées. Ce helper n'est pas présent ici.

La restauration par l'opérateur d'un dump non fiable copie un fichier hôte que l'uid forgejo peut ouvrir dans une pièce jointe de release.

IDpas encore de CVE
ClasseLecture de fichier
PortéeLocale (opérateur forgejo restore-repo d'un dump non fiable)
CWECWE-22 / CWE-73
CVSSÉlevé : 7.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
ProduitForgejo
Affectéjusqu'à v16.0.5 (8d24b7d) ; restauration par l'opérateur local
Authrestauration par l'opérateur local d'un dump non fiable
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement

Ce qu'un attaquant peut faire

Fournir à l'opérateur un répertoire de dump (ou disposer déjà de INTERNAL_TOKEN et d'un chemin que le serveur peut lire). Les units incluent releases / release_assets.

PrivilègeMéthode / sinkRecon / intégrité / disponibilitéProuvé en lab ou déduit
Lire un fichier hôte que l'uid forgejo peut ouvrir, via .. hors du dumprelease.yml download_url: ../FORGEJO-FILE-WITNESS.txt ; la restauration joint, uri.Open fait un os.Open, les octets sont stockés comme witness.txtRecon (confidentialité du fichier hôte)Prouvé en lab. Le corps de la pièce jointe est FORGEJO-RESTORE-FILE-OPEN-WITNESS. Le leurre dans le dump INSIDE-DUMP-NOT-HOST n'a pas été servi
Même résultat avec un lien symbolique planté dans le dumpLe chemin joint reste sous baseDir ; os.Open suit le lienReconDéduit de uri.Open file -> os.Open. Le lab a utilisé .., pas un lien symbolique
Même sink sur les patches de PRpull_request.yml PatchURL est réécrit de la même manière, puis uri.Open vers repo/pulls/<n>.patchReconDéduit de restore.go GetPullRequests. Le lab n'a restauré que les releases
Les lecteurs du dépôt restauré téléchargent le fichier hôteGET /<owner>/<repo>/releases/download/<tag>/<name>ReconProuvé en lab en tant que labadmin Basic sur le dépôt public restauré
Fichiers hôtes typiques : app.ini, INTERNAL_TOKEN, SECRET_KEY, mot de passe DBl'uid forgejo peut lire l'arborescence de configurationReconDéduit. Le témoin du lab était un fichier planté à côté du dump, pas des secrets réels

Écarté ici : LFI file:// en direct via POST /repos/migrate (DownloadFunc défini ; PatchURL de PR vérifié par préfixe contre la base HTTP du clone). Échappement par jointure à la racine du dump via un DownloadURL absolu (en Go filepath.Join("/dump", "/etc/passwd") reste /dump/etc/passwd). Restauration HTTP non authentifiée (CLI / token interne uniquement). Empaquetage de app.ini par le dump de sauvegarde (secrets par conception, mode d'archive 0600). Pas de LPE OS. Pas de LFI distant.

Comment je l'ai trouvé

J'avais deux idées de restauration. J'ai d'abord testé mentalement la jointure absolue de Gitea. Le filepath.Join de Go ne supprime pas un second argument absolu comme le fait os.path.join de Python. L'entrée qui fonctionne est le .. relatif. Le localFileURL de Gitea n'est pas dans cet arbre.

Fausses pistes déjà consignées : échappement par jointure à la racine du dump via un DownloadURL absolu ; LFI file:// en direct via migrate ; X-Forgejo-Internal-Auth (la restauration est en CLI en tant qu'uid forgejo, pas /api/internal) ; considérer la restauration HTTP comme distante non authentifiée ; un reverse shell. Du théâtre.

Lab

python3 forgejo-restore-file-open-Abraxas-Labs.py

ou :

cd lab
./run.sh

Cible uniquement http://127.0.0.1:19340. Image codeberg.org/forgejo/forgejo:16.0.5. Témoin FORGEJO-RESTORE-FILE-OPEN-WITNESS.

IOC asset name='witness.txt' ...
IOC download status=200 bytes=34 snippet=b'FORGEJO-RESTORE-FILE-OPEN-WITNESS\n'
SUCCESS forgejo-restore-file-open how=live ..-join file:// os.Open FORGEJO-RESTORE-FILE-OPEN-WITNESS

Le correctif

Contenir les chemins joints sous baseDir après EvalSymlinks (Gitea PR 38215 localFileURL). Refuser ... Ne pas suivre les liens symboliques côté dump hors du dump. Supprimer file:// de uri.Open sauf pour un helper enraciné dans le dump.

Références

  • codeberg.org/forgejo/forgejo tag v16.0.5
  • restore.go · uri.go
  • Même classe sur Gitea : gitea-restore-file-open
  • CWE-22 · CWE-73

Licence

GNU Affero GPL v3.0. Voir LICENSE. Lab en loopback uniquement. Aucune garantie.

Télécharger l’outil