🔍 Contexte

Le 18 septembre 2026, l’équipe de recherche PWN.AI publie une divulgation technique complète d’une chaîne d’exploitation baptisée Click2Shell, affectant WordPress Core dans toutes les versions antérieures à 7.1.1. La vulnérabilité a été signalée le 22 août 2026 et corrigée le 17 septembre 2026 dans la version 7.1.1.

🧩 Mécanisme de la vulnérabilité principale (WordPress Core)

Le fichier wp-admin/js/theme.js utilise la valeur du paramètre theme de l’URL /wp-admin/theme-install.php à deux endroits avec des interprétations divergentes :

  • L’API WordPress.org Themes canonicalise la valeur en un slug valide (ex: twentytwenty)
  • Le navigateur réutilise la valeur originale non échappée dans un sélecteur jQuery : $( 'div[data-slug="' + slug + '"]' ).trigger( 'click' );

Un attaquant peut injecter une valeur telle que twentytwenty"]>*>*>*/* pour que le sélecteur CSS résultant atteigne le bouton d’installation et déclenche un .trigger('click') automatique, installant le thème sans interaction de l’utilisateur.

⛓️ Chaîne d’exploitation complète

  1. Lien spécialement forgé → l’API Themes canonicalise vers un slug légitime
  2. Le navigateur exécute le sélecteur injecté → clique automatiquement sur “Installer”
  3. Le thème officiel (ex: mobile-repair-zone) est installé mais non activé
  4. Customizer WordPress charge le PHP du thème inactif via : /wp-admin/admin-ajax.php?wp_customize=on&customize_theme=mobile-repair-zone
  5. Vulnérabilité secondaire dans Mobile Repair Zone 2.5.4 : un handler AJAX mobile_repair_zone_install_and_activate_plugin sans vérification de nonce ni de capacité accepte une URL de plugin arbitraire, télécharge, décompresse et charge le PHP fourni par l’attaquant
  6. Exécution de code PHP sous le compte serveur WordPress

🎯 Conditions d’exploitation

  • Un administrateur WordPress authentifié doit visiter le lien forgé (UI:R)
  • Aucun compte attaquant sur le site cible n’est requis
  • Le thème attaquant reste inactif, rendant l’exploitation peu visible

🛠️ Correction

WordPress 7.1.1 (changeset 63664) modifie le sélecteur en : $( 'div.theme[data-slug="' + $.escapeSelector( slug ) + '"]' ).trigger( 'click' );

La correction ajoute $.escapeSelector() et contraint la correspondance à div.theme.

📊 Sévérité

  • Primitive d’installation forcée seule : CVSS 3.1 7.1 (High)
  • Chaîne complète avec RCE : CVSS 3.1 9.3 (Critical, UI:R)
  • Bounty maximum du programme WordPress payé (300$)
  • CVE en cours d’attribution au moment de la publication

📄 Nature de l’article

Il s’agit d’une publication de recherche en sécurité offensive avec divulgation technique complète, incluant des preuves de concept (PoC XSS et RCE), une timeline de divulgation coordonnée et une analyse du correctif.

🧠 TTPs et IOCs détectés

TTP

  • T1190 — Exploit Public-Facing Application (Initial Access)
  • T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
  • T1505.003 — Server Software Component: Web Shell (Persistence)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1608.001 — Stage Capabilities: Upload Malware (Resource Development)
  • T1204.001 — User Execution: Malicious Link (Execution)

IOC

  • Domaines : httpbingo.orgVT · URLhaus · ThreatFox
  • Chemins : wp-content/themes/twentytwenty/
  • Chemins : /wp-admin/theme-install.php
  • Chemins : /wp-admin/admin-ajax.php
  • Chemins : /wp-admin/js/theme.js

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 20 septembre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.


🟡 Indice de vérification factuelle : 50/100 (moyenne)

  • ⬜ pwn.ai — source non référencée (0pts)
  • ✅ 16947 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 5 IOCs (IPs/domaines/CVEs) (10pts)
  • ⬜ 0/1 IOCs confirmés externellement (0pts)
  • ✅ 6 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

🔗 Source originale : https://pwn.ai/blog/click2shell