
CENG 325 - 정보 보안 및 프라이버시 원리
그룹 멤버
@canumay @aslihann @ezgigucuyener @mburakdonmez
참고 자료
Exploit DB - Apache Tika-server < 1.18 - 명령 주입
Rhino Security Labs - CVE-2018-1335 악용: Apache Tika의 명령 주입
면책 조항
익스플로잇 코드는 사이버 보안 연구원 David Yesland @Daveysec이 작성했으며 교육 목적으로만 사용해야 합니다.
a. 취약점 간략 설명
b. 취약점 악용 방법
취약점 트리거 후 실행할 수 있는 공격 유형: 취약점을 트리거한 후 쉽게 리버스 셸을 만들 수 있으며, 해당 셸을 통해 Apache Tika 서버를 실행하는 사용자에게 허용된 모든 명령을 실행할 수 있습니다.
공격자가 취약점을 사용하여 취약한 시스템을 어떻게 악용하는가: 먼저 공격자는 서버가 취약한 버전의 Apache Tika 서버를 실행 중인지 확인해야 합니다. 그런 다음 공격자는 악성 HTTP 헤더와 Jscript 코드를 생성한 후, 취약한 HTTP 엔드포인트에 PUT 요청을 보내 Apache Tika 서버가 자체 기능을 사용하여 악성 코드를 실행하도록 합니다.
취약점이 익스플로잇 킷에서 사용되는가: 예, 이 취약점은 Metasploit 익스플로잇 킷에서 사용 가능합니다.
a. 취약점을 악용하는 익스플로잇 코드를 찾거나 제작하시오
b. 취약한 코드 부분을 강조하고 왜 취약한지 설명하시오
Apache Tika 서버는 이미지에 OCR을 실행하기 위해 사용자가 요청에 제공한 값을 사용하여 실행할 명령을 구성합니다. 이를 통해 사용자가 명령을 조작하고 악성 코드를 실행할 수 있습니다. 이 경우 config.getTesseractPath()는 X-Tika-OCRTesseractPath 헤더를 가져와 명령의 앞부분에 추가합니다. 비록 사용자가 제공한 경로 끝에 tesseract.exe 문자열이 추가되지만, 사용자는 자신의 경로를 "(큰따옴표)로 감싸서 뒤따르는 tesseract.exe 문자열을 무시할 수 있습니다. 이를 통해 사용자는 서버에서 모든 실행 파일을 실행할 수 있습니다.
구성된 명령:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
Windows에 내장된 CScript.exe는 스크립트 파일 이름을 인수로 받아 실행하고 다른 인수는 무시하는 스크립트 언어입니다. cscript용으로 작성된 스크립트를 제공하면 서버에서 실행할 수 있습니다. Apache Tika 서버는 본문에 제공된 이미지를 임시 파일로 저장하여 OCR을 실행하므로, 이미지 바이너리 대신 문자열을 직접 보내면 해당 문자열이 바이너리인 것처럼 저장됩니다. 그러나 Tika 서버는 jp2 파일 형식을 제외하고는 바이너리가 이미지인지 확인하며, jp2의 경우 직접 저장됩니다. 이 파일은 cscript 실행 파일의 인수로 전달됩니다. 하지만 파일 확장자는 여전히 .tmp이지만, 실제로는 .JScript 또는 .vbs가 필요합니다. 이 문제를 해결하기 위해 cscript에게 파일 확장자에 관계없이 JScript를 실행하도록 지시할 수 있습니다. Tika 서버는 또한 사용자가 X-Tika-OCRLanguage 헤더로 보낸 config.getPageSetMode() 값을 명령에 전달합니다. 이 값을 //E:Jscript 문자열로 변경하면 cscript가 파일 확장자에 관계없이 스크립트를 JScript로 실행합니다. 마지막으로 본문에 제공된 문자열은 실행될 페이로드가 되며, 이를 통해 시스템 셸에 완전히 액세스할 수 있는 다른 콘솔을 호출할 수도 있습니다.
최종 구성 명령:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
JScript에서 셸을 호출하는 간단한 페이로드:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. 찾거나 제작한 익스플로잇 코드를 실행하시오:
대상 가상 머신 내에서 Apache Tika Server 1.17이 실행 중입니다.
호스트 머신에서 IP "192.168.233.167"로 서버에 접근할 수 있습니다.
그런 다음 페이로드 "calc.exe"와 함께 제작된 익스플로잇 코드를 실행하여 대상 머신 내에서 계산기를 실행했으며, 이를 통해 대상 머신 내에서 모든 악성 코드를 실행할 수 있는 능력이 있음을 보여줍니다. 또한 리버스 셸의 힘으로 대상 머신에서 대화형 셸 세션을 생성할 수도 있습니다.
b. 익스플로잇 코드 실행 결과는 무엇인가:
위에서 설명한 대로 이 익스플로잇을 사용하여 기본적으로 대상 머신 내에서 계산기 프로그램을 실행하지만, 원격 코드 실행 능력을 사용하여 Apache Tika Server를 실행하는 사용자의 권한으로 대상 머신에서 원하는 모든 작업을 수행할 수 있습니다. 예를 들어, 사용자 파일에 접근하고, 사용자 활동을 모니터링하며, 웹캠이 있는 경우 스크린샷을 찍거나 사진을 촬영할 수도 있습니다.
c. 취약점이 실제로 존재한다는 것을 어떻게 알 수 있는가:
이 취약점은 NIST와 같은 신뢰할 수 있는 출처에 의해 이미 보고되었으며, Apache 자체에서 확인되고 패치되었습니다. 그러나 이를 증명하기 위해 metasploit을 사용하여 또 다른 PoC를 수행할 수 있습니다.
먼저 설치된 버전이 취약한 버전임을 확인했습니다.
버전을 확인한 후, 올바른 IP와 포트로 metasploit 세션을 구성하고 "check" 명령을 실행하여 대상이 취약한지 확인할 수 있습니다.
마지막으로 "exploit" 명령을 실행하여 익스플로잇을 시작하고 셸에서 "dir"을 입력하여 셸이 활성화되었는지 확인할 수 있습니다. 여기서 유일한 제한은 Apache Tika 서버를 실행하는 사용자의 권한입니다.