Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-35204 — Helm 플러그인 설치에서 경로 탐색 취약점(CVE-2026-35204)을 시연하는 개념 증명으로, 조작된 플러그인 메타데이터를 통해 임의의 파일 쓰기를 가능하게 합니다. | Kitploit
도구/GitHubGitHub/h3ck13r/cve-2026-35204
Container SecurityVulnerability AnalysisExploitationCloud SecuritySupply Chain SecurityLearning & Education
GitHubh3ck13r/cve-2026-35204

CVE-2026-35204

Helm 플러그인 설치에서 경로 탐색 취약점(CVE-2026-35204)을 시연하는 개념 증명으로, 조작된 플러그인 메타데이터를 통해 임의의 파일 쓰기를 가능하게 합니다.

저장소 보기
121개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-35204

이 저장소는 CVE-2026-35204에 대한 PoC입니다.

설명

"Helm은 Kubernetes용 차트를 위한 패키지 매니저입니다. 4.0.0부터 4.1.3까지, 특별히 제작된 Helm 플러그인을 설치하거나 업데이트하면 Helm이 플러그인 내용을 임의의 파일 시스템 위치에 쓰게 됩니다. 이를 방지하려면 Helm 플러그인의 plugin.yaml에 POSIX 점-점 경로 구분자(예: /../)를 포함하는 version: 필드가 없는지 확인하세요. 이 취약점은 4.1.4에서 수정되었습니다."

이 PoC는 metadata.Version이 플러그인 아카이브의 경로를 구성하는 데 사용되어 경로 탐색이 가능하고 다운로드한 plugin.tgz를 의도된 플러그인 디렉터리 외부에 쓸 수 있음을 보여줍니다. 플러그인 내용은 설치되기 전에 지정된 캐시 디렉터리로 추출되므로, 이 PoC는 임의 추출 또는 임의 호스트 파일 덮어쓰기를 시연하지 않습니다.

작동 방식

Helm 플러그인 설치 프로그램은 네 가지 구현(HTTP, 로컬, VCS, OCI)을 가진 인터페이스를 사용합니다. 이 PoC는 HTTP 설치 프로그램에 초점을 맞춥니다. HTTP/OCI 설치 프로그램과 달리 VCS 설치 프로그램은 metadata.Version에서 tarball 경로를 전혀 구성하지 않습니다. 다음은 tarballPath를 준비하는 코드 블록입니다.

root@kitploit:~
filename := fmt.Sprintf("%s-%s.tgz", metadata.Name, metadata.Version)
tarballPath := helmpath.DataPath("plugins", filename)

여기서 metadata.Version은 plugin.yaml에서 우리가 제어하는 변수입니다. 취약점을 트리거하려면 제작된 플러그인을 .tgz 아카이브로 패키징해야 합니다. metadata.Version이 plugin.ExtractTgzPluginMetadata에 의해 추출되고 HTTP/OCI/로컬 설치 프로그램을 통해 다운로드되기 때문입니다. 따라서 경로 탐색을 달성하기 위해 웹 서버가 제공하는 아카이브로 플러그인을 가져오는 http_installer를 사용할 수 있습니다.

아래 예제에서 helm 바이너리는 로깅 메시지를 활성화하기 위해 수동으로 재빌드되었으며, 두 가지 다른 데이터 흐름을 관찰할 수 있습니다. 첫 번째는 올바른 버전 이름으로 플러그인을 설치하는 것입니다. 두 번째는 버전 이름에 점-점 경로 구분자가 포함된 플러그인 설치입니다.

root@kitploit:~
./helm plugin install http://0.0.0.0:8000/evil.tar.gz
Verifying plugin signature...
WARNING: No provenance file found for plugin. Plugin is not signed and cannot be verified.
filename ->  evil-2.2.2.tgz
tarballPath ->  /home/s0m3body/.local/share/helm/plugins/evil-2.2.2.tgz
i.CacheDir ->  /home/s0m3body/.cache/helm/plugins/http-0.0.0.0-8000-evil.tar.gz
i.Path() ->  /home/s0m3body/.local/share/helm/plugins/evil
Installed plugin: evil
root@kitploit:~
./helm plugin install http://127.0.0.1:8000/evil.tar.gz
Verifying plugin signature...
WARNING: No provenance file found for plugin. Plugin is not signed and cannot be verified.
filename ->  evil-../../../../../../.ssh/pwn3d.tgz
tarballPath ->  /home/s0m3body/.ssh/pwn3d.tgz
i.CacheDir ->  /home/s0m3body/.cache/helm/plugins/http-127.0.0.1-8000-evil.tar.gz
i.Path() ->  /home/s0m3body/.local/share/helm/plugins/evil
Installed plugin: evil

실행 추적은 경로 탐색이 다운로드된 플러그인 아카이브가 배치되는 위치(기본적으로 HELM_PLUGINS 환경 변수)에만 영향을 미친다는 것을 보여줍니다. 캐시(i.CacheDir)와 최종 추출(i.Path())은 변경되지 않습니다. 이를 바탕으로 임시 아카이브 대상과 이름을 조작하여 파일 쓰기를 발생시킬 수 있습니다.

아무것도 실행하거나 설치 후 웹훅을 사용할 필요가 없으며, 단순한 플러그인 설치만으로 취약점을 트리거할 수 있습니다.

HTTP 설치 프로그램을 분석하는 동안, 아카이브 추출은 i.CacheDir에서 발생하고 설치(fs.CopyDir)는 i.CacheDir에서 i.Path()로 파일을 복사하는 것을 확인했습니다. 탐색에 영향을 받은 tarballPath가 아카이브 내용에 영향을 미치는 코드 경로는 찾지 못했습니다. 따라서 분석된 실행 추적에 기반하여, 아카이브 추출 대상은 탐색 제어되는 tarballPath와 독립적입니다.

권고에는 설치와 업데이트가 모두 언급되어 있습니다. HTTP/로컬/VCS 설치 프로그램의 경우 Update()가 구현되어 있지 않습니다. OCI 설치 프로그램은 이전 플러그인을 제거한 후 Install()을 호출하여 업데이트를 구현합니다.

다음은 HTTP 설치 프로그램의 Update() 메서드입니다.

root@kitploit:~
func (i *HTTPInstaller) Update() error {
	return fmt.Errorf("method Update() not implemented for HttpInstaller")
}

취약점을 완화하기 위해 isValidSemver 함수가 추가되었으며, 이 함수는 이제 metadata.go 내부의 Validate()가 호출될 때 실행됩니다.

root@kitploit:~
"github.com/Masterminds/semver/v3"

func isValidSemver(v string) bool {
	_, err := semver.NewVersion(v)
	return err == nil
}

if m.Version != "" && !isValidSemver(m.Version) {
    errs = append(errs, fmt.Errorf("invalid plugin version %q: must be valid semver", m.Version))
}

보시다시피, 버전이 유효한 semver가 아닌 경우(예: ../../../../), 악성 Helm 플러그인 설치 과정에서 오류가 발생합니다.

요구 사항

  • 설치된 helm 바이너리
  • 설치된 python 인터프리터

사용법

PoC를 실행하려면 scripts/pos.sh 스크립트를 사용할 수 있습니다.

root@kitploit:~
./scripts/poc.sh

그러면 다음과 같은 결과가 나타납니다.

gifs/helm-cve-2026-35204-1.png gifs/helm-cve-2026-35204-2.png

참고 자료

  • NVD - CVE-2026-35204
  • GitHub Advisory 데이터베이스 - GHSA-vmx8-mqv2-9gmg

라이선스

MIT

도구 다운로드