에이전트 코딩 · 2026년 8월 21일 ★★★★

러스트 crate arrayref 가 탈취돼 악성 버전이 86분 올라와 있었어요 — cargo build 한 번에 도는 build.rs 가 크롬·브레이브·엣지 저장 비밀번호를 노렸어요

누적 2억 4,500만 번 받아 간 러스트 crate arrayref 의 관리자 계정이 털려, 8월 20일 07:15 UTC 에 악성 0.3.10 이 올라왔다가 86분 만에 지워졌어요(같은 관리자의 internment 0.8.7 은 90분, append-only-vec 0.1.9 는 107분이었고, 공격자는 멀쩡한 최신 버전들을 yank 해서 새 버전으로 몰았어요). 이 0.3.10 은 David Tolnay 의 proc-macro2 를 흉내 내며 저자 이름까지 도용한 proc-macro1 을 의존성으로 달았고, 그 crate 의 build.rs 가 23.254.165.112 에서 리눅스·윈도우·맥용 실행 파일을 받아 돌려 크롬·브레이브·엣지가 저장해 둔 로그인 정보와 컴퓨터 정보를 빼 갔어요. 러스트 보안 대응팀은 문제 버전을 yank 가 아니라 아예 삭제하고 계정을 잠갔고, 지금 crates.io 의 arrayref 최신은 2024년 9월에 나온 0.3.9 예요.

용어 풀이
crate
러스트의 패키지 단위. 공식 저장소가 crates.io.
build.rs
크레이트를 컴파일하기 전에 자동 실행되는 러스트 빌드 스크립트. 제한 없이 아무 코드나 돌 수 있음.
proc-macro
절차적 매크로. 컴파일 도중 코드를 만들어 내며, 만드는 코드 자체가 컴파일러 안에서 실제로 실행됨.
yank
패키지 저장소에서 특정 버전을 새로 고르지 못하게 막는 조치. 파일은 남아 있어 기존 잠금 파일은 계속 받을 수 있음.
CI
지속적 통합(Continuous Integration). 코드를 올릴 때마다 자동으로 빌드·테스트를 돌리는 서버.
운영자 인사이트

받아 놨는지부터 확인해요 — find ~/.cargo/registry/cache -name 'arrayref-0.3.10.crate'. 걸렸으면 브라우저 저장 비밀번호는 물론 CI 토큰·서명키까지 갈아야 해요. 러스트는 build.rs·proc-macro 가 cargo build 한 번에 돌아서 '코드에서 아직 안 쓰니 괜찮다'가 통하지 않아요 — 에이전트가 crate 를 알아서 붙이게 두고 있다면, 새로 생기는 build.rs 만큼은 사람이 보고 넘기게 막아 두세요.

여러 관점으로 보기
  • 러스트 공식 대응 악성 버전 셋을 yank 가 아니라 삭제하고 계정을 잠갔어요. 내 캐시에 그게 있는지 훑는 find 명령을 공식으로 알려 줘요. Rust Blog
  • 무엇을 훔쳤나 크롬·브레이브·엣지가 저장한 로그인 정보와 컴퓨터 정보를 노렸고, 물렸다면 CI 토큰·서명키까지 갈라고 권해요. BleepingComputer
  • 해커뉴스 반론 'build.rs 만 막아 봤자 테스트에서 도는 코드로 옮겨 갈 뿐'이라는 반론에, 그래도 빌드 때는 CI 시크릿이 손에 잡힌다는 재반박이 붙었어요. Hacker News
  • cargo 쪽 대책 진행 상황 새로 나온 버전을 며칠 묵혔다 쓰는 global-min-publish-age = "7 days" 는 아직 나이틀리고, 안정화 PR 이 최종 의견 수렴 단계예요. GitHub

원본 보기 (hn:top-stories)