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-73847-emlog-PoC — PoC pour CVE-2026-73847 - emlog AI Assistant : CSRF → exécution SQL → prise de contrôle de l'administrateur (CVSS 6.8) | Kitploit
Outils/GitHubGitHub/squeeze440/cve-2026-73847-emlog-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'Intrusion
GitHubsqueeze440/cve-2026-73847-emlog-poc

CVE-2026-73847-emlog-PoC

PoC pour CVE-2026-73847 - emlog AI Assistant : CSRF → exécution SQL → prise de contrôle de l'administrateur (CVSS 6.8)

Voir le dépôt

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
il y a 4 joursPas encore vérifié

CVE-2026-73847 — Assistant IA d'emlog CSRF → Exécution SQL → Prise de contrôle admin

PoC pour l'absence de protection CSRF sur le point de terminaison execute_tool de l'Assistant IA d'emlog pro, qui permet à un attaquant d'utiliser la session authentifiée d'un administrateur pour exécuter du SQL arbitraire contre la base de données du site — y compris une prise de contrôle complète du compte administrateur.

CVECVE-2026-73847
CNAGitHub
AvisGHSA-v6wr-4x55-7qp5
CVSS 3.16.8 Moyen — AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N
CWECWE-352 (CSRF), CWE-1275 (SameSite incorrect), CWE-798 (Chaîne de confirmation d'écriture codée en dur)
Versions affectéesemlog pro jusqu'à 2.6.23
CréditDostxodjayev Abdullox (@squeeze440) — correction en attente dans l'enregistrement CVE, voir ci-dessous

Cause racine

Le panneau d'administration d'emlog pro inclut un assistant IA capable d'exécuter du SQL au nom de l'administrateur via POST /admin/ai.php?action=execute_tool. Plusieurs problèmes s'accumulent sur ce point de terminaison :

  1. Aucun jeton CSRF. Tous les autres fichiers d'action destructrice dans admin/ appellent LoginAuth::checkToken() en premier (ex. admin/media.php:140). admin/ai.php ne le fait jamais.
  2. L'authentification repose uniquement sur le cookie de session (admin/ai.php:152, User::isAdmin()) — aucun contrôle Origin/Referer.
  3. La vérification de confirmation d'écriture est une chaîne publique codée en dur. include/service/ai.php:594 : if (trim($confirm_code) !== 'confirm'). Toute requête falsifiée envoie simplement confirm_code=confirm.
  4. Le SQL en lecture seule ne nécessite aucune confirmation (include/service/ai.php:578,589) — une simple requête authentifiée peut SELECT n'importe quelle table.
  5. Seule la table est protégée en écriture () — et toutes les autres tables sont entièrement accessibles en écriture.

Enchaînés, ces problèmes permettent à une seule requête falsifiée envoyée depuis le navigateur d'un administrateur de lire toutes les tables (y compris les hashs de mots de passe) et d'écrire dans toutes les tables sauf blog, y compris un écrasement direct de user.password.

PoC

Partie 1 — chaîne d'impact brute (poc_raw_impact.sh)

Isole la primitive de contournement SQL/auth de la question de la livraison CSRF. À exécuter contre une instance locale que vous contrôlez :

root@kitploit:~
./poc_raw_impact.sh http://TARGET admin '<adminpass>'

Ceci se connecte en tant qu'admin, extrait les hashs de mots de passe via le contournement par alias de colonne, écrase directement le mot de passe admin via la table user, puis se reconnecte avec le mot de passe choisi par l'attaquant à partir d'un nouveau cookie jar — prouvant une prise de contrôle totale du compte dès qu'une requête authentifiée atteint le point de terminaison.

L'attaquant se connecte en tant qu'admin avec le mot de passe écrasé par SQL, arrivant sur le tableau de bord authentifié dans une session fraîche et isolée

Partie 2 — livraison CSRF inter-sites réelle (poc_csrf.html)

Règle la question SameSite avec un vrai navigateur plutôt que de la supposer. Servez poc_csrf.html depuis une origine distincte de la cible (une IP différente suffit — Chrome considère des IP littérales distinctes comme des sites séparés) et faites en sorte qu'un admin connecté l'ouvre dans les deux minutes environ après la connexion :

root@kitploit:~
python3 -m http.server 8888
# then point poc_csrf.html's form action at your target and get it opened

Le formulaire s'envoie automatiquement au chargement, en envoyant en POST un appel falsifié query_database avec confirm_code=confirm en inter-sites.

Page de connexion administrateur d'emlog Tableau de bord administrateur authentifié après connexion Source de la page de l'attaquant, servie depuis une origine séparée Le POST inter-sites arrive sur la réponse brute de succès JSON Ligne marqueur CSRF injectée visible dans le panneau Liens de l'admin victime

Vérifié en conditions réelles : le POST inter-sites falsifié transportait le vrai cookie d'authentification de l'admin (sec-fetch-site: cross-site, cookie attaché), a renvoyé 200 {"code":0,"msg":"ok",...}, et la ligne injectée a été confirmée présente via une lecture authentifiée de suivi. La répétition de la requête identique ~48 minutes plus tard avec le même cookie jar désormais vieilli a échoué — aucun cookie n'a été attaché et le serveur a renvoyé une redirection non authentifiée, confirmant que la fenêtre d'environ deux minutes Lax+POST est la vraie contrainte (reflétée dans AC:H).

Impact

  • Lecture complète de la base de données : chaque table/colonne, y compris les hashs de mots de passe et tous les secrets dans emlog_options (identifiants SMTP, clés API, etc.).
  • Écriture complète dans toutes les tables sauf blog, y compris user — écrasement rôle/mot de passe/e-mail, démontré de bout en bout comme prise de contrôle de compte.
  • Limitée aux comptes avec role=admin ; les writer/editor sont bloqués par User::checkRolePermission(). Il ne s'agit pas d'une élévation de privilèges depuis un rôle inférieur — cela transforme un clic sur un lien malveillant par un admin connecté en compromission totale et silencieuse du site.

Correctif

Ajoutez LoginAuth::checkToken() à execute_tool, définissez SameSite=Strict sur le cookie d'authentification, et remplacez la chaîne statique confirm_code par un véritable jeton à usage unique par session. Détail complet de la remédiation dans l'avis.

Chronologie de divulgation

  • 2026-07-31 — Signalé via GitHub Security Advisories conformément au SECURITY.md d'emlog.
  • 2026-08-01 — Le mainteneur a publié l'avis et a demandé un CVE.
  • 2026-08-16 — CVE-2026-73847 attribué par GitHub (CNA).

Note sur le crédit : GitHub en tant que CNA a publié l'enregistrement CVE sans entrée credits, alors que le GHSA lui-même crédite et accepte le rapporteur. Une demande de correction a été envoyée à [email protected] le 2026-08-16 ; ce README sera mis à jour si l'enregistrement est corrigé.

Avertissement

Publié après que l'avis est devenu public et qu'un CVE a été attribué, à des fins défensives/éducatives. N'exécutez pas ceci contre une instance emlog que vous ne possédez pas ou pour laquelle vous n'êtes pas explicitement autorisé à tester.

Télécharger l’outil
blog
include/service/ai.php:591
user
  • Le masquage des mots de passe peut être contourné par alias. Le masquage ne correspond qu'au nom littéral de colonne de sortie password (include/service/ai.php:822-828) — SELECT password AS pwd_hash FROM user renvoie le hash brut.
  • Le cookie d'authentification ne possède pas d'attribut SameSite (include/lib/loginauth.php:99), laissant la fenêtre de grâce « Lax+POST » par défaut de Chrome (environ les deux premières minutes après la connexion) comme seule barrière entre cette attaque et une livraison inter-sites fiable.