package-lock.json - pacchetto blocco json - npm typosquatting

Errore di battitura in Package-Lock.json: come può dirottare la tua build

Perché Package-Lock.JSON è importante per gli sviluppatori

Nei progetti Node.js, package-lock.json non è solo un file complementare a package.json. Blocca le versioni esatte di ogni dipendenza installata, comprese quelle annidate. Questo file garantisce la riproducibilità in tutti gli ambienti e previene modifiche impreviste quando vengono pubblicate nuove versioni del pacchetto. Senza di esso, gli sviluppatori rischierebbero comportamenti diversi nelle fasi di sviluppo, test e produzione a causa di alberi delle dipendenze variabili, e persino aprirebbero la porta al typosquatting di npm se degli errori si insinuano nel file di lock.


Se usato correttamente, package-lock.json garantisce a tutti i membri del tuo team e al tuo CI/CD pipeline installazioni lo stesso codice. Ma un errore di battitura silenzioso in questo file può reindirizzare la tua app direttamente in una trappola.

In che modo gli errori di battitura portano agli attacchi di typosquatting NPM?

Diciamo che un pacchetto legittimo in pacchetto.json è scritto correttamente, come lodashMa una voce digitata male in Pacchetto-lock.json, come lodas, può comunque insinuarsi nel tuo albero delle dipendenze, soprattutto se qualcuno lo ha modificato manualmente o se è stato scritto da uno strumento difettoso.

Gli aggressori sfruttano questi errori di battitura con una tecnica chiamata npm typosquatting. Caricano pacchetti dannosi con nomi simili a quelli popolari (ad esempio, reagire-domm, esprime, angolare). Se il blocco JSON del pacchetto include un errore di battitura come questo, npm installa il pacchetto dell'aggressore senza fare domande, perché glielo hai chiesto esplicitamente.

Il typosquatting di npm non è solo teorico. Gli attacchi di typosquatting di npm nel mondo reale hanno fatto notizia. Un esempio è stato Compromesso del pacchetto CoaDurante la serata, codice dannoso è stato distribuito tramite l'aggiornamento di un pacchetto attendibile. La differenza è che con il typosquatting di npm, lo sviluppatore invita accidentalmente l'aggressore digitando in modo errato una dipendenza.

Rischi reali in CI/CD Pipelines Causato da errori json di blocco del pacchetto

Moderno CI/CD pipelinetrattare Pacchetto-lock.json come fonte di verità. Durante la compilazione o la distribuzione, il pipeline corre npm ci or installazione di npm, entrambi leggono dal file di lock. Se è presente un errore di battitura, il pacchetto dannoso viene inserito automaticamente. Nessun avviso. Nessuna richiesta.

Ciò significa che un errore di battitura introdotto durante lo sviluppo locale può propagarsi silenziosamente fino allo staging o persino alla produzione. Gli aggressori possono incorporare ladri di credenziali, miner di criptovalute o backdoor che si attivano dopo la distribuzione. Tutto ciò può accadere senza attivare gli strumenti di sicurezza, perché la dipendenza è stata "dichiarata" nel Pacchetto-lock.json.

Non si tratta solo di un errore. È una violazione della supply chain in agguato, e il typosquatting di npm la rende una minaccia reale.

Rilevamento e prevenzione degli errori di battitura nelle dipendenze per mitigare il typosquatting di NPM

Errori di battitura in Pacchetto-lock.json sono invisibili a meno che non li cerchi attivamente. Ecco come iniziare:

  • Analisi statica: Alcuni strumenti non rilevano questi problemi, ma gli scanner di dipendenze dedicati sì. Integra strumenti che eseguono la scansione dei modelli di typosquatting di npm e controllano il tuo Pacchetto-lock.json per incongruenze.
  • Linting dei file di blocco: Utilizza regole di linting personalizzate o plugin per convalidare Pacchetto-lock.json voci negli elenchi sicuri noti.
  • Recensioni del codice: Le revisioni tra pari sono fondamentali. Le differenze nei lockfile sono rumorose, ma insegna al tuo team a revisionarle proprio come il codice.
  • Controlli automatizzati: Impostare pre-commit hooks o lavori CI per rifiutare voci non verificate o sospette in Pacchetto-lock.json.

Ecco un esempio pratico che utilizza GitHub Actions:

Non è una soluzione a prova di bomba, ma segnala nomi di pacchetti strani che potrebbero indicare un typosquatting di npm.

Proteggere i progetti Node.js dagli attacchi di typosquatting e di supply chain di NPM

Per bloccare la tua app Node.js e prevenire attacchi tramite Pacchetto-lock.json:

  • Versione rigorosa bloccata: Evita intervalli di versione (^, ~) in pacchetto.jsonBlocca tutte le dipendenze alle versioni esatte per ridurre aggiornamenti imprevisti e derive.
  • Verifica della firma: Sfrutta strumenti come Sigstore e le funzionalità di provenienza di npm per verificare l'autenticità e l'origine dei pacchetti.
  • Build immutabili: Utilizzare sempre npm ci con una convalida Pacchetto-lock.json file in ambienti di produzione. Non fare mai affidamento su installazione di npm durante le distribuzioni, poiché potrebbe introdurre modifiche non verificate.
  • Monitoraggio continuo: Utilizza soluzioni di monitoraggio che ti avvisano quando:
    • Nuovi pacchetti appaiono nel tuo Pacchetto-lock.json
    • I pacchetti esistenti cambiano inaspettatamente
    • Modelli sospetti (ad esempio, nomi di pacchetti come esprime, reagire-domm, angolare) vengono rilevati
  • Strumenti di controllo delle dipendenze: Integrare strumenti automatizzati come controllo npm, Snyk, o Xygeni nel tuo CI pipeline per individuare vulnerabilità e indicatori di typosquatting.
  • Igiene del file di blocco: Trattare Pacchetto-lock.json come codice. Rivedilo durante pull requests, soprattutto quando vengono aggiornate o aggiunte dipendenze.
  • Automatizzata Pre-Commit Controlli: Uso pre-commit hooks per convalidare il file di blocco prima che raggiunga il controllo di versione.

Pacchetto-lock.json è un obiettivo di alto valore negli attacchi typosquatting di npm. Un errore di battitura come reagire-domm or lodas fornisce agli aggressori un percorso diretto per accedere alla tua build pipelineLa vigilanza su questo file è essenziale per mantenere l'integrità della catena di fornitura.

Quindi, un singolo errore di battitura può mandare all'aria la tua build. Non permetterlo!

Un errore di battitura in Pacchetto-lock.json non è solo un codice sciatto; è un vero vettore di minaccia per il typosquatting di npm. Il file è un gatekeeper e, se viene compromesso, il tuo pipeline Anche questo. La soluzione non è allettante: rallentare, rivedere il file di lock, automatizzare i controlli e monitorare le modifiche. Ma ne vale la pena.

Per aumentare la tua difesa, prendi in considerazione l'utilizzo di strumenti come Xygeni, progettati per rilevare il typosquatting, ispezionare blocco pacchetto JSON file e salvaguardare l'integrità del pacchetto durante l'intero CI/CD pipelineNell'era dell'open source, la fiducia si guadagna e si verifica.

sca-tools-software-strumenti-di-analisi-della-composizione
Dai priorità, risolvi e proteggi i rischi del tuo software
Crea il tuo account gratuito.
Nessuna carta di credito richiesta.

Proteggi lo sviluppo e la consegna del tuo software

con la suite di prodotti Xygeni