Gli sviluppatori del repository di pacchetti Python PyPI (Python Package Index) hanno annunciato l'implementazione del supporto per un meccanismo di attestazione digitale per la verifica dell'autenticità dei pacchetti pubblicati, che sostituisce la verifica tramite firme PGP. La principale differenza dell'attestazione è che la pubblicazione di un pacchetto è convalidata non dallo sviluppatore, ma da una terza parte (il catalogo dei pacchetti) dopo aver confermato l'accuratezza della pubblicazione tramite un fornitore esterno di OpenID Connect (ad esempio, dopo aver verificato che il pacchetto pubblicato corrisponde al repository associato su GitHub o GitLab).
Il sistema di attestazione elimina le carenze associate al meccanismo di verifica tramite firme PGP, precedentemente dichiarato obsoleto in PyPI. Questa soluzione è stata adottata a causa di problemi nella verifica dell'appartenenza degli sviluppatori alle chiavi PGP pubbliche utilizzate per la verifica delle firme digitali: su 1069 chiavi PGP utilizzate dal 2020 per la generazione delle firme in PyPI, il 29% delle chiavi pubbliche risultava assente su grandi pubblici. server chiavi, e il 35% delle chiavi si è rivelato impossibile da verificare durante l'audit. Tuttavia, il 36% delle chiavi PGP confermate copriva solo lo 0,3% di tutti i file firmati.
Nel nuovo sistema, le firme utilizzate per attestare i pacchetti vengono create con chiavi effimere a breve termine, generate sulla base dei diritti confermati dai provider OpenID Connect. Al momento della generazione delle chiavi necessarie per creare la firma digitale, lo sviluppatore si identifica tramite il provider OpenID, che conferma la sua connessione con il progetto principale. L'infrastruttura per l'attestazione digitale è costruita utilizzando il sistema Sigstore e il framework di attestazione in-toto.
Tra i vantaggi della certificazione si annovera l'assenza di legami con chiavi PGP permanenti: la perdita o la compromissione della chiave privata mina la fiducia nelle firme create sulla sua base, mentre con la certificazione la firma viene generata in relazione a un token che convalida i diritti al momento della pubblicazione del pacchetto e del legame del pacchetto con il repository principale del codice. Ad esempio, durante la pubblicazione di un pacchetto preparato tramite GitHub Action, la certificazione determina un legame verificabile e confermato tra il file caricato su PyPI, il repository, il processo di workflow e l'hash del commit da cui è stato generato il pacchetto.

Per monitorare l'autenticità delle chiavi e identificare possibili compromissioni, viene utilizzato un registro pubblico centralizzato per la creazione dei pacchetti dei progetti e del PyPI stesso, per garantire l'integrità e proteggere dai dati alterati retroattivamente, in cui è impiegata la struttura ad "albero di Merkle" (Merkle Tree, ogni ramo verifica tutti i rami e nodi sottostanti tramite hashing ad albero).
Inoltre, si segnala il rilevamento di un pacchetto malevolo «fabrice» nel catalogo PyPI, che si mascherava come la popolare libreria «fabric» attraverso il type squatting (assegnazione di nomi simili, differendo per singoli caratteri, ad esempio, exampl invece di example, djangoo invece di django, pyhton invece di python, ecc.) e ha totalizzato 201 milioni di download (7 milioni di download nell'ultimo mese). Il pacchetto malevolo era passato inosservato dal 2021 ed è stato scaricato oltre 37 mila volte fino ad oggi.
Il pacchetto «fabrice» ripeteva la funzionalità di base della libreria originale e includeva aggiuntivamente codice per rilevare e inviare a host esterni le chiavi di accesso a AWS (Amazon Web Services), installare un backdoor ed eseguire determinati script. L'attivazione dei componenti malevoli avveniva sia su Linux che su Windows. Su Linux, i file associati all'attività malevola venivano scaricati nella cartella ~/.local/bin/vscode.
Fonte: opennet.ru
