
주니어 백엔드 지원자 과제: Melange로 dasel CLI(v3.3.1) 패키징, CVE-2026-33320 수정, Apko를 사용한 최소 컨테이너 이미지 빌드.
Melange로 dasel v3.3.1 패키지를 만들고, apko로 컨테이너 이미지를 빌드하며, CVE-2026-33320을 수정합니다.
사전 요구 사항: Docker. 모든 빌드 단계는 컨테이너 안에서 실행됩니다 — 로컬 melange/apko 설치가 필요 없습니다. 모든 명령은 linux/amd64(또는 linux/amd64 에뮬레이션을 지원하는 Docker Desktop)에서 저장소 루트로부터 실행하세요.
0단계 — 서명 키 생성(1회)
docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/melange keygen
1단계 — 패키지 빌드
docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange build melange/dasel.yaml --arch amd64 --signing-key melange.rsa
출력: packages/x86_64/dasel-3.3.1-r1.apk
2단계 — 패키지 테스트
docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange test melange/dasel.yaml --arch amd64 --repository-append //work/packages --keyring-append //work/melange.rsa.pub
3단계 — 이미지 빌드
docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/apko build apko/dasel.yaml dasel-image:latest dasel-image.tar --arch amd64 -k melange.rsa.pub
출력: dasel-image.tar. apko/dasel.yaml의 @local ./packages 저장소 덕분에 apko는 1단계에서 빌드한 APK를 설치합니다. -k는 apko가 Melange 서명 키를 신뢰하도록 합니다. apko는 태그에 아키텍처를 덧붙이므로 로드된 이미지는 dasel-image:latest-amd64입니다.
4단계 — 이미지 로드
docker load --input dasel-image.tar
5단계 — 이미지 테스트 실행
bash tests/test.sh
테스트는 총 10개입니다: 바이너리 존재 및 실행 가능, JSON 플랫 키 조회, 아키텍처가 amd64인지, CVE 예산 한도가 YAML 앨리어스 폭탄을 거부하는지, 일반 YAML 정상 경로 읽기, 중첩 JSON 경로, 배열 인덱스 접근, TOML 형식, CVE 깊이 한도가 33단계 앨리어스 체인을 거부하는지, 잘못된 JSON 거부.
melange/CVE-2026-33320.patch는 parsing/yaml/yaml_reader.go에 두 개의 가드를 추가합니다:
maxExpansionDepth = 32 — 32단계보다 깊은 앨리어스 체인 거부maxExpansionBudget = 100 — 총 앨리어스 해석이 100회를 초과하는 문서 거부두 가드 모두 yaml expansion 메시지와 함께 0이 아닌 종료 코드를 반환합니다. tests/test.sh의 4번 테스트가 이를 검증합니다.
실행한 명령: melange keygen → melange build → melange test → apko build → docker load → tests/test.sh
모든 단계는 linux/amd64에서 통과했습니다.
시간이 더 있다면 개선할 점:
test.sh에서 이미지 태그와 tarball 이름을 매개변수화