midi-Synth WordPress Plugin Arbitrary File Upload (CVE-2026-1306)
by murrez · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-1306
- Category
- web
- Affected product
- midi-Synth WordPress plugin
- Affected versions
- Versions ≤ 1.1.0 (per source README; verify against current plugin release notes)
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-04 |
| Author / Researcher | murrez |
| CVE / Advisory | CVE-2026-1306 |
| Category | web |
| Severity | Critical |
| CVSS Score | 9.8 (CVSS 3.1, per source README) |
| Status | Weaponized |
| Tags | wordpress, wp-plugin, file-upload, cwe-434, webshell, ajax, mass-scanning |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | midi-Synth WordPress plugin |
| Versions Affected | Versions ≤ 1.1.0 (per source README; verify against current plugin release notes) |
| Language / Platform | PHP / WordPress (target); Python 3 with requests (PoC) |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
The midi-Synth plugin’s export AJAX action insufficiently validates the file type/extension of uploaded MIDI conversion payloads (CWE-434). The handler writes the attacker-supplied, Base64-encoded file content into the plugin’s wp-content/plugins/midi-synth/sound/ directory before validating an API key; when that later API-key check fails and the request dies early, the file is never cleaned up. By submitting a PHP web shell disguised as the MIDI payload with a .php filename, an attacker can get executable PHP planted in a web-accessible directory. The included Python tool harvests the plugin’s per-page midiSynth_nonce from pages embedding the [midiSynth] shortcode, submits the malicious export request across a list of targets, and verifies/logs any resulting web shell URLs.
Vulnerability Details
Root Cause
The export AJAX handler accepts a Base64-encoded file (fileMidi) and an attacker-chosen filename (fileName) without validating the file extension/content type, and persists the file to a predictable, web-accessible plugin directory before the API-key check that would otherwise reject the request — leaving the file in place even on a “failed” request.
Attack Vector
- Locate a target page containing the
[midiSynth]shortcode and extract themidiSynth_noncevalue embedded in the page’s frontend JavaScript. - Send a POST to
wp-admin/admin-ajax.phpwithaction=export, the harvested nonce, an empty/invalidmasterAPIkey, andfileMidiset to a Base64-encoded PHP web shell withfileName=<shell>.php. - The plugin writes the file to
wp-content/plugins/midi-synth/sound/<shell>.phpbefore the API-key validation fails and the request is aborted, leaving the shell in place. - Request the resulting file path directly to confirm the web shell is live and accepts further file uploads/command execution.
Impact
Unauthenticated arbitrary PHP file upload leading to remote code execution and full site compromise via the planted web shell.
Environment / Lab Setup
Target: WordPress site with midi-Synth <= 1.1.0 and a page containing the [midiSynth] shortcode
Attacker: Python 3.x with the requests library
Proof of Concept
PoC Script
See
CVE-2026-1306 midi.pyin this folder.
| |
For each target in the list, the script fetches candidate pages to harvest the midiSynth_nonce, submits the crafted export AJAX request carrying a minimal PHP upload-shell payload named murrez.php, then verifies the shell is reachable under the plugin’s sound/ directory and records confirmed shell URLs to shell.txt.
Detection & Indicators of Compromise
POST /wp-admin/admin-ajax.php action=export
GET /wp-content/plugins/midi-synth/sound/*.php
Signs of compromise:
- Unexpected
.phpfiles (e.g.murrez.php) present inwp-content/plugins/midi-synth/sound/ exportAJAX requests with an empty or invalidmasterAPIkeycombined with a.phpfileName- Outbound requests directly retrieving files from the plugin’s
sound/upload directory shortly after an AJAX POST
Remediation
| Action | Detail |
|---|---|
| Primary fix | No vendor patch confirmed as of 2026-07-05 — update the midi-Synth plugin or remove it and monitor for advisory |
| Interim mitigation | Block direct execution of PHP files under wp-content/plugins/midi-synth/sound/ (web server config), and validate/clean up uploaded files before any API-key check that could short-circuit processing |
References
Notes
Mirrored from https://github.com/murrez/CVE-2026-1306 on 2026-07-05.
| |