Baseten GitHub PAT 노출: 공개 Harbor 이미지를 통한 접근 – Strix가 25분 만에 관리자 권한을 발견한 방법
TL;DR
2026년 7월, 자율 해킹 에이전트 Strix는 Baseten의 Harbor 레지스트리에서 공개된 Docker 이미지에 포함된 GitHub 개인 액세스 토큰(PAT)을 발견했다. 이 토큰은 2023년 3월에 생성되었으며, Baseten의 메인 제품 저장소, GitOps 저장소, Homebrew 탭 및 여러 사내 고객 저장소에 관리자 및 푸시 권한을 부여했다. 발견 후 즉시 공개되었고, 토큰은 교체되었으며, 공개 레지스트리 프로젝트는 24시간 이내에 비공개 처리되었다.
취약점 발견 과정
Strix는 *.baseten.co 도메인에 대해 블랙박스 조사를 수행하여 공개된 Harbor 레지스트리(gcp-us-east4-zlw.registry.baseten.co)를 식별하고, 익명으로 baseten/baseten-app 이미지를 다운로드했다. 이미지 매니페스트와 레이어를 추출한 후 Strix는 다음과 같은 절차를 수행했다:
- 이미지의 파일 시스템과 구성에 대해 TruffleHog를 실행.
- Docker 빌드 이력(
history[].created_by)에 저장된 GitHub PAT를 탐지. GET /user요청을 통해 토큰이 여전히 유효한지 확인했으며, 응답으로basetenbot계정이 반환되었다.
"Docker 빌드 이력에 포함된 토큰, 그리고 GitHub에서 이 토큰을 basetenbot으로 식별한 점. 자격 증명은 마스킹됨." – Strix 블로그 포스트
유출된 토큰의 범위
GitHub는 토큰의 OAuth 범위를 repo로 보고하여 전체 저장소 접근 권한을 의미했다. Strix는 토큰으로 접근 가능한 저장소를 조사하여 다음과 같은 결과를 도출했다:
| 저장소 (가명 처리) | 부여된 권한 |
|---|---|
basetenlabs/b*** (제품) |
admin: true, push: true |
basetenlabs/f*** (GitOps) |
admin: true, push: true |
basetenlabs/h*** (CLI) |
admin: true, push: true |
| 추가 사내 저장소 | 읽기/쓰기 |
이 권한은 공격자가 다음과 같은 행위를 가능하게 했다:
- 추론 플랫폼의 소스 코드를 수정.
- 프로덕션 클러스터를 제어하는 GitOps 매니페스트를 변경.
- CLI 배포 채널에 악성 바이너리 삽입.
- 잠재적으로 민감한 데이터를 포함한 고객 전용 저장소에 접근.
근본 원인: 빌드 자격 증명 유출
이 토큰은 2023년 3월 3일에 수행된 Docker 빌드 단계에서 생성되었으며, 빌드 인자로 GitHub 토큰을 주입하는 방식이었다:
ARG GITHUB_TOKEN
RUN GITHUB_TOKEN=${GITHUB_TOKEN} bash -c '\
if [[ "${GITHUB_TOKEN}" != "" ]]; then \
git config --global --add \
url."https://${GITHUB_TOKEN}@github.com/".insteadOf "git@github.com:"; \
fi'
Docker는 이미지의 빌드 이력에 정확한 명령줄을 기록하여, 원치 않는 방식으로 원본 토큰을 지속적으로 보관하게 되었다. 이로 인한 핵심 문제는 다음과 같다:
- 비밀 정보를 빌드 인자로 사용 – Docker는 값이 메타데이터에 저장된다.
- Git 구성에 토큰을 지속적으로 보관 – 빌드 인자가 나중에 제거되어도 자격 증명은 이미지에 남아 있다.
권장 대응 조치
- 비밀 정보를 빌드 인자로 전달하지 마십시오. 이미지 메타데이터에 나타나지 않는 일시적인 자격 증명을 제공하기 위해 Docker BuildKit의 시크릿 마운트(
--secret id=github,src=...)를 사용하세요. docker history --no-trunc를 사용하거나 구성 블롭을 다운로드하여history[].created_by를 확인함으로써 이미지 이력을 검사하세요.- 유출된 토큰은 즉시 교체하고, 모든 저장소에 대해 권한 없는 변경 사항을 감사하세요.
- 최소 권한 원칙을 적용하세요: 빌드 토큰은 필요한 특정 사내 종속성에만 읽기 권한을 부여하고, 짧은 만료 기간을 설정하세요.
- 내부 이미지를 호스팅하는 컨테이너 레지스트리를 비공개 처리하세요. 의도적으로 공개하지 않는 한 공개하지 마세요.
공개 일정 및 대응
| 날짜 및 시간 | 조치 |
|---|---|
| 2026년 7월 13일 오후 11:10 | Strix 보고서 제출 – 실시간 basetenbot 토큰, 공개 Harbor 프로젝트, 저장소 권한 |
| 2026년 7월 14일 오전 | Baseten이 Harbor 프로젝트를 비공개 처리 |
| 2026년 7월 14일 오후 4:34 | Baseten 보안 팀이 심각도를 확인하고 토큰을 교체, 이미지 삭제 요청 |
| 2026년 7월 14일 오후 5:05 | 보고자가 삭제를 확인하고, 두 가지 낮은 위험도 발견 추가 |
| 2026년 7월 17일 | 잔여 발견 사항 닫기 |
| 2026년 9월 | 공개 공지 준비 및 승인 |
Baseten 보안 팀은 빠르게 대응하여 토큰을 교체하고 레지스트리를 몇 시간 내에 비공개 처리했으며, 감사 선물까지 전달했다.
"Strix가 책임감 있게 취약점을 공개해 주어 감사합니다. 우리는 즉시 유출된 키를 무효화하고 공개된 컨테이너 이미지를 제거했습니다. 우리의 로그는 이 취약점이 실제로 악용되지 않았으며, 고객 데이터가 유출되지 않았음을 확인합니다." – Baseten 보안 대표 (HN 댓글)
커뮤니티 반응
- 긍정적 평가 – 여러 사용자가 빠른 대응과 자율 테스팅의 가치를 칭찬했다.
- 윤리적 우려 – 일부 사용자는 보안 벤더가 명시적인 사전 동의 없이 잠재적 벤더에 대해 자율 에이전트를 실행하는 것이 적절한지에 대해 의문을 제기했으며, 법적 회색 지대가 존재할 수 있다고 지적했다.
- 기술적 관찰 – 다른 사용자는 전통적인 펜테스트 도구로도 이 문제를 발견할 수 있었지만, AI 기반 에이전트의 속도와 자동화 장점을 강조했다.
운영자들을 위한 교훈
- 컨테이너 이미지를 장기적인 공격 표면으로 간주하라 – 오래된 이미지에도 여전히 활성화된 비밀이 포함될 수 있다.
- 파일 시스템 레이어와 빌드 메타데이터 모두에서 비밀 스캔을 자동화하라.
- CI/CD 파이프라인과 컨테이너 빌드에 대해 단기 유효, 범위 제한된 토큰을 사용하라.
- 자율 보안 에이전트(예: Strix)를 정기적으로 자신의 도메인에 대해 실행하여 공격자가 발견하기 전에 숨겨진 노출을 발견하라.
- GitHub 기반 빌드 또는 공개 컨테이너 레지스트리를 사용하는 경우, 오늘 당장 기존 이미지를 감사하세요. 유출된 토큰의 비용은 이를 방지하기 위한 노력보다 수배 이상일 수 있습니다.*
Sources
관련
- Dispatch
- Dispatch
- 프로젝트
- Dispatch
- Dispatch