Sì, se uno scarica ciecamente e compila il codice sorgente, quel codice potrebbe contenere un exploit che, se eseguito, potrebbe danneggiare il proprio sistema. Inoltre, potrebbe non essere necessario eseguire esplicitamente il binario risultante. Nel suo classico del 1984 Riflessioni sulla fiducia fidata , Ken Thompson ha dimostrato come si potrebbe procedere alla creazione del codice C che, una volta compilato, ha sfruttato il compilatore e ha fatto il backdoor del sistema su cui risiede il compilatore.
Ci sono alcuni modi per difenderci da questo. Nel 2006, Bruce Schneier ha scritto una ripartizione piuttosto buona di un articolo di David A. Wheeler sulla difesa contro l'esempio specifico di Thompson. La carta stessa è ancora saldata al momento, per quanto ne so.
La carta Wheeler è molto interessante, ma è focalizzata sulle viscere del design del compilatore, e questa domanda sembra più focalizzata sulle precauzioni per l'utente finale rispetto alla progettazione del compilatore o persino alla programmazione dei sistemi. Ci sono generalmente due modi in cui comprendiamo il rischio legato alla compilazione di una specifica porzione di codice:
- Autenticare il codice come un vero codice di codice non programmato, scritto da qualcuno di cui abbiamo scelto di fidarci.
- Esame approfondito del contenuto del codice stesso e comprensione completa di ciò che fa.
Il secondo caso - una verifica approfondita del codice - è un compito enorme, lungo e che richiede molte risorse. Non succede quasi mai per basi di codice di dimensioni non banali, perché è semplicemente troppo costoso. Molto più spesso, stiamo osservando il primo caso: fidarsi del programmatore e convalidare che il codice non è stato manomesso tra il codificatore e il consumatore.
Nel 2015, ho fatto un articolo per LinuxJournal su come il codice normalmente arriva dallo sviluppatore all'utente Linux. Chain of Custody è stato ripubblicato dal mio datore di lavoro al di fuori del paywall di LinuxJournal. È strongmente focalizzato sul percorso che passa attraverso la gestione dei pacchetti, ma se leggi attentamente, ti renderai conto che le parti applicabili a un codice di compilazione del manutentore del pacchetto ottenuto da qualche parte su Internet sono applicabili anche a un utente finale.
Naturalmente, alla fine, come altri hanno sottolineato, questi controlli di integrità ne fanno uno solo se l'infrastruttura degli sviluppatori non è stata compromessa, se lo sviluppatore stava codificando bene e così via.