[하루한줄] CVE-2024-22107: GTB Central Console Command Injection 취약점
URL
Target
- Target Product: GTB Central Console
- Affected Versions: 15.17.1-30814.NG (포함)
Explain
GTB Central Console은 기업의 데이터 보안을 담당하는 데이터 손실 방지(DLP) 소프트웨어로, 파일, 이메일, 네트워크 트래픽 등에서 민감한 데이터를 보호합니다.
취약점은 /opt/webapp/src/AppBundle/Controller/React/SystemSettingsController.php
파일 내의 systemSettingsDnsDataAction
메서드에서 발생합니다. 해당 메서드는외부로부터 입력된 데이터에 대해 제대로 검증하지 않아 공격자가 임의의 명령을 실행할 수 있습니다.
다음은 코드 일부분입니다.
//...
public function systemSettingsDnsDataAction(Request $request)
{
/** @var ConfigurationNetworkHandler $cnh */
$cnh = $this->container->get('gtb.handler.configuration_network');
$xaction = $request->request->get('xaction', null);
if (!$xaction) {
$content = json_decode($request->getContent(), true);
$xaction = $content['xaction'];
}
/** @var Translator $translator */
$translator = $this->container->get('translator');
$ssRepo = $this->getDm()->getRepository('AppBundle:SystemSettings');
switch ($xaction) {
case 'read':
$dns = $cnh->getDnsServer();
$data = [
'dnsServerIps' => $dns,
'cc_name' => $ssRepo->getParameterByName(SystemSettings::PARAM_CC_NAME)->getValue(),
'host_name' => trim(file_get_contents('/etc/hostname'))
];
return new JsonResponse([
'results' => $data
]);
case 'update':
$data = json_decode($request->request->get('data', '{}'), true);
$status = false;
if (isset($data['dnsServerIps'])) {
if (!$this->isMultiTenant()) {
$cnh->setDnsServer($data['dnsServerIps']);
}
$ssRepo->setParameterByName(SystemSettings::PARAM_CC_NAME, $data['cc_name']);
if (!$this->isMultiTenant()) {
exec('sudo /opt/webapp/shell/set_hostname.sh ' . $data['host_name']);
}
//...
이 코드를 보면 host_name
파라미터가 필터링 없이 exec()
함수로 전달된것이 문제가 됩니다.
exec('sudo /opt/webapp/shell/set_hostname.sh ' . $data['host_name']);
서버의 네트워크 정보를 수집하여 파일로 저장하는 Command Injection 페이로드의 예시로는 다음 코드와 같습니다.
{
"dnsServerIps": "8.8.8.8",
"cc_name": "",
"host_name": "target; ifconfig > /tmp/network_info.txt"
}
취약점을 악용한 공격자는 서버를 완전히 장악하거나 악성 행위를 할 수 있습니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.