2019년 4월 25일, 도커는 단일 도커 허브 데이터베이스에 대한 무단 접근을 발견했다. 약 19만 계정의 데이터 — 허브 사용자의 5%에 약간 못 미치는 규모 — 가 노출되었을 수 있었다: 사용자 이름, bcrypt 비밀번호 해시, 그리고 도커의 자동 빌드 기능을 구동하던 GitHub 및 Bitbucket 접근 토큰이었다. 도커는 이틀 뒤 이메일 통지와 지원 담당 이사 켄트 램의 지원 공지사를 통해 이를 공개했다.

토큰 노출은 비밀번호보다 훨씬 더 중요했다. ZDNet은 대부분의 도커 허브 사용자가 대기업 내부 직원으로서 프로덕션에 배포되는 컨테이너 이미지를 자동 빌드한다고 지적했다. 그 토큰을 가진 사람은 누구든 비공개 소스 저장소에 접근하거나, 더 나쁘게는 프로덕션 소프트웨어를 빌드하는 Dockerfile을 조용히 수정할 수 있었다. 도커 자체는 침입자가 무언가를 다운로드했는지 말할 수 없었고 — 단지 접근이 '노출되었을 수 있다'고만 밝혔다.

도커의 대응은 유일하게 안전한 것이었고, 설계상 혼란을 초래했다: 노출된 비밀번호를 재설정하고, 영향을 받은 모든 GitHub 및 Bitbucket 토큰을 폐기하고, 저장소 연결을 해제했다. 사용자들은 저장소를 다시 연결하고 GitHub 및 Bitbucket 보안 로그에서 오용 징후를 감사해야 했다. 도커 자체 포럼에서 사용자들은 폐기된 통합이 요동치면서 GitHub 저장소에 예상치 못한 'Docker Cloud Build' 배포 키가 나타났다고 보고했고, 자신의 계정이 정말로 그 19만 개에 포함되었는지 어떻게 알 수 있는지 물었지만 헛수고였다.

도커는 침입자를 공개적으로 밝히지 않았고 어떤 유출도 확인하지 않았다. 공식 이미지는 영향을 받지 않았으며 무결성을 보장하기 위해 추가 보안 조치를 도입했다고 밝혔다. 지속적인 피해는 신뢰에 있었다: 컨테이너 생태계가 배관으로 여기는 레지스트리가, 그곳의 침해가 공격자에게 고객의 로그인뿐 아니라 소스 코드의 열쇠를 넘겨준다는 것을 보여주었다.

영향을 받은 모든 비밀번호 재설정; 모든 자동 빌드의 GitHub/Bitbucket 토큰 폐기 및 저장소 연결 해제 — 각 소유자가 다시 연결할 때까지 빌드는 망가진 채로 남았다

GitHub와 Bitbucket에 대한 장기 유효 OAuth 토큰이 하나의 운영 허브 데이터베이스에 있었기에, 단일 침입이 고객의 로그인뿐 아니라 코드 파이프라인을 노출시켰다.

도커 허브는 전체 컨테이너 생태계의 사실상 공개 레지스트리가 되었기에, 그 영향 범위는 한 벤더의 것이 아니라 업계의 것이었다.

도커는 데이터가 다운로드되었는지 확인할 수 없었고, 약 19만 개의 보안 팀이 최악을 가정하고 저장소를 수동으로 감사해야 했다.

노출된 계정은 평범한 사용자가 아니라 기업 자동 빌드 운영자였기에, 이 자격 증명 노출은 일상적인 비밀번호 재설정이 아니라 실제 공급망 위험이 되었다.

모두가 인프라로 여기는 레지스트리는 상위 자격 증명의 저장소이기도 하다. 하나의 운영 데이터베이스에 있던 장기 유효 소스 제어 토큰이 짧은 침입을 업계 전체의 감사로 바꾸어 놓았다.

도커는 영향을 받은 비밀번호를 재설정하고, 자동 빌드 토큰을 폐기하고 저장소 연결을 해제했으며, 고객에게 GitHub 및 Bitbucket 로그에서 예상치 못한 접근이 있는지 확인하라고 당부했다. 공식 이미지는 손대지 않은 것으로 선언되었고 추가 무결성 조치가 더해졌다. 유출은 결코 확인되지 않았고 공격자도 공개적으로 지목되지 않았다. 이 사건은 CI에서 소스 제어로 이어지는 자격 증명을 단기 유효하고 좁은 범위로 유지하라는 공급망 보안 조언에서 상시 인용되는 사례가 되었다.

근거 확인하기

출처

  1. Docker Hub hack exposed data of 190,000 users ZDNet · zdnet.com ·
  2. Docker Hub Breach Hits 190,000 Accounts SecurityWeek · securityweek.com ·
  3. Docker Hub Security Breach details, signs/hints Docker Community Forums · forums.docker.com ·