Bun 락파일과 공급망 보안
바이너리 락파일은 보안 세금과 같습니다. 나중에 이자까지 붙어서 지불하게 됩니다.
Bun은 예전에 bun.lockb라는 바이너리 파일에 의존성을 저장했습니다. 빠르고 용량도 작았지만, 내용을 읽을 수 없었습니다. 풀 리퀘스트(pull request)에서 차이점(diff)을 확인할 수 없었고, 무엇이 변경되었는지 알 수도 없었습니다.
의존성 변경 사항을 검토할 수 없다면, 정책이 있는 것이 아니라 그저 느낌(vibe)에 의존하는 것뿐입니다.
Bun v1.2는 기본 형식을 텍스트 기반인 bun.lock으로 전환합니다. 이것만으로도 보안 측면에서 큰 승리입니다.
텍스트 기반 락파일이 중요한 이유
- 의미 있는 diff – 리뷰어가 어떤 패키지가 이동하거나 변경되었는지 정확히 확인할 수 있습니다.
- 쉬운 정책 검사 – CI에서 금지된 패턴이나 신뢰할 수 없는 레지스트리를 스캔할 수 있습니다.
- 더 빠른 포렌식 –
git log를 통해 악성 패키지가 유입된 정확한 커밋을 확인할 수 있습니다.
락파일은 무결성과 재현성을 보장하지만, 만능 해결책(silver bullet)은 아닙니다. 정식으로 배포된 악성 버전이나, 계정이 탈취된 관리자의 행위까지 막을 수는 없습니다.
텍스트 락파일이 제공하는 것은 가시성(visibility)입니다. 가시성은 보안의 첫 번째 방어선입니다.
Bun 워크플로우를 안전하게 유지하는 방법
- CI에서
bun install --frozen-lockfile을 실행하세요. 락파일 업데이트가 필요한 경우 빌드가 실패합니다. - CI에서
bun install --lockfile-only를 실행하세요. 무거운 설치 스크립트를 실행하지 않고도 의존성 해결(resolution) 과정을 검증할 수 있습니다. - 모든 bun.lockb 파일을 즉시 bun.lock으로 마이그레이션하세요.
- 락파일 변경 시 반드시 사람의 검토를 거치도록 하세요.
CODEOWNERS에 적절한 담당자를 추가하여 모든 의존성 업데이트를 적절한 인원이 확인할 수 있도록 합니다.
도구를 맹목적으로 신뢰하지 마세요. 대신 모든 변경 사항을 검증하세요.
