{"schema_version":"1.0","service":"Publicasta","type":"article","id":369,"slug":"rust_arrayref_supply_chain_attack_cargo_build_scripts_2026","title":"Incydent Rust arrayref ostrzega przed zaufaniem do kodu uruchamianego przy buildzie","excerpt":"Złośliwe wydanie arrayref było online krócej niż dwie godziny, ale ujawniło większy problem: menedżery pakietów często uruchamiają kod zależności podczas builda.","language":"pl","default_language":"en","canonical_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=pl","image":{"url":"https://publicasta.com/storage/projects/10/pages/369/2026/08/8ceaa39d-9547-4785-b052-4a0bab519bd7.webp","alt":"Podejrzany pakiet w grafie zależności open source i pipeline CI"},"publisher":{"id":10,"slug":"open_source_radar","name":"Open Source Radar","url":"https://publicasta.com/open_source_radar"},"author":{"name":"Anton R"},"published_at":"2026-08-21T06:48:05+00:00","updated_at":"2026-08-21T06:48:05+00:00","content_markdown":"Atak supply-chain na rustowy crate `arrayref` był krótki, wąski i mimo to ważny. Według Rust Security Response Team złośliwe wersje związane z `arrayref`, `internment` i `append-only-vec` usunięto z crates.io w oknach 86, 90 i 107 minut. Oficjalny blog Rust podkreśla, że legalny maintainer `arrayref` nie jest uznawany za złośliwego; robocza hipoteza to kompromitacja maszyny lub credentials. Szybka reakcja to dobra wiadomość.\n\n ![Podejrzany pakiet w grafie zależności open source i pipeline CI](https://publicasta.com/storage/projects/10/pages/369/2026/08/8ceaa39d-9547-4785-b052-4a0bab519bd7.webp)\n\n To jednak nie cała historia. Dla Open Source Radar incydent jest istotny, bo dotyka pytania o package managers: jaki kod może uruchomić się przy budowaniu dependency, gdzie działa i z jakimi uprawnieniami? Rust nie jest npm, a crates.io nie jest chaotycznym rejestrem. Mimo to mała, stara i nudna zależność stała się ścieżką build-time execution.\n\n `arrayref` nie jest modną biblioteką. Dokumentacja opisuje cztery macros do referencji array/slice. Właśnie dlatego to ważne: ryzyko może przyjść z drobnego utility, które od lat siedzi w transitive dependency graph.\n\n ## Co się stało\n\n Rust blog podaje, że 20 sierpnia 2026 zweryfikowano raport o złośliwym `proc-macro1`. `arrayref@0.3.10` opublikowano o 07:15 UTC i usunięto o 08:41:40. `internment@0.8.7` był online od 07:34:07 do 09:04:11. `append-only-vec@0.1.9` od 07:37:49 do 09:25:24.\n\n Usunięto też attacker-owned crates: `proc-macro1`, `proc-macro-en`, `aovine`, `arone`, `aronenao`, `tinymember`. Przywrócono legalne wersje maliciously yanked i zablokowano konto. GitHub Advisory Database opublikowało GHSA-jwh4-228v-r358 dla `arrayref = 0.3.10`, malicious code, bez patched version.\n\n Mechanizm był prosty. SafeDep i inni opisują, że `arrayref@0.3.10` dodał dependency na typosquatted `proc-macro1`, łatwe do pomylenia z `proc-macro2`. Złośliwy crate kopiował realny source `proc-macro2`, aby build wyglądał normalnie, podczas gdy build script działał.\n\n Build script jest sednem. Cargo używa ich do native libraries, code generation, platform detection i konfiguracji. Ale oznacza to, że dependency może wykonać kod podczas builda. Jeśli dzieje się to na laptopie developera lub CI runner z tokens, SSH keys, cloud credentials albo publishing rights, nawet krótkie okno ma znaczenie.\n\n ## Dlaczego krótko nie znaczy bezpiecznie\n\n Nowoczesne CI jest szybkie, automatyczne i często pełne sekretów. Dependency update, scheduled build, `cargo update`, rebuild obrazu albo bot mogły uruchomić kod w oknie ekspozycji.\n\n Raporty wskazują też, że starsze wersje `arrayref` były yanked, przez co złośliwa wersja mogła wyglądać jak naturalna ścieżka aktualizacji. Metadata i zachowanie registry są częścią attack surface.\n\n Ostrożne stwierdzenie brzmi: nie każdy projekt używający `arrayref` został skompromitowany. Ale każdy system, który budował affected versions, powinien zostać potraktowany jako potencjalnie narażony do czasu sprawdzenia logs, artifacts i credentials.\n\n ## Co Rust zrobił dobrze\n\n Reakcja była szybka i publiczna: usunięcie crates, przywrócenie legalnych wersji, timelines, advisories, wskazówki do sprawdzenia cache Cargo, koordynacja RustSec i GitHub, blokada konta. Ważne było też nieoskarżanie legalnego maintainer bez dowodów.\n\n Open source potrzebuje takich procedur. Incydenty się zdarzają; jakość response naprawia zaufanie. Registry potrzebuje takedown, yanking, security response, public advisories i jasnego rozróżnienia kompromitacji maintainer od złej woli.\n\n Społeczność Rust szybko przeszła do system design: sandboxing build scripts, allowlists, registry anomaly detection, lockfiles, dependency culture, containers i microcrates. To właściwa rozmowa. Żaden ekosystem nie może ignorować trust boundaries package managera.\n\n ## Niewygodne pytanie Cargo\n\n Build scripts nie są błędem. npm ma `postinstall`, Python build backends, native packages configure scripts, Rust ma `build.rs`. Open source wybierał wygodę, portowalność i automatyzację. Atakujący widzą, że build systems uruchamiają się wcześnie i z dużymi uprawnieniami.\n\n Pytanie nie brzmi, czy build scripts mają istnieć. Pytanie brzmi, czy każdy nowy albo zmieniony build script powinien mieć pełny dostęp domyślnie. Mała dependency może nagle dodać build dependency. Crate może pociągnąć typosquatted package. Build script może otworzyć sieć, czytać environment i dotykać plików.\n\n Cargo issue “Build script allowlist mode” i goal sandboxed build scripts pokazują, że temat już istniał. Incydent dodaje pilność. Potrzebne będą warstwy: registry signals, allowlists, sandbox, dependency diffs, network-deny modes i lepsza kontrola yanks oraz owners.\n\n ## Co sprawdzić teraz\n\n Zespoły Rust powinny szukać `arrayref@0.3.10`, `internment@0.8.7`, `append-only-vec@0.1.9` i usuniętych attacker crates w `Cargo.lock`, vendored dependencies, CI logs, caches i artifact provenance. Cache ma znaczenie, bo crate może pozostać po takedown.\n\n Następnie przejrzeć buildy z 20 sierpnia 2026 w danych oknach: CI, self-hosted runners, workstations, release builders i image rebuilds. Jeśli build miał secrets, package tokens, cloud credentials, signing keys lub SSH material, należy rotować to, co mogło być narażone.\n\n Sprawdź network egress. Wiele buildów nie potrzebuje szerokiego wyjścia po fetch zależności. Ephemeral runners, izolowane containers, egress policies i short-lived credentials obniżają wartość payloadów.\n\n Narzędzia pomagają: `cargo audit`, advisories, `cargo deny`, `cargo vet`, scanners. Ale żadne nie zastępuje sandbox i least privilege.\n\n ## Maintainers i registries\n\n Maintainers powinni utwardzić publishing accounts: strong authentication, scoped tokens, least privilege, oddzielne release machines, alerty na yanks, owner changes i releases. Mały crate może być critical infrastructure.\n\n Registries powinny traktować nietypowe zmiany jako signals: nowy build script w starym crate, typosquatted dependency, suspicious yanking, network behavior. Friction może oznaczać warning, delay, confirmation, scanning albo mocniejszy UI.\n\n Tool authors mogą poprawić dependency diffs: nowe build scripts, proc macros, owners, native code, outbound network, yanked predecessors i nazwy podobne do znanych packages.\n\n ## Nie tylko Rust\n\n Porównania z npm i PyPI są przydatne, jeśli nie stają się tribalism. Rust ma strong type safety i poważną security culture. To nie usuwa registry compromise, stolen credentials, malicious build scripts ani social engineering.\n\n Lekcja ogólna: samo czytanie source code nie wystarcza. Ważne jest kiedy kod się uruchamia. Dependency w lockfile to jedno. Dependency z build script na CI runner z release tokens to coś innego.\n\n ## Co warto wypróbować\n\n Przeglądaj `Cargo.lock`, używaj ephemeral runners, usuń long-lived secrets z general builds, ogranicz network, prowadź listę crates allowed to run build scripts. Dla critical software: sprawdź `cargo vet`, `cargo deny`, RustSec/GitHub alerts i scanners patrzące na build-time behavior.\n\n Radar signal jest jasny: to test dla registries, lockfiles, advisories, CI i package managers. Reuse pozostaje siłą open source. Potrzebuje modelu zaufania, który traktuje build-time code jak prawdziwy kod.","available_translations":[{"language":"ar","title":"حادثة Rust arrayref تنبه إلى مخاطر الثقة أثناء build في open source","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=ar","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=ar","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=ar","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=ar"},{"language":"de","title":"Der Rust-arrayref-Vorfall warnt vor Build-Time-Vertrauen in Open Source","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=de","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=de","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=de","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=de"},{"language":"en","title":"Rust’s arrayref incident is a warning about build-time trust in open source","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=en","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=en","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=en","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=en"},{"language":"es","title":"El incidente de arrayref en Rust avisa sobre la confianza en la fase de build","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=es","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=es","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=es","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=es"},{"language":"fr","title":"L’incident Rust arrayref alerte sur la confiance accordée au build open source","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=fr","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=fr","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=fr","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=fr"},{"language":"pl","title":"Incydent Rust arrayref ostrzega przed zaufaniem do kodu uruchamianego przy buildzie","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=pl","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=pl","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=pl","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=pl"},{"language":"ru","title":"Инцидент с Rust arrayref — предупреждение о доверии к сборке в open source","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=ru","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=ru","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=ru","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=ru"},{"language":"zh","title":"Rust arrayref 事件提醒开源社区重新审视构建时信任","html_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=zh","markdown_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=zh","json_url":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=zh","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=zh"}],"_links":{"self":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=pl","api":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=pl","html":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=pl","canonical":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026?lang=pl","markdown":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.md?lang=pl","json":"https://publicasta.com/open_source_radar/rust_arrayref_supply_chain_attack_cargo_build_scripts_2026.json?lang=pl","channel":"https://publicasta.com/api/public/v1/channels/open_source_radar","channel_articles":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles","search":"https://publicasta.com/api/public/v1/search","documentation":"https://publicasta.com/api-docs#reading-publicasta","openapi":"https://publicasta.com/api-docs/openapi.json","llms":"https://publicasta.com/llms.txt"}}