[하루한줄] CVE-2020-8209 : Path Traversal on Citrix XenMobile Server

URL

Path Traversal on Citrix XenMobile Server

Target

XenMobile Server 10.12 before RP2
XenMobile Server 10.11 before RP4
XenMobile Server 10.10 before RP6
XenMobile Server before 10.9 RP5

Explain

조직 구성원들의 모바일 디바이스 및 애플리케이션을 관리하는 Endpoint Management 솔루션인 XenMobile에서 path traversal로 권한이 없는 사용자가 패스워드를 포함한 임의 파일을 읽을 수 있고, 암호화된 패스워드를 복호화 할 수 있는 취약점이 발견되었습니다.

help-sb-download.jsp 에 존재하는 취약한 코드는 아래와 같습니다.

<%
    String sbFilePath="/opt/sas/support/";
    int length = 0;

    String sbFileName=(String)request.getParameter("sbFileName");

    ServletOutputStream outStream = response.getOutputStream();
    response.setHeader("Set-Cookie","fileDownload=true; path=/");
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + sbFileName + '"');

    File file = new File(sbFilePath+sbFileName);
    byte[] byteBuffer = new byte[4096];
    DataInputStream in = new DataInputStream(new FileInputStream(file));

    while((in != null) && ((length =in.read(byteBuffer)) != -1)){
			outStream.write(byteBuffer,0,length);
    }
    in.close();
    outStream.flush();
%>

매개변수로 받는 sbFileNamesbFilePath/op/sas/support/ 뒤에 연결되고 File 클래스 생성자의 인수가 됩니다. sbFileName../../../etc/passwd를 전달하면 /etc/passwd의 내용을 출력할 수 있습니다.

이를 이용해 암호화된 패스워드의 복호화도 가능합니다. 패스워드 암호화는 /opt/sas/sw/lib/libsecure.soDataSecurity.jar 라이브러리에서 이루어지며 /opt/sas/rt/keys/security.properties에는 암호화 키가 존재합니다. 해커가 path traversal 취약점을 악용해 라이브러리와 key를 다운로드하고 로컬 환경에서 암호화 라이브러리를 import 해 패스워드를 복호화할 수 있습니다.

이 취약점은 help-sb-download.jsp 파일을 제거하는 것으로 패치가 이루어졌습니다.