Notepad Supply Chain Compromiae

Notepad++ Had No Update Verification. Attackers Noticed.

Notepad++ Had No Update Verification. Attackers Noticed.

One PHP Endpoint, Six Months of Access: Inside the Notepad++ Supply Chain Compromise

The Vulnerability That Made It Possible

For years, Notepad++'s update mechanism operated on a dangerous assumption: trust whatever URL the server returns.

When users clicked "Check for updates," the WinGUP updater queried notepad-plus-plus.org/getDownloadUrl.php and downloaded whatever executable that endpoint specified. No certificate pinning. No hash verification. No signature check. The updater simply executed what it received.

This meant anyone who controlled that single PHP endpoint controlled what millions of Notepad++ users would install next.

In June 2025, Chinese state-sponsored group Lotus Blossom gained exactly that control.

How They Got In

Notepad++ runs on shared hosting infrastructure. The attackers didn't need to breach Notepad++ directly - they compromised the hosting provider, gained access to the server, and modified how getDownloadUrl.php responded to requests.

But here's what made this campaign sophisticated: they didn't poison every update request. The attackers implemented selective targeting, redirecting only specific organizations to attacker-controlled infrastructure while legitimate users received normal updates. This kept the compromise invisible for six months.

The hosting provider later confirmed that attackers "specifically searched for the Notepad++ domain to intercept traffic" - this wasn't collateral damage from a broader hosting breach. It was a targeted operation.

Four Months, Three Attack Chains

What makes this campaign particularly interesting is how the attackers evolved their tradecraft over time - adapting to operational setbacks and progressively deploying more sophisticated tooling.

July-August: The Commodity Approach

The initial attack chain was straightforward: an NSIS installer dropped ProShow.exe (a legitimate Photodex binary) alongside a malicious DLL. When ProShow executed, it sideloaded the DLL, which decrypted embedded Metasploit shellcode that fetched a Cobalt Strike beacon.

EXE >_ Loader Decrypt & execute embedded shellcode M block_api Metasploit C&C server Download encrypted beacon Cobalt Strike beacon Decrypt & execute beacon C&C comms C&C server

Standard red team tooling. Nothing custom. This suggests the operators were either testing their access or working under time pressure.

Reconnaissance data (whoami, tasklist output) was exfiltrated to temp[.]sh - a legitimate file-sharing service that blends into normal traffic.

September 2: The Setback

On September 2nd, the hosting provider performed routine maintenance - kernel and firmware updates. This inadvertently terminated the attackers' direct server access.

But they weren't locked out completely. The attackers retained credentials for internal services, including the ability to redirect traffic from getDownloadUrl.php. The operation continued.

Mid-September: Going Lighter

Post-setback, the attackers deployed a significantly smaller payload - 140KB versus the previous multi-megabyte installers. The new chain used Lua scripts to execute shellcode, writing to %APPDATA%\Adobe\Scripts - a path that looks legitimate at a glance.

They also expanded reconnaissance, adding netstat collection to map network connections on compromised hosts.

October: The Custom Tooling Arrives

By October, Lotus Blossom deployed their flagship implant: Chrysalis.

NSIS drops DLL log.dll (malicious) drops BluetoothService (shellcode) drops EXE >_ BluetoothService.exe (Bitdefender binary) loads reads C&C Server

The delivery mechanism shifted to abusing BluetoothService.exe - a renamed Bitdefender Submission Wizard binary. This legitimate, signed executable would load log.dll (malicious) which decrypted shellcode from a separate file.

The sophistication jump was significant. The shellcode leveraged Microsoft Warbird - an obfuscation framework Microsoft uses to protect DRM code. Lotus Blossom adapted a proof-of-concept published by security researchers in September 2024, weaponizing it for their own shellcode execution.

Chrysalis: Purpose-Built for Persistence

Chrysalis isn't off-the-shelf malware. Analysis indicates active development - the codebase shows iteration and refinement rather than static deployment.

