Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-75865 — Unauthenticated arbitrary file upload -> RCE in WPLP Cookie Consent (gdpr-cookie-consent) <= 4.4.1 - technical write-up and PoC | Kitploit
Tools/GitHubGitHub/ghostpels/cve-2026-75865
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed Teaming
GitHubghostpels/cve-2026-75865

CVE-2026-75865

Unauthenticated arbitrary file upload -> RCE in WPLP Cookie Consent (gdpr-cookie-consent) <= 4.4.1 - technical write-up and PoC

View Repository
720 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-75865 — WPLP Cookie Consent (gdpr-cookie-consent) ≤ 4.4.1

Proof-of-concept and technical write-up for CVE-2026-75865, an unauthenticated arbitrary file upload leading to remote code execution in the WPLP Cookie Consent – Cookie Banner & Consent Management for GDPR, CCPA & Google Consent Mode plugin for WordPress (slug gdpr-cookie-consent), affecting all versions up to and including 4.4.1.

Key facts
CVECVE-2026-75865
SeverityCritical — CVSS 3.1 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
WeaknessesCWE-862 (Missing Authorization) + CWE-434 (Unrestricted Upload of File with Dangerous Type)
Affected versionsgdpr-cookie-consent ≤ 4.4.1
Fixed in4.4.2
CVE assignerWordfence
Published2026-09-01
Discovered bySupakiad S. (m3ez)

Overview

The plugin's SaaS "connector" REST endpoints authenticate requests by delegating to the vendor's SaaS application, which validates a Bearer JWT — but the plugin only checks that the validation endpoint answers HTTP 200. There is no ownership binding between the JWT and the target site, so any valid token issued by the SaaS (e.g. from a free account) is accepted.

The saas_upload_logo() function then writes an attacker-supplied base64 blob into the public wp-content/uploads/ directory under an attacker-supplied filename, without any content or extension validation. The stored API token (master_key) that also guards the endpoint is not actually secret: the plugin's own /store-auth route overwrites it from request parameters after the same JWT check, so the full chain — from unauthenticated request to an executed payload in the web root — requires only a target URL and a free SaaS account.

The vulnerability was fixed in 4.4.2 by removing the upload endpoint entirely and reworking the connector trust model (JWT ownership binding, hash_equals(), HMAC request signing).

Full technical analysis: REPORT.md

Repository contents

FileDescription
REPORT.mdDetailed technical write-up: root-cause analysis with line-referenced code, the 4.4.1 → 4.4.2 fix comparison, exploitation chain, detection & mitigation
cve_2026_75865.pyPoC script — scans a target list, detects vulnerable sites, and runs the full chain (admin enumeration → master-key overwrite → payload upload → verification) with live output
payload.phpMinimal benign payload used by default: prints a marker string and supports self-removal (?delete=1)

Quick start

root@kitploit:~
git clone https://github.com/ghostpels/CVE-2026-75865.git
cd CVE-2026-75865
pip install requests          # colorama is optional (colored logs)

# 1. Save a valid SaaS JWT (any account at app.wplegalpages.com) into jwt.txt
# 2. Create a target list and run only against systems you are authorized to test:
python cve_2026_75865.py -l targets.txt -o vuln.txt -t 40 --marker CVE-2026-75865-POC

Verified payload URLs are appended to vuln.txt live, one per line, as soon as each target is verified.

CLI reference

OptionDefaultDescription
-l, --list(required)Target list, one URL per line
-o, --outputvuln.txtVerified payload URLs, appended live
-t, --threads40Concurrent workers
--shellpayload.phpPayload file next to the script; uploaded name = its basename
--filename—Custom uploaded filename (its extension is tried first, then --exts)
--extsphp,phtml,php5,php74,php7,php3,php4,pharFallback extensions when the primary one is blocked
--jwt-filejwt.txtSaaS JWT, first non-empty line
--marker—String that must appear in the payload response to count as valid
--timeout15Per-request timeout (seconds)
-k, --insecureoffDisable TLS verification
-v, --verboseoffShow connection error details

Credits

  • Vulnerability discovery: Supakiad S. (m3ez)
  • Write-up and PoC tooling: ghostpel

References

  • Wordfence Threat Intelligence advisory
  • WordPress.org plugin changeset r3674117
  • NVD — CVE-2026-75865
  • CraftedSignal threat brief

Disclaimer

This repository is published for educational and defensive security research only. Use the tool exclusively against systems you own or have explicit written permission to test. The author is not responsible for any misuse or damage caused by this material.

Download Tool