러스트(Rust) 생태계의 인기 라이브러리인 'arrayref'의 0.3.10 버전에서 심각한 공급망 공격이 발견되었습니다. 이 악성 버전은 'proc-macro1'이라는 타이포스쿼팅(typosquatting) 크레이트를 의존성으로 포함하고 있었으며, 개발자가 해당 버전을 사용하는 프로젝트를 컴파일하는 것만으로도 원격 서버에서 악성 페이로드를 다운로드해 실행하는 것으로 확인되었습니다.
악성 코드는 'arrayref' 자체보다는 'proc-macro1'의 빌드 스크립트에 은닉되어 있었습니다. 특히, 러스트의 패키지 관리 도구인 카고(Cargo)가 코드에서 실제로 사용되지 않는 비선택 의존성까지 빌드하는 동작을 악용했습니다. 공격자는 기존 'arrayref'의 정상 버전(0.3.5~0.3.9)을 'yanked' 처리하여 개발자들이 유일하게 'yanked'되지 않은 악성 0.3.10 버전으로 업데이트하도록 유도했습니다. 이 'arrayref' 크레이트는 'tiny-skia', 'sctk-adwaita', 'winit' 등 다양한 프로젝트의 전이 의존성으로 사용되며, 약 2억 4,500만 회의 다운로드 수를 기록할 정도로 광범위하게 보급되어 있어 잠재적 피해 범위가 넓습니다. 페이로드는 인증서를 검증하지 않는 TLS 연결을 통해 운영체제별 파일을 내려받아 유닉스(/tmp/rust-setup)나 윈도우즈(%TEMP%) 환경에서 은밀하게 실행되었습니다.
이번 사건은 오픈소스 생태계 전반의 소프트웨어 공급망 보안에 대한 경각심을 높이고 있습니다. 개발자들이 무심코 사용하는 라이브러리 하나가 전체 시스템의 보안을 위협할 수 있음을 보여주며, 의존성 관리와 코드 검증의 중요성을 강조합니다. 또한, 패키지 저장소(crates.io)의 보안 대응 체계와 커뮤니티의 협력 방안에 대한 논의도 활발해질 것으로 예상됩니다. 개발자들은 자신의 프로젝트가 악성 버전에 노출되었는지 확인하고, 관련 침해 지표(IP, 파일 경로, SHA256)를 점검하여 즉각적인 조치를 취해야 합니다.