NPM, migliaia di app in crash: librerie open compromesse appositamente
Una storia che ha dell’incredibile e che fa riflettere: potrebbe essere solo il primo sassolino di una valanga. Gli utenti delle popolari librerie NPM open source “colors” e “faker” sono rimasti attoniti dopo aver visto le loro applicazioni stampare dati senza senso e andare in crash. In prima istanza si è pensato che le librerie fossero state compromesse da cybercriminali, ma non è andata proprio così.
Tl;Dr? Il manutentore di queste librerie, Marak Squires, ha introdotto intenzionalmente un ciclo infinito nel codice sorgente (loop) bloccando, di fatto, migliaia di progetti che le utilizzano. Le motivazioni? Read on!
Open Source Revolution?
La libreria “colors” (aka colors.js su GitHub) riceve oltre 20 milioni di download settimanali solo su npm ed è usata in oltre 19.000 progetti. Tra questi figurano:
- prompt command-line helper (~500,000 download settimanali)
- Unicode table formatting cli-table3 (~7 milioni di download settimanali)
- AWS aws-cdk (~2 milioni di download settimanali)
Faker (aka ‘faker.js’ su GitHub), invece, riceve oltre 2,8 milioni di download settimanali su npm e ha oltre 2.500 progetti che la sfruttano.
Lo scorso 8 gennaio sono stati pubblicati i commit colors@1.4.44-liberty-2
e faker@6.6.6
attraverso i quali Squires ha intenzionalmente introdotto un ciclo infinito nel codice sorgente:
for (let i = 666; i < Infinity; i++;) {if (i % 333) {// console.log('testing'.zalgo.rainbow)}
console.log('testing testing testing testing testing testing testing'.zalgo)
}
Il loop viene attivato ed eseguito immediatamente dopo l’inizializzazione del pacchetto e causa un Denial of Service (DoS) ai server Node.js che lo utilizzano. Il messaggio che compare è ‘LIBERTY LIBERTY LIBERTY’ seguito da caratteri casuali non-ASCII:
Le motivazioni
Il manutentore, Marak Squires, ha spiegato la mossa pubblicando un articolo dal titolo “Monetizing Open-source is problematic”. Nell’articolo spiega che le librerie vengono utilizzate da aziende enormi che non contribuiscono minimamente al mantenimento del codice.
Nessuno paga per lo sviluppo di Faker. Di recente, abbiamo iniziato a ottenere sponsorizzazioni attraverso servizi come Open Collective e Github Sponsors. La maggior parte di queste donazioni proviene da sviluppatori indipendenti e non da imprese o società. Queste donazioni hanno contribuito a impedire che lo sviluppo di Faker si bloccasse completamente, ma non sono sostenibili. Mi piace lavorare su Faker, ma non posso nemmeno permettermi di lavorare gratuitamente. Come la maggior parte di noi, ho persone che dipendono da me e ho delle bollette da pagare. Non volendo arrendermi, ho deciso che la migliore linea d’azione era cercare di monetizzare il progetto Faker per garantire un futuro sostenibile.
Nel file Leggimi della libreria faker.js ha aggiunto la domanda “Cosa è davvero accaduto ad Aaron Swartz”. Per chi non lo sapesse o non lo ricordasse, Aaron Swartz era un’attivista del software libero. Ad aprile 2011 è stato accusato di aver scaricato 4.8 milioni di articoli dall’archivio accademico digitale JSTOR con l’intenzione di distribuirli gratuitamente ma si è sempre dichiarato innocente. Venne liberato su cauzione, ma rischiava fino a 50 anni di carcere: si è suicidato nel 2013.
Blocco dell’account
L’account GitHub di Marak Squires è stato sospeso e su NPM è stata ripristinata la versione precedente di faker.js priva dell’aggiornamento malevolo.
La mossa di Squires è forse sbagliata nelle modalità, ma pone un grande problema. Lo sviluppo e il mantenimento di migliaia di librerie open source, si veda anche il recente caso log4j, è in mano a piccoli sviluppatori indipendenti, spesso non retribuiti. La discussione è aperta nella comunità open source, con un numero sempre maggiore di manutentori che esprimono la loro insoddisfazione per le aziende e le organizzazioni che monetizzano utilizzando gratuitamente software open source nei loro prodotti. Cosa succederebbe se altri si comportassero come Squires? Voi come la pensate?
Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.