
Reproduction pack and PoC script for CVE-2026-87796, an unauthenticated arbitrary file upload RCE in Multi Uploader for Gravity Forms <= 1.1.9, with a loopback Docker lab.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87796
Multi Uploader for Gravity Forms 1.1.9 — sh1zen
The Multi Uploader for Gravity Forms plugin for WordPress is vulnerable to Arbitrary File Upload in all versions up to, and including, 1.1.9 via the move_file function. This is due to insufficient file type validation during chunked upload handling. This makes it possible for unauthenticated attackers to upload arbitrary files on the affected site's server which may make remote code execution possible.
| CVE | CVE-2026-87796 · CVE.org |
| CWE | CWE-434 |
| CVSS | Critical: 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Product | Multi Uploader for Gravity Forms |
| Affected | all versions through 1.1.9 (inclusive) |
| Patched | vendor patch — see references |
| Auth | none (see source map) |
| Lab | 127.0.0.1 only · vendor/client disclosure pack, not a scanner |
The advisory names move_file. That is a private PHP method, not HTTP action=. The HTTP action is gfmu-plupload-submit. Chunked vs non-chunked is REQUEST[chunks]>1. PHP function names are not admin-ajax action=.
POST/wp-admin/admin-ajax.phpPOST /wp-admin/admin-ajax.php action=gfmu-plupload-submit (nopriv, GFMUAddon.class.php:125)GFMUHandlePluploader::plupload_ajax_submit nonce gfmu-upload-nonce (GFMUHandlePluploader.class.php:257-262)GFMU_FileUploader::handleUpload chunks>1 (GFMU_FileUploader.php:231-319)move_file copy then unlink tmp (GFMU_FileUploader.php:319, 545-560)validateUploadedFile only AFTER the file is already at $target (322) — unlike non-chunked which validates first (375)GET /wp-content/uploads/gfmu-uploads-tmp/<name> for POC_WITNESS_87796HTTP GET of the uploaded file returns the unique string POC_WITNESS_87796. JSON result=success plus that GET is SUCCESS. Theme HTML, admin-ajax 0, or Server error. nonce fail is not it.
Do this first: Apply the vendor patch for Multi Uploader for Gravity Forms. See references.
Verify after upgrade
CVE-2026-87796-Abraxas-Labs.py against the patched build: the mapped witness must not appear.If you cannot update immediately
Target only http://127.0.0.1:8088 (or the loopback you bound). Do not point this script at the internet.
python3 CVE-2026-87796-Abraxas-Labs.py
Success is the witness above in the response body. Generic 200 HTML is not it.
Loopback stack used to reproduce. Official images unless a Dockerfile in this folder builds from source.
cd lab
docker compose up --force-recreate
Bind the vulnerable product tree next to Compose if the YAML mounts a local directory (plugin zip / source tag from the version table). Publish nothing except 127.0.0.1.
plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/GFMUAddon.class.php#L125
plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/inc/GFMU_FileUploader.php#L319
plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/inc/GFMU_FileUploader.php#L322
plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/inc/GFMU_FileUploader.php#L560
www.wordfence.com/threat-intel/vulnerabilities/id/47337bc1-fa3d-470c-9524-859295261017?source=cve
Plugin directory: gf-multi-uploader
Trac browser: plugins.trac.wordpress.org/gf-multi-uploader
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null
# CVE-2026-87796 (structured records)
- input: `https://nvd.nist.gov/vuln/detail/CVE-2026-87796`
- CWE: CWE-434
- published: 2026-09-17T05:17:02.123
## NVD description
The Multi Uploader for Gravity Forms plugin for WordPress is vulnerable to Arbitrary File Upload in all versions up to, and including, 1.1.9 via the move_file function. This is due to insufficient file type validation during chunked upload handling. This makes it possible for unauthenticated attackers to upload arbitrary files on the affected site's server which may make remote code execution possible.
## MITRE description
The Multi Uploader for Gravity Forms plugin for WordPress is vulnerable to Arbitrary File Upload in all versions up to, and including, 1.1.9 via the move_file function. This is due to insufficient file type validation during chunked upload handling. This makes it possible for unauthenticated attackers to upload arbitrary files on the affected site's server which may make remote code execution possible.
## Affected
- sh1zen Multi Uploader for Gravity Forms 0 affected
## References (JSON sources only)
- https://plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/GFMUAddon.class.php#L125
- https://plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/inc/GFMUHandlePluploader.class.php#L257
- https://plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/inc/GFMU_FileUploader.php#L319
- https://plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/inc/GFMU_FileUploader.php#L322
- https://plugins.trac.wordpress.org/browser/gf-multi-uploader/tags/1.1.9/inc/GFMU_FileUploader.php#L560
- https://www.wordfence.com/threat-intel/vulnerabilities/id/47337bc1-fa3d-470c-9524-859295261017?source=cve
- https://github.com/advisories/GHSA-h7vp-g8q2-89c8
- https://nvd.nist.gov/vuln/detail/CVE-2026-87796
## GitHub advisory
The Multi Uploader for Gravity Forms plugin for WordPress is vulnerable to Arbitrary File Upload...
The Multi Uploader for Gravity Forms plugin for WordPress is vulnerable to Arbitrary File Upload in all versions up to, and including, 1.1.9 via the move_file function. This is due to insufficient file type validation during chunked upload handling. This makes it possible for unauthenticated attackers to upload arbitrary files on the affected site's server which may make remote code execution possible.
This pack is for the vendor, the site owner, and licensed labs. The script talks to 127.0.0.1. Using it against systems you do not own is not authorized by Abraxas Labs. No warranty.