Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dasel-melange-apko — dasel v3.3.1이 Melange와 함께 패키징되어 최소한의 apko 이미지로 제공되며, CVE-2026-33320에 대한 패치가 적용되었습니다. | Kitploit
도구/GitHubGitHub/rotavori/dasel-melange-apko
General Purpose UtilitiesContainer SecurityVulnerability AnalysisScripting & AutomationDevSecOpsSupply Chain Security
GitHubrotavori/dasel-melange-apko

dasel-melange-apko

dasel v3.3.1이 Melange와 함께 패키징되어 최소한의 apko 이미지로 제공되며, CVE-2026-33320에 대한 패치가 적용되었습니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

dasel v3.3.1 — Melange + apko 빌드, CVE-2026-33320 패치 적용

이 저장소는 dasel CLI (v3.3.1)를 Melange로 APK 패키지화하고, apko로 최소 컨테이너 이미지를 빌드하며, CVE-2026-33320에 대한 수정을 v3.3.1 코드베이스에 적용합니다 (패치, 버전 업그레이드 아님).

결과물은 정적 dasel 바이너리만 포함하는 약 4MB 이미지입니다. 쉘, 패키지 관리자, libc가 없으며, 비-root 사용자로 실행됩니다.

저장소 구조

melange/
  dasel.yaml              # melange 레시피: v3.3.1 가져오기, 패치 적용, .apk 빌드
apko/
  dasel.yaml              # apko 레시피: 로컬 .apk로 최소 이미지 조립
patches/
  cve-2026-33320.patch    # CVE 수정 (upstream 282943b를 v3.3.1에 최소 백포트)
  NOTES.md                # CVE 설명, 심각도, 수정 방식
tests/
  test.sh                 # 빌드된 IMAGE를 실행하고 실제 동작 + CVE 수정 확인
README.md

사전 요구사항

  • Linux 또는 WSL2 Ubuntu (Windows 10의 WSL2에서 개발).
  • Docker — Melange의 빌드 샌드박스 러너 및 최종 이미지 로드/실행에 사용.
  • melange 및 apko 가 PATH에 있어야 함.

개발 중 사용된 버전:

도구버전
melange0.50.8
apko1.2.14
Docker29.5.2

아래 모든 명령은 저장소 루트에서 실행됩니다.

빌드 및 테스트 — 정확한 명령

1. 서명 키 생성 (최초 1회)

melange keygen

melange.rsa (개인) 및 melange.rsa.pub (공개) 생성. 둘 다 .gitignore에 포함되어 있습니다. 키는 빌드를 재현하는 사람이 다시 생성하며, 절대 커밋되지 않습니다.

2. 패키지 빌드

melange build melange/dasel.yaml \
  --source-dir patches \
  --signing-key melange.rsa \
  --arch x86_64 \
  --runner docker

--source-dir patches는 빌드 샌드박스 내에서 patches/cve-2026-33320.patch를 사용할 수 있게 하며, 레시피의 patch 단계에서 적용됩니다. 출력: packages/x86_64/dasel-3.3.1-r0.apk (서명됨) 및 packages/x86_64/APKINDEX.tar.gz.

3. 패키지 테스트

melange test는 새로 빌드된 .apk를 깨끗한 환경에 설치하고 레시피의 test: 블록을 실행합니다. Wolfi 저장소 ( busybox 용) 및 로컬 packages/ 저장소 ( dasel 용)가 필요하며, 각각의 서명 키가 필요합니다:

melange test melange/dasel.yaml dasel \
  --arch x86_64 --runner docker \
  --repository-append https://packages.wolfi.dev/os \
  --keyring-append https://packages.wolfi.dev/os/wolfi-signing.rsa.pub \
  --repository-append "$(pwd)/packages" \
  --keyring-append melange.rsa.pub

확인 사항: dasel version이 3.3.1을 출력; 실제 JSON 쿼리; JSON→YAML 변환; 그리고 수십억 번의 laughs YAML 폭탄이 확장 가드에 의해 거부됨 (CVE-2026-33320 수정).

4. 이미지 빌드

apko build apko/dasel.yaml dasel:test dasel.tar --arch x86_64
docker load < dasel.tar

출력: dasel.tar (로드 가능한 OCI 이미지) 및 SBOM (SPDX JSON). apko는 태그에 아키텍처를 추가하므로 로드된 이미지는 dasel:test-amd64 입니다.

로컬 빌드 패키지를 이미지가 어떻게 소비하는지 (핵심 제약). apko/dasel.yaml은 ./packages를 저장소로, ./melange.rsa.pub을 키링으로 지정합니다. 따라서 apko는 melange build가 packages/x86_64/에 기록한 정확한 dasel APK를 설치하며, 자체 서명 키로 검증합니다—사전 빌드된 업스트림 패키지가 아닙니다. (저장소 루트에서 apko build를 실행하여 상대 경로가 해석되도록 하십시오.) 이것이 패키지 빌드와 이미지 빌드를 연결합니다.

5. 이미지 테스트 실행

./tests/test.sh