What makes it notable:

  • Undocumented syscalls: Chrysalis uses NtQuerySystemInformation with parameters not covered in public documentation - a technique that evades security tools monitoring standard API calls
  • Infrastructure rotation: C2 servers, downloaders, and payloads rotated monthly - never giving defenders a static target
  • Full-featured backdoor: Interactive shell, file operations, upload/download, process manipulation, self-destruct capability

C2 communications occurred over api.skycloudcenter[.]com - a domain designed to look like legitimate cloud infrastructure.

The Target Profile

Only ~12 machines were compromised over six months. This wasn't a mass campaign - it was precision targeting.

Region Sector Strategic Interest
Philippines Government South China Sea territorial disputes
Vietnam IT Services Belt and Road corridor; regional tech sector
El Salvador Financial Chinese infrastructure investment targets
Australia Individuals Five Eyes intelligence alliance member

The geographic spread maps directly to Chinese foreign policy priorities. Lotus Blossom, active since at least 2009, has historically focused on government and diplomatic targets in Southeast Asia - this campaign fits their established pattern.

Detection: What to Hunt For

Generic IOC blocking isn't enough - the attackers rotated infrastructure monthly. Focus on behavioral patterns:

DLL Sideloading Signatures

# Suspicious: Bitdefender binary outside normal install path
Process: BluetoothService.exe
NOT in: %ProgramFiles%\Bitdefender\*

# Suspicious: ProShow.exe (discontinued software) executing
Process: ProShow.exe
Loading: Any DLL not signed by Photodex

# Suspicious: Renamed security vendor binaries
Any process where:
  - PE metadata indicates Bitdefender/Trend Micro origin
  - Filename doesn't match original

Network Indicators

# Known C2 domains (historical - likely rotated)
api.skycloudcenter[.]com
self-dns[.]it
safe-dns[.]it
cdncheck[.]it
api.wiresguard[.]com

# Distribution servers
45.76.155[.]202
95.179.213[.]0

# Exfiltration pattern
POST requests to temp[.]sh containing system enumeration output

File System Artifacts

# Paths used by attack chains
%APPDATA%\Bluetooth\*           # Chain #3 working directory
%APPDATA%\Adobe\Scripts\*       # Chain #2 Lua execution

# Suspicious files
log.dll                         # Malicious loader (generic name, high suspicion)
BluetoothService (no extension) # Encrypted shellcode blob

MITRE ATT&CK Coverage

Technique Implementation
T1195.002 Supply Chain Compromise Hosting provider breach → update hijacking
T1574.002 DLL Side-Loading ProShow.exe, Bitdefender binary abuse
T1027 Obfuscated Files Microsoft Warbird shellcode protection
T1106 Native API Undocumented NtQuerySystemInformation parameters
T1071.001 Web Protocols HTTPS C2 with monthly rotation
T1567 Exfiltration Over Web Service temp[.]sh abuse for recon data

The Fix and the Bigger Picture

Notepad++ v8.8.9, released December 2025, finally implements what should have existed from the start: certificate verification and signature validation for downloaded updates. The WinGUP updater now verifies that installers are legitimately signed before execution.

But this campaign highlights a systemic issue beyond one application. Software update mechanisms are high-value targets precisely because users trust them implicitly. When an application says "update available," most users click yes without hesitation.

Questions organizations should be asking:

  • Which applications in our environment auto-update without signature verification?
  • Do we have visibility into update traffic patterns that could detect hijacking?
  • Are we monitoring for DLL sideloading via legitimate signed binaries?

The Notepad++ compromise wasn't technically sophisticated at its core - it exploited a trust assumption that should never have existed. The sophistication was in the patience (six months), the precision (12 targets), and the adaptation (three distinct attack chains evolving over time).

That combination - simple initial access, precise targeting, patient operation - is the hallmark of state-sponsored espionage.