v0.77.11
git-ctx v0.77.11
이번 릴리스는 자격증명 마스킹이 자기 줄을 넘어가면서 줄을 지우고, 그 뒤 모든 줄 번호를 어긋나게 하던 문제를 고칩니다. 같은 작업에서 마스킹이 한 번도 보지 못하던 자격증명 두 가지 — PGP 비밀키 블록과 사용자 이름 없는 Redis·AMQP URL — 도 이제 가려집니다. 기본 서비스 포트는 계속 4747이며 기존 API·MCP 호환성을 유지합니다.
Kubernetes 매니페스트나
.netrc형식 파일을 담은 저장소를 색인 중이라면 이 릴리스가 답을 바꿉니다. 마스킹이 줄을 지운 파일에서는 그 아래 모든 청크가 실제 파일의 다른 줄 번호를 달고 저장되어 있었고,find-symbol과 스니펫이 가리키는 위치가 파일 끝까지 밀려 있었습니다. 저장되는 내용이 바뀌므로 재색인이 필요합니다 — 마스킹 규칙이 바뀌면 정책 지문도 함께 바뀌므로 대부분의 ref는 다음 색인 실행에서 자동으로 다시 읽힙니다.
수정
secret: 다음 줄의 값이 값으로 읽혔습니다
-
자격증명 대입 규칙은 이름과 값 사이를
\s로 이었는데,\s는 줄바꿈을 넘어갑니다. -
YAML이 이것을 상수로 만듭니다.
secret:·token:·password:는 흔한 섹션 머리글이고, 다음처럼 쓴 Kubernetes 볼륨이secret: secretName: db-creds
secret: [REDACTED] db-creds로 돌아왔습니다 — 키는 가려지고 값은 남았으며, 자격증명이 하나도 없는 매니페스트에 보안 이벤트가 올라갔고, 청크에서 줄 하나가 사라졌습니다. -
이제 대입 규칙은 자기 줄 안에서 끝납니다. 값이 없는 머리글은 대입이 아니므로 건드리지 않습니다.
.netrc 세 줄이 한 줄로 합쳐졌습니다
- 진짜
.netrc는machine·login·password를 각각 자기 줄에 적습니다. 그런데 규칙이 매치 전체를login [REDACTED] password [REDACTED]로 갈아 끼우면서 줄바꿈을 공백으로 바꿔 버렸습니다. - 이제 구분자를 잡아서 그대로 되돌려 씁니다. 가려지는 것은 두 값뿐이고 줄 구성은 원본 그대로입니다.
줄 하나가 사라지면 그 아래 전부가 어긋납니다
- 청크는 마스킹된 내용에서 잘라내고, 잘라낸 줄의 번호를 달아 저장됩니다.
- 그래서 위 두 규칙이 줄바꿈을 지울 때마다 그 뒤의 모든 줄 번호가 실제 파일의 다른 줄을 가리켰고, 어긋남은 파일 끝까지 누적됐습니다. 답 자체는 맞는데 따라가 보면 엉뚱한 줄인 상황입니다.
- 새 시험이 마스킹 전후의 줄 수가 같은지를 규칙 단위로 못 박습니다.
PGP 비밀키는 유일하게 통째로 색인되던 키 형식이었습니다
- 비밀키 헤더 규칙은
PRIVATE KEY-----에서 끝난다고 보았는데, PGP만 그 뒤가 더 있습니다 —-----BEGIN PGP PRIVATE KEY BLOCK-----. - 그래서 저장소에 커밋된
.asc·.gpg내보내기 파일은 다른 모든 키 형식이 차단되는 동안 키 자체까지 그대로 색인됐습니다.
사용자 이름 없는 URL에서는 비밀번호만 남았습니다
- URL 규칙은
://뒤에 한 글자 이상의 사용자 이름을 요구했습니다. - Redis와 AMQP, 그리고 그 위에 얹힌 클라이언트들은 비밀번호만으로 인증하므로 URL을
redis://:s3cr3t@cache:6379처럼 씁니다. 그 줄에서 유일한 자격증명이 유일하게 매치되지 않는 부분이었습니다. - 사용자 이름 자리를 비워 둘 수 있게 했습니다.
검증
- 새 시험
TestMaskingNeverChangesTheLineCount— 규칙별 대표 입력 7건에서 마스킹 전후 줄 수가 같은지. 수정 전에는.netrc와 YAML 입력에서 실패함 TestOrdinaryContentIsLeftAlone에 YAML 섹션 머리글 3건 추가 — 자격증명이 없는 매니페스트가 가려지지 않는지. 수정 전에는 실패함TestCredentialShapesAnInstallationActuallyHolds에 Redis·AMQP URL 2건,TestSanitizeBlocksAllCommonPrivateKeyPEMHeaders에 PGP 헤더 1건 추가. 수정 전에는 실패함gofmt -l,go vet ./..., FTS5 빌드·전체 테스트 통과, contentsecurity·indexer·search는-race도 통과- 버전 메타데이터 정합성, Kubernetes Kustomize 렌더링, linux/amd64 Docker 이미지 빌드
업그레이드 참고
- 마이그레이션은 필요하지 않습니다.
- 재색인이 필요합니다. 마스킹은 색인할 때 적용되므로, 이미 저장된 청크의 내용과 줄 번호는 다시 읽기 전까지 그대로입니다.
- 대부분은 자동입니다. 정책 지문에 마스킹 규칙이 들어 있어서, 이번 릴리스로 올리면 지문이 바뀌고 다음 색인 실행에서 커밋이 그대로인 ref도 다시 읽힙니다.
- 다만 정책 지문이 기록되기 전에 색인된 ref는 저장된 지문이 비어 있어 "현재"로 취급됩니다(업그레이드마다 전체를 다시 읽지 않기 위한 동작입니다). 오래 색인하지 않은 저장소가 있다면 해당 ref를 수동으로 다시 색인하세요.
- 재색인 뒤에는 보안 이벤트가 줄어듭니다. 자격증명이 없는 Kubernetes 매니페스트에 올라가던 오탐이 사라지기 때문입니다.
오프라인 Docker 이미지
릴리스 자산은 아키텍처 접미사가 없는 다음 두 파일입니다.
git-ctx-v0.77.11.tar.gzgit-ctx-v0.77.11.tar.gz.sha256
sha256sum -c git-ctx-v0.77.11.tar.gz.sha256
gzip -dc git-ctx-v0.77.11.tar.gz | docker load
docker image inspect git-ctx:v0.77.11 --format '{{.Os}}/{{.Architecture}} {{.Config.User}}'기대 결과는 linux/amd64 10001입니다. 아카이브에는 git-ctx:v0.77.11과 git-ctx:0.77.11 태그가 포함됩니다.
전체 변경 내역: v0.77.10...v0.77.11