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는 다음과 같은 절차를 수행했다:

  1. 이미지의 파일 시스템과 구성에 대해 TruffleHog를 실행.
  2. Docker 빌드 이력(history[].created_by)에 저장된 GitHub PAT를 탐지.
  3. 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 구성에 토큰을 지속적으로 보관 – 빌드 인자가 나중에 제거되어도 자격 증명은 이미지에 남아 있다.

권장 대응 조치

  1. 비밀 정보를 빌드 인자로 전달하지 마십시오. 이미지 메타데이터에 나타나지 않는 일시적인 자격 증명을 제공하기 위해 Docker BuildKit의 시크릿 마운트(--secret id=github,src=...)를 사용하세요.
  2. docker history --no-trunc를 사용하거나 구성 블롭을 다운로드하여 history[].created_by를 확인함으로써 이미지 이력을 검사하세요.
  3. 유출된 토큰은 즉시 교체하고, 모든 저장소에 대해 권한 없는 변경 사항을 감사하세요.
  4. 최소 권한 원칙을 적용하세요: 빌드 토큰은 필요한 특정 사내 종속성에만 읽기 권한을 부여하고, 짧은 만료 기간을 설정하세요.
  5. 내부 이미지를 호스팅하는 컨테이너 레지스트리를 비공개 처리하세요. 의도적으로 공개하지 않는 한 공개하지 마세요.

공개 일정 및 대응

날짜 및 시간 조치
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