v0.77.12
git-ctx v0.77.12
이번 릴리스는 YAML 블록 스칼라로 다음 줄부터 적은 자격증명을 마스킹이 전혀 가리지 못하던 문제를 고칩니다. password: | 아래에 적힌 비밀번호와 짧은 토큰은 어떤 규칙에도 잡히지 않아 통째로 색인되고 스니펫으로 그대로 돌아왔습니다. 기본 서비스 포트는 계속 4747이며 기존 API·MCP 호환성을 유지합니다.
Kubernetes Secret·Helm values·Ansible vars·GitLab CI 변수·compose 파일을 담은 저장소를 색인 중이라면 이 릴리스가 저장되는 내용을 바꿉니다. 블록 스칼라는 매니페스트가 한 줄에 맞지 않거나 따옴표로 감싸고 싶지 않은 값을 적는 표준적인 형태이고, 그 본문은 지금까지 원문 그대로 저장돼 있었습니다. 재색인이 필요합니다 — 마스킹 규칙이 바뀌면 정책 지문도 함께 바뀌므로 대부분의 ref는 다음 색인 실행에서 자동으로 다시 읽힙니다.
수정
password: | 아래의 값은 어떤 규칙도 보지 못했습니다
-
자격증명 대입 규칙은 한 줄을 읽고, 콜론 뒤에 네 글자 이상을 요구합니다. 그런데 블록 스칼라는 키 줄에
|한 글자만 두고 값을 다음 줄부터 적습니다.stringData: password: | S0me-P@ssword
-
뒤따르는 줄은 자기가 무엇에 속하는지 말하지 않으므로 본문이 색인에 들어가 스니펫으로 그대로 나왔습니다. 이렇게 적은 키나 인증서는 비밀키 규칙이, 길고 무작위한 토큰은 엔트로피 규칙이 잡아 주지만, 평범한 비밀번호와 짧은 토큰은 정확히 그 사이에 남아 있었습니다.
-
이제 본문은 키보다 깊게 들여쓴 줄의 연속으로 봅니다 — YAML 자체가 값의 끝을 정하는 방식입니다. 들여쓰기가 키 이하로 얕아지는 줄에서 블록이 끝나고, 문서의 나머지는 건드리지 않습니다.
-
줄은 각각 따로
[REDACTED]로 바꾸고 들여쓰기를 유지합니다. 청크는 마스킹된 내용에서 잘라내고 잘라낸 줄의 번호를 달아 저장되므로, 블록을[REDACTED]하나로 접었다면 그 파일에서 그 뒤의 모든 줄이 밀렸을 것입니다. 블록 안의 빈 줄도 그대로 둡니다. CRLF 파일은 줄 끝을 바꾸지 않습니다.
표시자가 줄을 끝내야 합니다
- 표시자는
|또는>, chomping-·+, 들여쓰기 숫자, 그리고 그 뒤에는 주석 말고 아무것도 없어야 합니다. - 그래서 템플릿 언어의
token: > 5 && retries < 2와, 파이프로 시작하는 Markdown 표의| password | ... |셀에는 규칙이 닿지 않습니다.script: |·description: |처럼 키가 자격증명 이름이 아닌 블록도 그대로 둡니다. - 규칙이 아는 필드 이름은 대입 규칙과 한 목록으로 공유합니다. 한 문법에 더한 이름이 다른 문법에서도 같이 읽힙니다.
검증
TestCredentialShapesAnInstallationActuallyHolds에 블록 스칼라 2건 추가 — 리터럴(|) 블록과 목록 항목 아래 folded(>-) 블록. 수정 전에는 실패함- 새 시험
TestABlockScalarStatesItsValueOnTheFollowingLines— 빈 줄을 품은 블록 두 개가 가려지고, 들여쓰기가 얕아진 뒤의username: app과notes: |본문은 남으며, 값 줄마다[REDACTED]하나가 원래 들여쓰기로 놓이는지. 수정 전에는 실패함 TestOrdinaryContentIsLeftAlone에 5건 추가 —script: |·description: |·Markdown 표·token: > 5·본문 없는password: |가 가려지지 않는지TestMaskingNeverChangesTheLineCount에 빈 줄을 품은 블록과 CRLF·들여쓰기 숫자 블록 2건 추가gofmt -l,go vet ./..., FTS5 빌드·전체 테스트 통과, contentsecurity는-race도 통과- 버전 메타데이터 정합성, Kubernetes Kustomize 렌더링, linux/amd64 Docker 이미지 빌드
업그레이드 참고
- 마이그레이션은 필요하지 않습니다.
- 재색인이 필요합니다. 마스킹은 색인할 때 적용되므로, 이미 저장된 청크 안의 블록 스칼라 본문은 다시 읽기 전까지 그대로입니다.
- 대부분은 자동입니다. 정책 지문에 마스킹 규칙이 들어 있어서, 이번 릴리스로 올리면 지문이 바뀌고 다음 색인 실행에서 커밋이 그대로인 ref도 다시 읽힙니다.
- 다만 정책 지문이 기록되기 전에 색인된 ref는 저장된 지문이 비어 있어 "현재"로 취급됩니다(업그레이드마다 전체를 다시 읽지 않기 위한 동작입니다). 오래 색인하지 않은 저장소가 있다면 해당 ref를 수동으로 다시 색인하세요.
- 재색인 뒤에는 블록 스칼라로 자격증명을 적은 파일에서
credential_assignment보안 이벤트가 새로 올라옵니다. 지금까지 보이지 않던 자격증명이 잡히는 것이므로 조치 대상으로 보세요.
오프라인 Docker 이미지
릴리스 자산은 아키텍처 접미사가 없는 다음 두 파일입니다.
git-ctx-v0.77.12.tar.gzgit-ctx-v0.77.12.tar.gz.sha256
sha256sum -c git-ctx-v0.77.12.tar.gz.sha256
gzip -dc git-ctx-v0.77.12.tar.gz | docker load
docker image inspect git-ctx:v0.77.12 --format '{{.Os}}/{{.Architecture}} {{.Config.User}}'기대 결과는 linux/amd64 10001입니다. 아카이브에는 git-ctx:v0.77.12과 git-ctx:0.77.12 태그가 포함됩니다.
전체 변경 내역: v0.77.11...v0.77.12