Rust 크레이트가 컴파일 시점에 멀웨어를 실행했습니다. 86분.
2억 6천만 다운로드를 기록한 4개의 매크로 Rust 크레이트가 하나의 의존성을 추가하며, `cargo build`가 사용자의 머신에서 낯선 바이너리를 실행합니다.
2억 6천만 다운로드를 기록한 4개의 매크로 Rust 크레이트가 하나의 의존성을 추가하며, `cargo build`가 사용자의 머신에서 낯선 바이너리를 실행합니다. 2026년 8월 20일: arrayref 0.3.10이 crates.io에 등록되며 proc-macro1(실제 proc-macro2가 아닌)에 의존합니다. proc-macro1의 빌드 스크립트는 페이로드를 다운로드하고 /tmp/rust-setup에 설치한 다음 프로젝트가 컴파일되는 동안 이를 분리된 상태로 실행합니다. 정상 버전은 제거되어 Cargo 자체 경고가 사용자를 오염된 버전으로 안내합니다. 86분 후 삭제됩니다.
이 동영상에서 다루는 내용
- cargo build가 낯선 바이너리를 실행합니다
- 영수증: Rust 블로그, SafeDep, Hacker News
- The Daily Diff, 사후 분석입니다
- 타임라인: 02:11 스테이징 → 07:15 게시됨 → 08:41 삭제됨
- 메커니즘: build.rs, 샌드박스 없음, 제거 유인
번역된 스크립트
원래 영어 내레이션에서 번역되었습니다. 사용 가능한 오디오 및 캡션은 YouTube에서 제어합니다.
cargo build가 낯선 바이너리를 실행합니다
0:00 2억 5천만 다운로드를 기록한 4개의 매크로 Rust 크레이트가 하나를 추가합니다 의존성, 그리고 cargo build는 당신의 머신에서 낯선 바이너리를 실행합니다. 2026년 8월 20일. arrayref 0.3.10이 proc-macro1에 의존하여 crates.io에 등록됩니다. 진짜 proc-macro2가 아니라 한 자리가 다른 proc-macro1입니다. 그리고 그 빌드 스크립트는 당신의 프로젝트가 컴파일되는 동안 페이로드를 실행합니다. Rust의 보안 팀은 86분 후에 이를 삭제합니다.
영수증: Rust 블로그, SafeDep, Hacker News
0:22 SafeDep이 분해를 게시합니다. Hacker News: 554점. 어떻게 이런 일이 발생하고, Cargo가 왜 이를 허용하며, 누가 비난을 받을까요. The Daily Diff, 사후 분석입니다. 새벽 2시, UTC.
The Daily Diff, 사후 분석입니다
0:33 Rust의 절반을 유지 관리하는 David Tolnay와 한 글자 차이인 d-tolney라는 계정이 실제 proc-macro2를 이름을 변경하여 proc-macro1 1.0.106을 게시합니다. 스테이징 중입니다.
타임라인: 02:11 스테이징 → 07:15 게시됨 → 08:41 삭제됨
0:41 스테이징. 07:11. 버전 1.0.107은 빌드 스크립트와 더불어 base64, TLS 및 HTTP 클라이언트를 추가합니다. 토큰 파서용입니다. 07:15. 관리자 계정은 arrayref를 0.3.10으로 다시 게시하고 모든 이전 버전을 제거합니다. Cargo는 '제거되지 않은 버전으로 업데이트하는 것을 고려하세요.'라고 출력합니다. 남아 있는 유일한 버전은 오염된 버전입니다.
1:02 경고는 유인책입니다. 같은 시간, 한 보안 업체가 이를 Rust에 보고합니다. 07:54, RustSec 문제. 08:29, 저장소에 문제가 발생합니다. 공격자는 0.3.11과 두 번째 악성 의존성으로 응답합니다. 08:41, 삭제됩니다. 86분. 왜요? 하나: Cargo는 선언된 모든 의존성을 호출 여부와 관계없이 빌드합니다. 하나의 매니페스트 줄이면 충분합니다.
1:21 둘: 빌드 스크립트는 당신의 코드가 컴파일되기 전에 당신의 SSH 키와 cargo 토큰을 가지고 당신의 머신에서 당신으로 실행됩니다.
메커니즘: build.rs, 샌드박스 없음, 제거 유인
1:26 토큰, 당신의 코드가 컴파일되기 전에. 설계상 샌드박스가 없습니다: 이것이 크레이트가 C 라이브러리를 찾는 방법입니다. 셋: 내부에 실제 proc-macro2가 있으므로 빌드가 성공합니다. 페이로드: 어떤 인증서도 신뢰하는 TLS 클라이언트가 바이너리를 가져와 /tmp/rust-setup에 설치하고 분리된 상태로 실행합니다. Windows에서는 Cargo의 작업 객체에서 벗어나기 위해 wscript를 통해 우회합니다. 소스 주석에 그렇게 나와 있습니다. RustSec 스레드에 따르면 두 번째 단계는 브라우저와 암호화 지갑을 목표로 하는 원격 액세스 도구입니다.
1:52 브라우저와 암호화 지갑. arrayref의 가장 큰 사용자 중 secp256k1과 Solana가 포함되어 있다는 점에서 시적입니다. git blame. Cargo의 모델, 55%: 의존성이 컴파일 시간에 샌드박스 없이 당신의 머신에서 코드를 실행하며, 제거 경고가 사람들을 독에 빠뜨렸습니다. 하나의 계정, 30%: 하나의 자격 증명이
git blame — 분할
2:07 머신에서 코드를 실행하며, 제거 경고는 사람들을 독에 빠뜨렸습니다. 하나의 계정, 30%: 하나의 자격 증명이 2억 5천만 다운로드가 신뢰하는 크레이트를 다시 게시합니다. 숫자 1, 15%: Rust에서 가장 신뢰받는 크레이트에서 한 번의 키 입력, 그리고 아무도 트리를 읽지 않습니다. 피해 범위: 86분 동안 2,285 다운로드. 대부분의 잠금 파일이 0.3.9를 보유하고 있었기 때문에 트래픽의 10% 미만입니다. crates.io는 사용 증거가 없다고 말합니다.
피해 범위: 2,285 다운로드
2:27 RustSec 스레드의 두 사람은 동의하지 않습니다. 한 명은 systemd 서비스를 찾았습니다. Hacker News의 최고 스레드는 멀웨어에 관한 것이 아닙니다. 그것은 0.3.10이 이제 존재하지 않는 크레이트 페이지입니다. 판결, 사후 분석: NEEDS REVIEW. 삭제까지 86분, 당일 블로그 게시물, 계정 잠김: 그 부분은 SHIP IT입니다. 하지만 크레이트 페이지는 아무 일도 없었음을 보여주고, 캐시된 사본에서는 cargo audit이 침묵하며,
판결 + 월요일 라인
2:48 그리고 빌드 스크립트는 여전히 당신으로 실행됩니다. 월요일: Rust 블로그의 찾기 명령을 실행하고 제거 경고를 지시가 아닌 질문으로 취급하세요. 아직 이야기할 수 없는 사건을 저에게 보내주세요, 댓글로, 또는 the daily diff dot dev로. 그리고 오늘의 차이점입니다. Axrisi의 Niko입니다. 책임감 있게 병합하세요.
출처
- Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
- RUSTSEC-2026-0260 (arrayref)github.com
- RustSec issue #3161 (the original report, IOCs, victims)github.com
- SafeDep technical analysissafedep.io
- GitHub issue on the repo (0.3.11 spotted)github.com
- crates.iocrates.io
- Hacker News (554 points)news.ycombinator.com
- BleepingComputerwww.bleepingcomputer.com



