
CVE-2024-24576 개념 증명
Command::arg 및 Command::args API는 문서에서 인수가 인수 내용과 관계없이 생성된 프로세스에 그대로 전달되며 셸에 의해 해석되지 않는다고 명시합니다. 이는 신뢰할 수 없는 입력을 인수로 전달해도 안전해야 함을 의미합니다.
Windows에서는 Windows API가 생성된 프로세스에 모든 인수를 포함하는 단일 문자열만 제공하고, 이를 분할하는 것은 생성된 프로세스의 몫이기 때문에 구현이 다른 플랫폼보다 더 복잡합니다. 대부분의 프로그램은 표준 C 런타임 argv를 사용하며, 실제로는 인수가 비교적 일관된 방식으로 분할됩니다.
한 가지 예외는 cmd.exe(배치 파일 실행 등에 사용됨)로, 자체 인수 분할 논리를 가지고 있습니다. 이로 인해 표준 라이브러리는 배치 파일에 전달되는 인수에 대해 사용자 정의 이스케이프 처리를 구현해야 합니다. 불행히도 이 이스케이프 로직이 충분히 철저하지 않아 임의의 셸 실행을 초래하는 악성 인수를 전달할 수 있는 것으로 보고되었습니다.

참고: https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html