Gli sviluppatori del repository di pacchetti Python PyPI hanno pubblicato un piano per l'implementazione obbligatoria dell'autenticazione a due fattori per i pacchetti classificati come critici. L'importanza è determinata dal numero di download e la modifica sarà applicata ai conti dei manutentori e dei proprietari dei progetti associati all'1% dei pacchetti che guidano in termini di download negli ultimi 6 mesi. Considerando che attualmente il repository PyPI include oltre 350.000 pacchetti, l'autenticazione a due fattori sarà applicata a circa 3.500 pacchetti. Per verificare se il proprio account è nella lista, è stata preparata una pagina speciale. La data esatta per l'implementazione dell'autenticazione a due fattori obbligatoria non è ancora stata stabilita, ma si prevede che avverrà nei prossimi mesi.
A differenza dell'adozione della doppia autenticazione per i progetti RubyGems, NPM e GitHub, PyPI implementerà inizialmente uno schema che prevede l'uso raccomandato di un token hardware con chiavi d'accesso. Si cita come motivo per l'uso consigliato dei token e del protocollo WebAuthn una maggiore sicurezza rispetto alla generazione di password usa e getta (la possibilità di utilizzare TOTP al posto dei token sarà disponibile come opzione).
I token saranno disponibili gratuitamente: l'azienda Google ha sponsorizzato l'iniziativa e ha messo a disposizione 4000 chiavi Titan per il progetto. Ogni accompagnatore può richiedere gratuitamente due token con interfaccia USB-C o USB-A. Il secondo token viene inviato come riserva in caso di rottura o smarrimento del principale, per minimizzare il rischio di perdita di accesso al repository e liberare gli sviluppatori dalla necessità di affrontare una complessa procedura di recupero accesso.
Sfortunatamente, i token possono essere inviati solo in Austria, Belgio, Canada, Francia, Germania, Italia, Giappone, Spagna, Svizzera, Regno Unito e Stati Uniti. I viaggiatori da altri paesi possono acquistare token compatibili con la specifica FIDO U2F, come ad esempio i token Yubikey e Thetis. In alternativa, è possibile utilizzare app per l'autenticazione basate su codice monouso che supportano il protocollo TOTP, come Authy, Google Authenticator e FreeOTP.
L'iniziativa non è stata priva di incidenti. L'autore del pacchetto Atomicwrites, che conta 6 milioni di download al mese e 38 milioni in sei mesi, ha rifiutato di attivare l'autenticazione a due fattori e, per escludere il suo pacchetto dalla lista di quelli critici, ha tentato di azzerare il contatore dei download. Per farlo, ha prima eliminato il pacchetto e poi ha caricato una nuova versione. Si pensava che tale manovra avrebbe semplicemente azzerato il contatore, ma con grande sorpresa dello sviluppatore, tutte le versioni precedenti sono state rimosse dal repository, causando problemi ai progetti dipendenti dalla libreria, che alcuni sviluppatori hanno paragonato all'incidente avvenuto a causa della rimozione del pacchetto left-pad da NPM.
Il problema è stato aggravato dal fatto che, dopo la rimozione, l'autore di atomicwrites non è riuscito a caricare le versioni precedenti, che sono state ripristinate solo il giorno successivo grazie al coinvolgimento degli amministratori di PyPI. Dopo quanto accaduto, l'autore del pacchetto ha deciso di interrompere lo sviluppo di atomicwrites e di declassare il pacchetto a obsoleto. Tra le ragioni menzionate c'è il fatto che gestisce il progetto come un hobby nel tempo libero, e che l'emergere di requisiti aggiuntivi, che complicano il lavoro, non giustificano il tempo speso per mantenere gratuitamente un pacchetto di tale popolarità. L'autore di atomicwrites afferma che preferirebbe semplicemente scrivere codice per divertimento, mentre le problematiche legate alla sicurezza da attacchi di malintenzionati possono essere affrontate da chi è disposto a pagare per questo.
La libreria atomicwrites contiene circa 200 righe di codice e offre funzioni per la scrittura atomica dei file. Come alternativa, si possono utilizzare le chiamate standard os.replace e os.rename (l'operazione consiste nella scrittura in un file temporaneo e nella successiva rinomina nel file di destinazione una volta completata).
Fonte: opennet.ru
