Sto provando a distribuire il mio progetto e improvvisamente ricevo questo errore.
npm ERR! 404 Non trovato: event-stream@3.3.6
Sto provando a distribuire il mio progetto e improvvisamente ricevo questo errore.
npm ERR! 404 Non trovato: event-stream@3.3.6
Risposte:
tldr;
Mucca sacra! Si scopre che il pacchetto event-stream aveva una vulnerabilità che consentiva a un hacker di rubare bitcoin.
Per risolverlo è necessario aggiornare il event-stream
pacchetto.
node_modules
cartella.package-lock.json
file.npm install
.Questo dovrebbe aggiornare i tuoi pacchetti a una versione sicura e dovresti essere a posto.
Ed ecco la risposta ufficiale dal blog di NPM:
Dettagli sull'incidente del flusso di eventi Questa è un'analisi dell'incidente del flusso di eventi di cui molti di voi sono venuti a conoscenza all'inizio di questa settimana. npm agisce immediatamente per affrontare i problemi operativi e i problemi che influiscono sulla sicurezza della nostra comunità, ma in genere eseguiamo analisi più approfondite prima di discutere gli incidenti: sappiamo che stavi aspettando.
La mattina del 26 novembre, il team di sicurezza di npm è stato informato di un pacchetto dannoso che si era fatto strada in event-stream, un popolare pacchetto npm. Dopo aver analizzato il malware, npm Security ha risposto rimuovendo flatmap-stream e event-stream@3.3.6 dal registro e assumendo la proprietà del pacchetto event-stream per prevenire ulteriori abusi.
Il pacchetto dannoso era la versione 0.1.1 di flatmap-stream. Questo pacchetto è stato aggiunto come dipendenza diretta del pacchetto event-stream da un nuovo manutentore il 9 settembre 2018, nella versione 3.3.6. Il pacchetto event-stream è ampiamente utilizzato, ma il codice dannoso ha preso di mira gli sviluppatori di un'azienda che aveva una configurazione dell'ambiente di sviluppo molto specifica: eseguire il payload in qualsiasi altro ambiente non ha alcun effetto. Questo targeting specifico significa che, in definitiva, la maggior parte degli sviluppatori non sarebbe interessata anche se avessero installato per errore il modulo dannoso.
Il codice iniettato è destinato all'applicazione Copay. Quando uno sviluppatore di Copay esegue uno dei propri script di build di rilascio, il codice risultante viene modificato prima di essere raggruppato nell'applicazione. Il codice è stato progettato per raccogliere i dettagli dell'account e le chiavi private da account con un saldo di oltre 100 Bitcoin o 1000 Bitcoin Cash.
La risposta iniziale di Copay è stata che nessuna build contenente questo codice dannoso è stata rilasciata al pubblico, ma ora abbiamo la conferma da Copay che "il codice dannoso è stato distribuito nelle versioni da 5.0.2 a 5.1.0".
L'attacco Questo attacco è iniziato come un attacco di ingegneria sociale. L'aggressore, fingendosi un manutentore, ha assunto la gestione del modulo event-stream.
I dettagli tecnici Ecco alcuni dettagli tecnici di cui siamo a conoscenza, per quelli di voi interessati a questo.
Il codice iniettato:
Lettura dei dati crittografati AES da un file camuffato da dispositivo di prova Ha preso la descrizione del pacchetto npm del modulo che lo ha importato, utilizzando una variabile d'ambiente impostata automaticamente Ha utilizzato la descrizione del pacchetto come chiave per decrittografare una parte di dati estratti dal file mascherato I dati decrittografati facevano parte di un modulo, che è stato poi compilato in memoria ed eseguito.
Questo modulo ha eseguito le seguenti azioni:
Decrittografato un altro blocco di dati dal file mascherato Concatenato un piccolo prefisso commentato dal primo blocco decrittografato alla fine del secondo blocco decrittografato Eseguite attività di decodifica minori per trasformare il blocco concatenato di codice da JS non valido a JS valido (crediamo che fosse fatto per eludere il rilevamento da parte degli strumenti di analisi dinamica) Ha scritto questo blocco elaborato di JS in un file memorizzato in una dipendenza che sarebbe stato impacchettato dagli script di compilazione: Il pezzo di codice che è stato scritto era il codice dannoso effettivo, destinato a essere eseguito sui dispositivi di proprietà degli utenti finali di Copay.
Questo codice farebbe quanto segue:
Rileva l'ambiente attuale: Mobile / Cordova / Electron Controlla i saldi di Bitcoin e Bitcoin Cash sul conto copay della vittima Se il saldo corrente era maggiore di 100 Bitcoin o 1000 Bitcoin Cash: Raccogli i dati dell'account della vittima per intero Raccogli le chiavi private copay della vittima Invia i dati dell'account della vittima / le chiavi private a un servizio di raccolta in esecuzione su 111.90.151.134. Per gli utenti dell'app Copay, bitpay consiglia: "Se stai utilizzando una versione dalla 5.0.2 alla 5.1.0, non dovresti eseguire o aprire l'app Copay".
Per gli utenti npm, puoi verificare se il tuo progetto contiene la dipendenza vulnerabile eseguendo npm audit. Se hai installato la versione interessata di questo flusso di eventi, ti consigliamo di eseguire l'aggiornamento a una versione successiva il prima possibile.
npm list event-stream
e aggiorna i pacchetti di primo livello
In realtà non abbiamo bisogno di aggiornare tutti i pacchetti che dipendono da event-stream@3.3.6.
Puoi aprire il file package-lock.json
, rimuovere tutti i riferimenti del flusso di eventi e chiamare di npm install
nuovo. Sarà più veloce.
Dopodiché, npm shrinkwrap && mv npm-shrinwrap.json package-lock.json
dovrebbe aggiornare solo i riferimenti del flusso di eventi e non l'intero file
Segui i seguenti metodi:
Elimina i file node_modules e package_lock.json
Esegui npm list event-stream
Risolvo questo problema con i seguenti passaggi:
event-stream
foglia, ad esempio:
45 silly saveTree +-- nodemon@1.18.4
45 silly saveTree | +-- chokidar@2.0.4
45 silly saveTree | +-- pstree.remy@1.1.0
45 silly saveTree | | `-- ps-tree@1.2.0
45 silly saveTree | | `-- event-stream@3.3.6
45 silly saveTree | | +-- duplexer@0.1.1
45 silly saveTree | | +-- from@0.1.7
45 silly saveTree | | +-- pause-stream@0.0.11
45 silly saveTree | | `-- split@0.3.3
Come accennato nei commenti, il problema sottostante era il package-lock.json
(il file di blocco) conteneva un pacchetto deprecato. L'eliminazione del file di blocco e la reinstallazione delle dipendenze hanno risolto il problema.
Il modo più veloce per farlo è questi 2 passaggi:
package-lock.json
filenpm i
(o npm install
) per reinstallare le dipendenzeHo aggiornato npm-run-all da 4.1.3 a 4.1.5 in package.json (rimuovi nel flusso di eventi del file di blocco) Quindi installa npm.