[하루한줄] CVE-2024-20328: ClamAV의 Command Injection 취약점
URL
https://amitschendel.github.io/vulnerabilites/CVE-2024-20328/
Target
- ClamAV
- 0.104
- 0.105
- 1.0.0 ~ 1.0.4
- 1.1
- 1.20, 1.2.1
Explain
Cisco Talos가 개발한 오픈소스 Antivirus 엔진인 ClamAV에서 Command Injetion 취약점이 발견되어 세부 정보가 공개되었습니다.
ClamAV의 clamd.conf
설정파일에서는 바이러스가 탐지되면 사용자 지정 command를 실행하는 VirusEvent 기능을 활성화할 수 있습니다.
# clamd.conf
# VirusEvent 설정 예시
VirusEvent "echo VIRUS DETECTED: %v in the path %f >> /dev/stdout"
VirusEvent가 활성화되어 있으면 바이러스 탐지 시 ClamAV 데몬 clamd의 virusaction
함수에서 아래 루틴을 실행합니다.
void virusaction(const char *filename, const char *virname, const struct optstruct *opts)
{
// ...
for (i = 0, j = 0; i < len; i++) {
if (i + 1 < len && opt->strarg[i] == '%' && opt->strarg[i + 1] == 'v') {
strcat(buffer_cmd, virname);
j += strlen(virname);
i++;
} else if (i + 1 < len && opt->strarg[i] == '%' && opt->strarg[i + 1] == 'f') {
strcat(buffer_cmd, filename);
j += strlen(filename);
i++;
} else {
buffer_cmd[j++] = opt->strarg[i];
}
}
// ...
_exit(execle("/bin/sh", "sh", "-c", buffer_cmd, NULL, env));
//...
바이러스가 탐지되면 clamd.conf
에서 지정한 사용자 지정 command를 execle
을 통해 쉘에서 실행합니다. 이 때 전달되는 명령어 중 %v
는 바이러스명 virname
, %f
는 탐지된 파일명으로 치환하는데, 이때 탐지된 파일명에 임의의 실행할 명령어가 포함되어 있으면 Command Injection이 트리거됩니다.
탐지된 바이러스 파일명이 l0chvirname;whoami;
인 경우 아래와 같이 clamd 컨텍스트에서 임의 코드 실행이 가능합니다.
VIRUS DETECTED: Multios.Coinminer.Miner-6781728-2.UNOFFICIAL in the path
/home/l0ch/l0chvirname
root
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.