Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2018-1000533 | Kitploit
Outils/GitHubGitHub/dddo0/cve-2018-1000533
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'Intrusion
GitHubdddo0/cve-2018-1000533

CVE-2018-1000533

Voir le dépôt
il y a 1 moisPas 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

Vulnérabilité d'exécution de code à distance dans GitList 0.6.0 (CVE-2018-1000533)

GitList est un visualiseur de référentiels Git moderne.

Dans les versions de GitList 0.6.0 et antérieures, une vulnérabilité transmet des entrées insuffisamment validées aux fonctions système, ce qui permet d'exécuter des commandes arbitraires avec les privilèges de l'utilisateur PHP.

Configuration de l'environnement

Exécutez la commande suivante pour démarrer le serveur GitList 0.6.0.

root@kitploit:~
docker compose up -d

Installez les dépendances avant d'exécuter poc.py.

root@kitploit:~
pip install requests

Une fois l'environnement configuré, accédez à http://127.0.0.1:8080 et vérifiez qu'un référentiel de test nommé example existe.

Principe de la vulnérabilité

GitList utilise git grep pour rechercher du code dans les référentiels.

root@kitploit:~
public function searchTree($query, $branch)
{
    if (empty($query)) {
        return null;
    }

    $query = escapeshellarg($query);

    try {
        $results = $this->getClient()->run($this, "grep -i --line-number {$query} $branch");
    } catch (\RuntimeException $e) {
        return false;
    }

Ici, $query désigne le mot-clé de recherche et $branch la branche cible de la recherche.

Si un attaquant transmet --open-files-in-pager=id; comme terme de recherche, la commande id est exécutée sur le système.

Cette vulnérabilité se produit pour deux raisons :

  1. Limites de la fonction escapeshellarg()

En théorie, une fois passée par le code $query = escapeshellarg($query);, l'entrée devient une chaîne entourée de guillemets simples. Cependant, bien que escapeshellarg() empêche l'injection du point de vue du shell, elle ne peut pas empêcher l'analyseur d'options de git lui-même d'interpréter les chaînes commençant par -- comme des options.

  1. Particularité de l'option --open-files-in-pager

Cette option de git grep permet de spécifier un programme de pagination (pager) externe pour afficher les résultats de recherche, et elle a la particularité d'exécuter directement la valeur qui lui est transmise comme commande système.

Conditions de la vulnérabilité

  • La version GitList 0.6.0 doit être en cours d'exécution.
  • L'URL utilisée pour la requête POST ([repo_name]/tree/[keyword]/search) contient deux arguments : [repo_name] et [keyword].
  • [repo_name] doit être un référentiel présent dans GitList, et [keyword] doit être un mot-clé de recherche produisant au moins un résultat de recherche. (Dans cette reproduction, example a été utilisé comme référentiel et a comme mot-clé.)

Procédure de reproduction

Exécutez poc.py avec la commande suivante.

Ce script exécute touch /tmp/success_dddo0, ce qui crée un fichier vide nommé success_dddo0 dans le répertoire /tmp du serveur.

root@kitploit:~
python3 poc.py http://127.0.0.1:8080

Après l'envoi de la requête, vérifiez que success_dddo0 a bien été créé avec la commande suivante.

root@kitploit:~
docker compose exec web ls -l /tmp/success_dddo0

Résultat de l'exécution

Après l'exécution du PoC, on peut constater que la commande système arbitraire (touch /tmp/success_dddo0) a été exécutée avec succès à l'intérieur du serveur, créant ainsi le fichier.

1.png

Arrêt de l'environnement

root@kitploit:~
docker compose down

Mesures correctives

Vous devez mettre à jour GitList vers la dernière version.

Modifications du code :

root@kitploit:~
public function searchTree($query, $branch)
{
    if (empty($query)) {
        return null;
    }
    $query = preg_replace('/(--?[A-Za-z0-9\-]+)/', '', $query);
    $query = escapeshellarg($query);
    try {
        $results = $this->getClient()->run($this, "grep -i --line-number -- {$query} $branch");
    } catch (\RuntimeException $e) {
        return false;
    }

Pour corriger cette vulnérabilité, GitList utilise une expression régulière afin de supprimer les préfixes - illégaux du terme de recherche ($query), et ajoute -- (un indicateur marquant la fin des options) à la commande git grep, forçant ainsi toutes les entrées suivantes à n'être traitées que comme des chaînes ordinaires (termes de recherche) et non comme des options de commande.

Télécharger l’outil