docker run을 통해 이미지를 실행하고 5가지 확인 사항을 검증: dasel이 존재하고 v3.3.1을 출력; 중첩 JSON 쿼리; JSON→YAML 변환; 배열 인덱스 쿼리; YAML 폭탄 거부. 스크립트는 실패 시 0이 아닌 종료 코드를 반환합니다 (CI 게이트 역할). IMAGE=<tag> ./tests/test.sh로 태그를 재정의할 수 있습니다.

CVE-2026-33320 수정

CVE-2026-33320은 dasel의 YAML 리더에서 서비스 거부 (CWE-674, 제어되지 않은 재귀)입니다: 무제한 YAML 별칭 확장을 통한 "billion laughs" 공격. dasel은 자체 UnmarshalYAML을 구현하고 제한 없이 재귀적으로 별칭 노드를 해석하여 기본 라이브러리의 내장 보호를 우회했습니다.

우리는 v3.3.1 소스에 업스트림 수정(커밋 282943b, v3.3.2에 포함) 만을 patches/cve-2026-33320.patch로 백포트합니다. 이는 깊이 제한 (32) 및 공유 예산 (1000) 으로 확장을 제한하며, 무제한 확장 대신 오류를 반환합니다. v3.3.2에 함께 포함된 관련 없는 버그 수정은 의도적으로 제외하여 변경을 최소화하고 감사 가능하게 유지합니다. 자세한 내용은 patches/NOTES.md를 참조하십시오.

설계 결정

  • 고정된 소스. git-checkout은 expected-commit을 v3.3.1 커밋 SHA로 고정하므로, 태그가 다른 코드를 가리키도록 변경되면 빌드가 실패합니다 (공급망 안전).
  • 최소 패치. CVE 수정만 적용되었으며, 그 외에는 아무것도 적용되지 않아 감사 가능합니다.
  • 정적 바이너리. CGO_ENABLED=0로 빌드되어 (레시피의 빌드 환경에서 설정) cgo 또는 공유 라이브러리 의존성이 없는 바이너리가 생성되며, 이 덕분에 이미지에 libc/쉘/패키지 관리자가 포함되지 않습니다.
  • 최소 이미지. apko의 packages: 목록에는 dasel만 있습니다. 이미지는 로컬에서 빌드된 패키지만 설치하며, melange.rsa.pub으로 검증됩니다.
  • 비-root. 이미지는 uid 65532 (nonroot)로 실행되어 심층 방어를 제공합니다.
  • 서명. 패키지와 패키지 인덱스 모두 서명됩니다. apko는 서명을 검증합니다.

가정

  • x86_64 전용 빌드 (개발 머신의 아키텍처).
  • Melange의 러너로 docker 사용 (기본 Linux에서는 bubblewrap도 가능).
  • 이미지에는 base-layout 패키지가 없음 (따라서 /etc/os-release 없음). 이미지에서 필요로 하지 않습니다. 이는 의도적인 최소성 선택이며, wolfi-baselayout을 추가하여 쉽게 되돌릴 수 있습니다.
  • 빌드는 고정된 스냅샷이 아닌 Wolfi의 롤링 go 및 busybox를 가져오므로, Wolfi가 Go ≥ 1.25 (dasel의 go.mod 요구사항)을 계속 제공한다고 가정합니다. dasel 소스는 커밋으로 고정되었습니다. 빌드 툴체인도 고정하면 빌드가 완전히 밀폐됩니다 (아래 참조).

더 시간이 있었다면 개선할 점

  • 업스트림의 정확한 경계 단위 테스트 (깊이 32 vs 33, 예산 1000 vs 1001, 다중 문서 예산 재설정)를 포팅하여 블랙박스 예산/깊이 폭탄 테스트보다 세밀한 커버리지 확보.
  • 빌드 툴체인 고정 (특정 Wolfi go/busybox 스냅샷) 및 고정된 빌드 날짜로 완전 밀폐형, 비트별 재현 가능 빌드 (소스는 이미 커밋 고정됨).
  • ARM 머신을 위한 멀티 아키텍처 빌드 (aarch64).
  • cosign을 사용한 이미지 서명 및 melange/apko 릴리스 바이너리 서명 검증.
  • 모든 푸시 시 재빌드 및 두 테스트 스위트를 실행하는 CI 워크플로우 (GitHub Actions).

제출 노트

  • 위의 모든 명령은 WSL2 Ubuntu + Docker Desktop에서 실행 및 통과되었습니다.
  • melange build + melange test: 패키지 빌드, 패치가 깨끗하게 적용됨 (7개의 헝크 — 1개는 parsing/yaml/yaml.go, 6개는 parsing/yaml/yaml_reader.go), CVE 폭탄 테스트를 포함한 모든 패키지 테스트 통과.
  • apko build + tests/test.sh: 이미지 빌드 (~4MB 콘텐츠), 5가지 이미지 테스트 모두 통과.
  • 위의 "더 시간이 있었다면 개선할 점" 섹션은 더 시간이 있을 때 취할 다음 단계를 나열합니다.
도구 다운로드