지난 2026년 8월 20일, Rust 개발 생태계에서 중요한 공급망 공격이 확인되었습니다. 'arrayref', 'internment', 'append-only-vec' 등 널리 사용되는 여러 크레이트(crate, Rust의 라이브러리 단위)가 'proc-macro1'이라는 악성 크레이트에 의존하도록 변조된 것입니다. 이 악성 크레이트의 빌드 스크립트는 시스템에 악성 페이로드를 다운로드하도록 설계되어, 이를 설치한 개발자들의 잠재적 피해가 우려됩니다.
Rust 보안 대응팀(Rust Security Response Team)은 신고 접수 후 신속하게 조사에 착수, 'proc-macro1'과 유사한 'proc-macro-en', 'aovine' 등 관련 악성 크레이트들을 즉시 삭제했습니다. 또한, 악성 버전의 'arrayref@0.3.10', 'internment@0.8.7', 'append-only-vec@0.1.9'도 삭제하고, 악의적으로 게시 철회(yank)되었던 정상 버전을 복구했습니다. 이번 공격은 크레이트 작성자의 컴퓨터나 자격 증명이 탈취되었을 가능성이 높은 것으로 보고 있으며, 예방 조치로 해당 계정을 잠금 처리했습니다. 악성 버전들은 crates.io에 짧게는 86분, 길게는 107분 동안 공개되어 있었던 것으로 파악됩니다.
이번 사건은 Rust 생태계의 의존성 관리와 공급망 보안에 대한 근본적인 질문을 던지고 있습니다. Rust는 강력한 타입 시스템과 메모리 안전성으로 주목받지만, 수많은 전이 의존성(transitive dependencies)을 가진 크레이트 생태계는 잠재적인 보안 취약점이 될 수 있습니다. 많은 개발자들이 Go 언어의 방대한 표준 라이브러리처럼 Rust에도 '공인된(blessed)' 크레이트 목록이나 확장된 표준 라이브러리가 필요하다는 의견을 제시하고 있습니다.
현재 Rust 팀은 'min-publish-age'와 같은 게시 대기 기간 도입, 'cargo vet'을 통한 의존성 감사, 빌드 스크립트와 절차적 매크로(proc-macro)를 WebAssembly 샌드박스에서 실행하는 방안 등 다양한 완화책을 모색 중입니다. 하지만 LLVM과 rustc 컴파일러 자체가 악의적인 코드를 안전하게 빌드하도록 설계되지 않았다는 점을 고려할 때, 궁극적으로는 전체 빌드 과정을 샌드박스(sandbox) 환경에서 격리하는 것이 가장 강력한 방어책이 될 수 있습니다. 개발자들은 ~/.cargo/registry/cache 경로를 확인하여 악성 크레이트 다운로드 여부를 점검하고, 'cargo audit'이나 'cargo deny' 같은 도구를 활용하여 의존성 보안을 강화해야 합니다.