# Ένα Rust crate εκτέλεσε κακόβουλο λογισμικό κατά τη μεταγλώττιση. 86 λεπτά.

Published: 2026-09-15

Ένα Rust crate τεσσάρων μακροεντολών με 260 εκατομμύρια λήψεις προσθέτει μία εξάρτηση, και το \`cargo build\` εκτελεί ένα δυαδικό αρχείο αγνώστου στο μηχάνημά σας. 20 Αυγούστου 2026: το arrayref 0.3.10 προσγειώνεται στο crates.io εξαρτώμενο από το proc-macro1 — όχι το proc-macro2, το πραγματικό — του οποίου το build script κατεβάζει ένα payload, το τοποθετεί στο /tmp/rust-setup και το εκκινεί αποσπασμένο ενώ το έργο σας μεταγλωττίζεται. Οι καθαρές εκδόσεις αποσύρονται (yanked) έτσι ώστε η προειδοποίηση του Cargo να σας οδηγεί στην μολυσμένη. 86 λεπτά αργότερα διαγράφεται.

Canonical: https://thedailydiff.dev/el/video/2026-09-15-arrayref-proc-macro/

## Τι καλύπτει αυτό το βίντεο

- το cargo build εκτελεί ένα δυαδικό αρχείο αγνώστου
- Οι αποδείξεις: Rust Blog, SafeDep, Hacker News
- Αυτό είναι το The Daily Diff, μεταθανάτια ανάλυση
- Χρονολόγιο: 02:11 προετοιμασία → 07:15 δημοσιεύθηκε → 08:41 διαγράφηκε
- Μηχανισμός: build.rs, χωρίς sandbox, το δέλεαρ της απόσυρσης (yank lure)

## Κεφάλαια

- 0:00 το cargo build εκτελεί ένα δυαδικό αρχείο αγνώστου
- 0:20 Οι αποδείξεις: Rust Blog, SafeDep, Hacker News
- 0:33 Αυτό είναι το The Daily Diff, μεταθανάτια ανάλυση
- 0:40 Χρονολόγιο: 02:11 προετοιμασία → 07:15 δημοσιεύθηκε → 08:41 διαγράφηκε
- 1:25 Μηχανισμός: build.rs, χωρίς sandbox, το δέλεαρ της απόσυρσης (yank lure)
- 2:05 git blame — η διάσπαση
- 2:25 Ακτίνα έκρηξης: 2.285 λήψεις
- 2:45 Ετυμηγορία + η γραμμή της Δευτέρας

## Μεταφρασμένη μεταγραφή

Μεταφράστηκε από την πρωτότυπη αγγλική αφήγηση. Ο διαθέσιμος ήχος και οι υπότιτλοι ελέγχονται από το YouTube.

### το cargo build εκτελεί ένα δυαδικό αρχείο αγνώστου

0:00 Ένα Rust crate τεσσάρων μακροεντολών με ένα τέταρτο του δισεκατομμυρίου λήψεις προσθέτει μία εξάρτηση, και το cargo build εκτελεί ένα δυαδικό αρχείο αγνώστου στο μηχάνημά σας. 20 Αυγούστου 2026. Το arrayref 0.3.10 προσγειώνεται στο crates.io εξαρτώμενο από το proc-macro1. Όχι το proc-macro2, το πραγματικό: μία ψηφίο διαφορά, και το build script του εκτελεί ένα payload ενώ το έργο σας μεταγλωττίζεται. Η ομάδα ασφαλείας της Rust το διαγράφει 86 λεπτά αργότερα.

### Οι αποδείξεις: Rust Blog, SafeDep, Hacker News

0:22 Η SafeDep δημοσιεύει την ανάλυση. Hacker News: 554 πόντοι. Πώς συμβαίνει, γιατί το επιτρέπει το Cargo, και ποιος φταίει. Αυτό είναι το The Daily Diff, μεταθανάτια ανάλυση. Δύο το πρωί, UTC.

### Αυτό είναι το The Daily Diff, μεταθανάτια ανάλυση

0:33 Ένας λογαριασμός που ονομάζεται d-tolney, ένα γράμμα από τον David Tolnay, ο οποίος συντηρεί το μισό Rust, δημοσιεύει το proc-macro1 1.0.106: πραγματικό

### Χρονολόγιο: 02:11 προετοιμασία → 07:15 δημοσιεύθηκε → 08:41 διαγράφηκε

0:41 proc-macro2, μετονομασμένο. Προετοιμασία. 07:11. Η έκδοση 1.0.107 προσθέτει ένα build script, συν base64, TLS και έναν HTTP client. Για έναν αναλυτή συμβόλων. 07:15. Ο λογαριασμός του συντηρητή επαναδημοσιεύει το arrayref ως 0.3.10 και αποσύρει κάθε παλαιότερη έκδοση. Το Cargo εκτυπώνει: εξετάστε την ενημέρωση σε μια έκδοση που δεν έχει αποσυρθεί. Η μόνη που απομένει είναι η μολυσμένη.

1:02 Η προειδοποίηση είναι το δέλεαρ. Την ίδια στιγμή, μια εταιρεία ασφαλείας το αναφέρει στη Rust. 07:54, ένα ζήτημα RustSec. 08:29, ένα ζήτημα στο repo· ο επιτιθέμενος απαντά με 0.3.11 και μια δεύτερη κακόβουλη εξάρτηση. 08:41, διαγράφηκε. Ογδόντα έξι λεπτά. Γιατί; Ένα: Το Cargo δημιουργεί κάθε δηλωμένη εξάρτηση, είτε καλείται είτε όχι. Μία γραμμή manifest είναι αρκετή.

1:21 Δύο: ένα build script εκτελείται στο μηχάνημά σας, ως εσείς, με τα κλειδιά SSH και το cargo

### Μηχανισμός: build.rs, χωρίς sandbox, το δέλεαρ της απόσυρσης (yank lure)

1:26 token σας, πριν μεταγλωττιστεί ο κώδικάς σας. Χωρίς sandbox, εξ ορισμού: έτσι βρίσκουν τα crates τις βιβλιοθήκες C. Τρία: μέσα υπάρχει το πραγματικό proc-macro2, οπότε η κατασκευή επιτυγχάνει. Το payload: ένας TLS client που εμπιστεύεται οποιοδήποτε πιστοποιητικό ανακτά ένα δυαδικό αρχείο, το τοποθετεί στο /tmp/rust-setup και το εκκινεί αποσπασμένο. Στα Windows εκτρέπεται μέσω του wscript για να ξεφύγει από το αντικείμενο εργασίας του Cargo· ένα σχόλιο πηγαίου κώδικα το λέει. Το δεύτερο στάδιο, σύμφωνα με το νήμα του RustSec: ένα εργαλείο απομακρυσμένης πρόσβασης που στοχεύει

1:52 προγράμματα περιήγησης και πορτοφόλια κρυπτονομισμάτων. Ποιητικό, αφού οι μεγαλύτεροι χρήστες του arrayref περιλαμβάνουν τα secp256k1 και Solana. git blame. Το μοντέλο του Cargo, πενήντα πέντε τοις εκατό: οι εξαρτήσεις εκτελούν κώδικα στο μηχάνημά σας κατά τη μεταγλώττιση, χωρίς sandbox, και η προειδοποίηση απόσυρσης οδήγησε τους ανθρώπους στο

### git blame — η διάσπαση

2:07 δηλητήριο. Ένας λογαριασμός, τριάντα: ένα διαπιστευτήριο επαναδημοσιεύει ένα crate που εμπιστεύονται ένα τέταρτο του δισεκατομμυρίου λήψεων. Το ψηφίο ένα, δεκαπέντε: μία πληκτρολόγηση από το πιο αξιόπιστο crate της Rust, και κανείς δεν διαβάζει το δέντρο. Ακτίνα έκρηξης: 2.285 λήψεις σε 86 λεπτά. Κάτω από δέκα τοις εκατό της κίνησης, επειδή τα περισσότερα lockfiles περιείχαν την έκδοση 0.3.9. Το crates.io λέει ότι δεν υπάρχουν ενδείξεις χρήσης.

### Ακτίνα έκρηξης: 2.285 λήψεις

2:27 Δύο άτομα στο νήμα του RustSec διαφωνούν· ένας βρίσκει μια υπηρεσία systemd. Στο Hacker News το κορυφαίο νήμα δεν αφορά το κακόβουλο λογισμικό. Είναι η σελίδα του crate, όπου το 0.3.10 τώρα δεν υπήρξε ποτέ. Ετυμηγορία, μεταθανάτια ανάλυση: NEEDS REVIEW. Ογδόντα έξι λεπτά για διαγραφή, ένα blog post την ίδια μέρα, ο λογαριασμός κλειδωμένος: αυτό το μέρος είναι SHIP IT. Αλλά η σελίδα του crate δείχνει ότι τίποτα δεν συνέβη, το cargo audit παραμένει σιωπηλό σε ένα αποθηκευμένο

### Ετυμηγορία + η γραμμή της Δευτέρας

2:48 αντίγραφο, και τα build scripts εξακολουθούν να εκτελούνται ως εσείς. Δευτέρα: εκτελέστε την εντολή εύρεσης του blog της Rust, και αντιμετωπίστε μια προειδοποίηση απόσυρσης ως μια ερώτηση, όχι ως οδηγία. Στείλτε μου το περιστατικό για το οποίο ακόμα δεν σας επιτρέπεται να μιλήσετε, στα σχόλια, ή στο the daily diff dot dev. Και αυτή είναι η διαφορά για σήμερα. Είμαι ο Niko από την Axrisi. Συγχωνεύστε υπεύθυνα.

## Πηγές

- [Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)](https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/) — blog.rust-lang.org
- [RUSTSEC-2026-0260 (arrayref)](https://github.com/rustsec/advisory-db/blob/main/crates/arrayref/RUSTSEC-2026-0260.md) — github.com
- [RustSec issue #3161 (the original report, IOCs, victims)](https://github.com/rustsec/advisory-db/issues/3161) — github.com
- [SafeDep technical analysis](https://safedep.io/arrayref-proc-macro1-rust-build-time-malware/) — safedep.io
- [GitHub issue on the repo (0.3.11 spotted)](https://github.com/droundy/arrayref/issues/33) — github.com
- [crates.io](https://crates.io/crates/arrayref) — crates.io
- [Hacker News (554 points)](https://news.ycombinator.com/item?id=49374269) — news.ycombinator.com
- [BleepingComputer](https://www.bleepingcomputer.com/news/security/hackers-poison-arrayref-rust-crate-to-push-infostealer-malware/) — www.bleepingcomputer.com
