Skip to content

Build1 publisher3 min readPublished

Forminator trusts a forged upload: a dropdown flaw exposes 600,000 WordPress sites to RCE

CVE-2026-15748 lets an unauthenticated attacker hide upload settings inside a Select field, so any site below 1.56.1 with a Select and a File Upload field is one request from a PHP file.

The Engineer · Build desk

Drafted by a language model from the sources cited here and checked against its claim ledger before publication. How we use AISend a correction

What happened

  • CVE-2026-15748 is an unauthenticated remote code execution vulnerability in the Forminator Forms plugin for WordPress, exploited by forging upload settings inside a Select field.
  • Wordfence Intelligence estimates around 600,000 WordPress sites are affected by the Forminator Forms vulnerability.
  • The vulnerability was published by Wordfence Intelligence on 17 August 2026.
  • The vulnerability is rated High severity.
  • The vulnerability affects Forminator Forms version 1.56.1 or earlier.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

Wordfence Intelligence disclosed CVE-2026-15748 on 17 August 2026, a high-severity flaw in the Forminator Forms plugin for WordPress that lets an unauthenticated attacker save a PHP file to affected servers [1][2][3][4]. Wordfence puts the exposed population at roughly 600,000 sites, and the failure is not a missing check so much as a misplaced trust: Forminator accepts upload configuration that the attacker smuggles into an unrelated field [1][2].

The precondition is narrow but common. The site needs a public Forminator form that carries both a File Upload field and a Select field, running version 1.56.1 or earlier [5][7]. The attacker injects a fake record into the nested value of the Select field, one that carries `return`, `field_type=upload`, a custom `name`, and a `field_array` [8]. Forminator's `set_field_data()` writes that record into its internal `field_data_array` [9]. Because a genuine File Upload field is present on the form, `process_uploads()` runs and treats the forged record as a legitimate upload setting [10]. From there the attacker controls the custom file type and the `additional-type` value [11].

The extension check is where the second mistake compounds the first. Forbidden extensions are blocked by exact match, so the attacker submits `ph(p)|text/x-php` [12]. That string is not an exact match for the key `php`, so it clears the blocklist, but the WordPress matcher resolves `ph(p)` back to `.php`, and the server writes the file [13][14]. No account and no administrator action are required, and the initial request is anonymous [16].

Whether the write becomes remote code execution depends on the storage root. If the custom File Upload directory lacks execution prevention such as an `.htaccess` rule, the attacker fetches the saved URL and runs the code [15]. Wordfence notes that default protected upload directories can still refuse to execute PHP even after a successful save, which is the difference between an arbitrary file write and a full compromise [17]. That caveat is the one thing standing between many sites and a web shell, and it is a configuration accident rather than a defence anyone chose.

The fix is to update to 1.56.2 [6]. Short of patching, removing the File Upload and Select combination from public forms closes the path, and a WAF or a server rule that blocks PHP execution in the upload directory reduces the impact [18]. For detection, Wordfence points to POST requests where a Select field carries unusual nested arrays or `field_type=upload`, abnormal `additional-type` patterns, randomly prefixed PHP files in the upload directory, and a GET to a newly written PHP URL from the same address moments after the POST [19]. SecurityWeek is listed as a related source [20].

What to watch: whether exploitation scales now that the mechanism is public, and how many of the 600,000 sites sit on storage roots that happily run PHP.

Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories