Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain write access to shortcuts.xml
-
DeliveryPlant malicious shortcuts.xml pre-launch
-
ExploitNotepad++ loads tampered commands into memory
-
ExecutionRestore legitimate file on disk
-
PersistUser fires command, HMAC validates clean file
-
ImpactMalicious in-memory command executes
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture TOCTOU prevention
|
| Exploitation Conditions | Requires local write access to the on-disk shortcuts.xml file and the ability to win a timing race: the attacker must place the malicious shortcuts.xml before Notepad++ startup (when _userCommands is populated) and restore the legitimate file before the command-time HMAC check executes. Exploitation further depends on the victim subsequently triggering a user-defined command whose payload was loaded from the tampered file. Limiting factors: it is local-only (AV:L) with high complexity (AC:H) due to the swap window, it does not work against a read-only or properly permission-restricted shortcuts.xml, and it requires the attacker to already control or write to the victim's Notepad++ configuration files - so an attacker with no prior local file-write foothold cannot exploit it. |
| Impact | The supplied CVSS 4.0 vector (AV:L/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H, base 7.5) correctly reflects a local-only attack with high complexity due to the race window, but high impact to confidentiality, integrity and availability since arbitrary user commands run. There is no EPSS score, KEV listing, or POC provided, so real-world exploitation pressure is low and opportunistic mass exploitation is implausible - this is a precondition-heavy local issue, not an internet-facing RCE. Note a tension worth flagging: PR:N is asserted, yet the attack inherently requires write access to shortcuts.xml, which is effectively a local-privilege/foothold prerequisite - defenders should treat this as requiring prior local file-write access rather than zero privileges. The 'Information Disclosure' tag undersells the issue; the true impact is integrity bypass leading to execution of attacker-controlled commands. Overall this is a moderate, defense-in-depth priority for managed Windows fleets rather than an emergency. |
| Exploit ScenarioDerived | An attacker who already has write access to a victim's shortcuts.xml (for example via a prior low-privilege foothold or a writable shared profile path) replaces the file with one defining a malicious command, then restores the legitimate file once Notepad++ has loaded the tampered commands into memory. When the user triggers the affected command, the runtime HMAC check validates the restored clean file and passes, while the attacker's command executes from memory. No public POC is identified, and the high attack complexity reflects the need to win the startup-to-restore timing race. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 26, 2026
Local code execution in Notepad++ before 8.9.6.4 stems from a time-of-check/time-of-use race in NppCommands.cpp: the integrity HMAC of shortcuts.xml is verified against the on-disk file when a command fires, but the command payload is read from the _userCommands vector loaded at startup and never re-synced with disk. An attacker with write access to shortcuts.xml can plant a malicious version before launch and restore the legitimate file afterward, so the runtime HMAC check passes on the clean file while the malicious in-memory command executes. There is no public exploit identified at time of analysis and the issue is not in CISA KEV; it is fixed in 8.9.6.4.
RemediationAI
Vendor-released patch: upgrade Notepad++ to 8.9.6.4 or later, which caches the shortcuts.xml HMAC at startup (Parameters.cpp) and compares the cached load-time value instead of recomputing it at command time, eliminating the swap window; see advisory https://github.com/notepad-plus-plus/notepad-plus-plus/security/advisories/GHSA-qm4c-qg8p-qfcr and commit 4f7563c7c7f8ffa0d795ec86a7777067c7d644b5. Where immediate upgrade is not possible, restrict filesystem write permissions on the user's shortcuts.xml (under the Notepad++ config directory) so that only the owning user/process can modify it, which directly removes the attacker's ability to swap the file but does nothing if the attacker already controls the user account; additionally monitor or audit modifications to shortcuts.xml (e.g., file-integrity monitoring) to detect pre-launch tampering, accepting that this is detective rather than preventive. Avoid running Notepad++ from shared or world-writable profile locations.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Notepad++ stores user-defined command shortcuts in shortcuts.xml and protects that file's integrity with an HMAC keyed on the machine GUID (computeHMAC over getMachineGUID() and the file content), comparing the disk value against a value persisted in config.xml. The root cause is CWE-367 (Time-of-Check Time-of-Use Race Condition): the check (computeHMAC of the current on-disk shortcuts.xml at command() execution) and the use (the _userCommands vector populated once during NppParameters::load() at startup) reference two different points in time and are never reconciled. The fix changes Parameters.cpp/Parameters.h to compute and cache the disk HMAC at load time into a new _shortcutsOnDiskHmac field and compares that cached, load-time value (nppGUI._shortcutsOnDiskHmac vs nppGUI._shortcutsXmlHmacInConfig) instead of recomputing it from disk at command time, closing the swap window. Affected component per CPE is cpe:2.3:a:notepad-plus-plus:notepad-plus-plus.
Know when Notepad Plus Plus gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Local file-swap race (AV:L/AC:H); attacker needs write access to the victim's config file (PR:L) and the user must trigger a command (UI:R); full command execution gives C/I/A High.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Notepad++ is a free and open-source source code editor. Prior to 8.9.6.4, NppCommands.cpp checks the HMAC of the on-disk shortcuts.xml at the moment a user command fires (Time-of-Check). However, the command payload is taken from the in-memory _userCommands vector, which is populated at application startup and never re-synchronized with the on-disk file (Time-of-Use). Swapping shortcuts.xml between startup and command execution causes the HMAC check to validate a clean file while a malicious command runs. An attacker with write access to shortcuts.xml places a malicious version on disk before launch, then immediately restores the legitimate file. The HMAC check at execution time validates the restored legitimate file (check passes), while the malicious payload executes from memory. This vulnerability is fixed in 8.9.6.4.
Executive ViewAI
Notepad++ versions before 8.9.6.4 contain a local code execution vulnerability stemming from a race condition between configuration integrity verification and command execution. No public exploit identified at time of analysis. Organizations using Notepad++ should prioritize immediate upgrade to eliminate the risk of unauthorized code execution on affected workstations.
Apply vendor patch: upgrade to Notepad++ 8.9.6.4 or later. Interim mitigations: restrict file system write permissions on Notepad++ configuration directories (shortcuts.xml, plugin configurations) to administrators only; implement execution monitoring and application whitelisting on systems where Notepad++ access includes untrusted users.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Notepad Plus Plus
View allNotepad++ versions prior to 8.8.9 contain an update integrity verification vulnerability (CVE-2025-15556) when using the
Loading a crafted Notepad++ plugin that reports more than 30 external lexers can overflow a 30-element stack array insid
Local code execution in Notepad++ before 8.9.6.1 occurs because the <GUIConfig name="commandLineInterpreter"> value in c
Notepad++ installations prior to 8.9.8 crash when a local attacker can control the -settingsDir= command-line argument a
Arbitrary code execution in Notepad++ prior to 8.9.8 on Windows 10 and Windows 11 occurs when the editor's 'Folder as Wo
An Untrusted search path vulnerability in notepad++ 6.5 allows local users to gain escalated privileges through the msim
Notepad++ is a free and open-source source code editor. Rated high severity (CVSS 7.8), this vulnerability is no authent
Notepad++ versions 8.4.1 and before are vulnerable to DLL hijacking where an attacker can replace the vulnerable dll (Ux
SciLexer.dll in Scintilla in Notepad++ (x64) before 7.7 allows remote code execution or denial of service via Unicode ch
Improper signature verification in the Notepad++ updater path allows a locally planted or modified GUP.exe updater binar
Notepad++ versions before 8.9.2 allow local code execution through an unsafe search path vulnerability that permits atta
Notepad++ releases prior to 8.9.8 enforce their shortcuts.xml HMAC integrity check on the Macro menu and keyboard-shortc
EUVD-2026-39906
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB