🔍 Contexte

Publié le 22 septembre 2026 sur le blog de Viettel Cyber Security par le chercheur khoadha, cet article présente une analyse technique approfondie de CVE-2026-65660, une vulnérabilité affectant toutes les versions de Microsoft SharePoint (2013, 2016, 2019 et Subscription Edition).

🧩 Vulnérabilité : Bypass du type-check SafeControls

La faille repose sur un contournement du mécanisme SafeControls via EditingPageParser.VerifyControlOnSafeList(). La méthode ToolPane.GetPartPreviewAndPropertiesFromMarkup() sépare les directives Register du markup Tag via ServerElementMarkupSource, puis les réassemble. La méthode RegisterDirective.GetHtml() reconstruit les directives sans valider les guillemets dans les valeurs d’attributs, permettant une injection de type SQL injection pour insérer des directives arbitraires.

⚙️ Mécanisme d’exploitation

  • Injection de guillemets doubles " et simples ' dans les valeurs d’attributs pour manipuler la directive Register reconstituée
  • Utilisation de l’attribut ignoreParentFrozen pour contourner la validation dans TemplateParser.ProcessAttributes()
  • Utilisation du préfixe publishingribbon (ajouté automatiquement par EditingPageParser.InitializeRegisterTable() lors de la vérification mais absent lors du parsing)
  • Chaîne d’exploitation via XamlServices.Parse() + ObjectDataProvider + ExpandedWrapper + LosFormatter pour atteindre l’exécution de code

🔓 Bypass d’authentification (Pre-Auth RCE)

Le contournement d’authentification exploite le fait que ToolPane n’est pas uniquement instancié dans ToolPanePage (qui vérifie l’authentification dans OnInit). Toute page héritant de WebPartPage avec une WebPartZone instancie ToolPane via ToolPaneCreationAndInitialization(). L’exploitation cible des pages comme AddGallery.aspx sur des serveurs SharePoint accessibles anonymement (configuration standard pour les sites publics internet).

🐚 Webshell en mémoire (In-Memory Webshell)

La technique utilise XamlServices.Parse() (au lieu de XamlReader.Parse() qui échoue sur les permissions de registre liées à EventTrace) combiné à ActivitySurrogateDisableTypeCheckGenerator et ActivitySurrogateSelectorGenerator de ysoserial pour déployer un webshell en mémoire.

📅 Correctifs

  • La combinaison Pre-Auth RCE a été corrigée dans le patch du 9 juin 2026
  • CVE-2026-65660 a été corrigé dans le patch du 11 août 2026 (désactivation par défaut de ToolPane.GetPartPreviewAndPropertiesFromMarkup())
  • Des vecteurs alternatifs subsistent (ex: GetWebPartPageConnectionInfo de WebPartPagesWebService)

📌 Type d’article

Il s’agit d’une publication de recherche offensive avec preuve de concept, visant à documenter techniquement une chaîne d’exploitation complète (bypass + RCE + webshell en mémoire) sur Microsoft SharePoint.

🧠 TTPs et IOCs détectés

TTP

  • T1190 — Exploit Public-Facing Application (Initial Access)
  • T1059 — Command and Scripting Interpreter (Execution)
  • T1505.003 — Server Software Component: Web Shell (Persistence)
  • T1211 — Exploitation for Defense Evasion (Defense Evasion)
  • T1562 — Impair Defenses (Defense Evasion)

IOC

  • CVEs : CVE-2026-65660 — NVD · CIRCL
  • Chemins : /_controltemplates/15/AclEditor.ascx

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 25 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.

Malware / Outils

  • ysoserial (tool)
  • In-Memory Webshell (backdoor)

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

  • ⬜ blog.viettelcybersecurity.com — source non référencée (0pts)
  • ✅ 17720 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 2 IOC(s) (6pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 5 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ✅ 1/1 CVE(s) confirmée(s) (CIRCL) (5pts)

🔗 Source originale : https://blog.viettelcybersecurity.com/sharepoint_cve-2026-65660/