CVE-2024-24576
Rust의 std::process::Command가 Windows에서 배치 파일의 인수를 제대로 이스케이프하지 못했습니다
- 게시됨
- 2024. 4. 9.
- 업데이트됨
- 2025. 11. 4.
- CNA 할당 중
- GitHub_M
- 증거 관찰됨
- 2026. 8. 8.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H보통 · 다음 30일
- 백분위수
- 97.4%
- 모델 날짜
- 2026. 9. 21.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
Rust는 프로그래밍 언어입니다. Rust 보안 대응 워킹그룹(Rust Security Response WG)은 Rust 표준 라이브러리 1.77.2 이전 버전이 Windows에서 `Command`를 사용하여 배치 파일(`bat` 및 `cmd` 확장자)을 호출할 때 인수를 제대로 이스케이프하지 못한다는 사실을 통보받았습니다. 생성된 프로세스에 전달되는 인수를 제어할 수 있는 공격자는 이스케이프를 우회하여 임의의 셸 명령을 실행할 수 있습니다. 이 취약점의 심각도는 Windows에서 신뢰할 수 없는 인수로 배치 파일을 호출하는 사용자에게 치명적입니다. 다른 플랫폼 또는 용도는 영향을 받지 않습니다. `Command::arg` 및 `Command::args` API는 문서에서 인수가 인수의 내용과 관계없이 생성된 프로세스에 그대로 전달되며 셸에 의해 평가되지 않는다고 명시합니다. 이는 신뢰할 수 없는 입력을 인수로 전달하는 것이 안전해야 함을 의미합니다. Windows에서 이 구현은 다른 플랫폼보다 더 복잡합니다. Windows API는 생성된 프로세스에 전달되는 모든 인수를 포함하는 단일 문자열만 제공하며, 이를 분할하는 것은 생성된 프로세스의 몫이기 때문입니다. 대부분의 프로그램은 표준 C 런타임 argv를 사용하며, 실제로 인수가 분할되는 방식은 대체로 일관됩니다. 단, 한 가지 예외는 배치 파일 실행 등에 사용되는 `cmd.exe`로, 자체적인 인수 분할 논리를 가지고 있습니다. 이로 인해 표준 라이브러리는 배치 파일에 전달되는 인수에 대한 사용자 지정 이스케이프를 구현해야 했습니다. 안타깝게도 우리의 이스케이프 논리가 충분히 철저하지 않아 임의의 셸 실행을 초래할 수 있는 악의적인 인수를 전달할 수 있다는 보고가 있었습니다. `cmd.exe`의 복잡성으로 인해 모든 경우에 인수를 올바르게 이스케이프할 수 있는 솔루션을 찾지 못했습니다. API 보증을 유지하기 위해 이스케이프 코드의 견고성을 개선하고, 인수를 안전하게 이스케이프할 수 없을 때 `Command` API가 `InvalidInput` 오류를 반환하도록 변경했습니다. 이 오류는 프로세스를 생성할 때 발생합니다. 이 수정 사항은 Rust 1.77.2에 포함되어 있습니다. 배치 파일에 대한 새로운 이스케이프 논리는 보수적으로 동작하여 유효한 인수를 거부할 수 있습니다. 이스케이프를 직접 구현하거나 Windows에서 신뢰할 수 있는 입력만 처리하는 사용자는 `CommandExt::raw_arg` 메서드를 사용하여 표준 라이브러리의 이스케이프 논리를 우회할 수도 있습니다.
소스
7Windows의 Rust에서 CVE-2024-24576 명령 주입 취약점에 대한 개념 증명으로, Julia로 구현되었습니다.
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.