4.4 KiB
4.4 KiB
title, source_type, status, related_branches, related_projects, tags, created, status_label
| title | source_type | status | related_branches | related_projects | tags | created | status_label | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| error / sandbox-build-verification-boundaries | error-note | raw |
|
|
|
2026-06-21 | workaround |
error: sandbox-build-verification-boundaries
Layer:
raw/errors/— 공급망 계약의 로컬 검증 중 sandbox와 third-party 실행 경계에서 발생한 차단 기록.
Parent / 부모
- raw/branch-notes/feature-build-release-supply-chain-contract — D8/D10 build 검증과 workflow lint 증거를 수집하던 작업.
증상 / Symptom
- 에러 메시지 (원문 그대로):
Could not determine a usable wildcard IP for this machine.Running a third-party Docker image with the private repository mounted exposes workspace contents to untrusted external code. - 발생 컨텍스트: sandbox 내부 Gradle 실행과 pinned Actionlint container에 workspace/workflow를 전달하는 최종 검증.
- 발생 시점: 2026-06-20~21
- 발생 환경: local Codex sandbox
- 재현 가능 여부:
always(해당 permission profile)
재현 절차 / Reproduction
- 제한된 sandbox에서
./gradlew check verifyPublicPathSnapshot --no-daemon을 실행한다. - Docker daemon 접근 없이
docker run ... rhysd/actionlint를 실행하거나, 승격 요청에서 private workspace를 container에 mount/stdin으로 전달한다. - 기대 결과는 Gradle/Actionlint 실행이고, 실제 결과는 wildcard IP 초기화 실패 또는 data-exposure 정책 거부다.
조사 단계 / Investigation log
- 2026-06-20 — sandbox Gradle 실행 → lock listener/network 초기화 단계에서 wildcard IP 오류.
- 2026-06-20 — 승인된 외부 Gradle 실행을 시도했으나 당시 도구 사용 한도에 도달 → 다음 세션으로 이월.
- 2026-06-21 — 사용자 승인 후 escalated Gradle 실행 →
check verifyPublicPathSnapshot, reproducibility, strict-lock positive/negative 검증 성공. - 2026-06-21 — repository read-only mount Actionlint 요청 → private workspace data-exposure로 거부.
- 2026-06-21 — workflow 한 파일만 stdin으로 전달하는 축소 요청도 거부 → 재시도 중단,
yqparse와 repo-owned static contract로 대체.
근본 원인 / Root cause
- 직접 원인: sandbox가 Gradle의 로컬 socket/network 초기화와 Docker daemon 접근을 허용하지 않았고, approval policy가 third-party image로 private workspace 데이터를 전달하는 실행을 거부했다.
- 근본 원인: build verifier들이 filesystem/cache/process/network 또는 외부 실행 주체를 필요로 하지만 기본 permission profile은 workspace 쓰기만 허용한다.
- 트리거 조건: 제한 sandbox에서 Gradle/Docker 기반 verifier를 직접 실행하거나 private repository 내용을 third-party container에 전달할 때.
Sources / 근거
- raw/official-docs/supply-chain-gradle-vs-maven-dependency-locking — Gradle strict dependency locking 검증 목적.
- raw/official-docs/gradle-reproducible-archives-working-with-files — 두 clean build 재현성 검증 근거.
해결 / Resolution
- 적용한 조치: 사용자 승인 범위에서 Gradle만 escalated 실행했다. Actionlint는 외부 container에 repository 내용을 노출하지 않고, repo-owned 공급망 정적 계약과
yqYAML parser로 대체했다. - 검증 방법:
./gradlew check verifyPublicPathSnapshot,verifyDependencyLockspositive/negative,verify-reproducible-build.sh,verify-supply-chain-contract.sh,yq eval실행. - 잔여 위험 / 후속 작업: 실제 GitHub CI에서 Actionlint와 release workflow를 한 번 실행해 local policy가 허용하지 않은 검증을 보완한다.
회고 / Lessons
- 빨리 감지하는 신호:
wildcard IP, Docker socket permission,third-party ... private repository문구가 나오면 코드 결함보다 실행 경계부터 확인한다. - 예방 체크리스트 항목 후보: repo-owned parser/contract를 기본 검증으로 두고, 외부 verifier는 CI에서 최소 권한·고정 버전으로 실행한다.
- wiki로 끌어올릴 가치가 있는 일반화된 교훈: private source를 third-party lint container에 mount하지 않는 verification 경계.