Supply Chain Attack: proseguono le campagne di compromissione pacchetti NPM (BL01/250917/CSIRT-ITA)
Data:
17 Settembre 2025
Sintesi
Proseguono le campagne di compromissione di pacchetti NPM largamente diffusi, al fine di distribuire codice malevolo. Ricercatori di sicurezza hanno rilevato la compromissione di numerosi pacchetti NPM Crowdstrike e affermano che tali attacchi sembrano essere una prosecuzione della campagna malevola denominata “Shai-Halud”, già nota in precedenti compromissioni ai danni di Tinycolor, libreria JavaScript leggera e potente per la manipolazione dei colori.
Descrizione
Proseguono le campagne di compromissione di pacchetti NPM largamente diffusi, al fine di distribuire codice malevolo. Ricercatori di sicurezza hanno rilevato la compromissione di numerosi pacchetti NPM Crowdstrike e affermano che tali attacchi sembrano essere una prosecuzione della campagna malevola denominata “Shai-Halud”, già nota in precedenti compromissioni ai danni di Tinycolor, libreria JavaScript leggera e potente per la manipolazione dei colori.
L’attacco ha origine dalla distibuzione di pacchetti compromessi da parte dell’account crowdstrike-publisher .
Il malware include uno script bundle.js all’interno dei pacchetti compromessi. Una volta eseguito, lo script inzia un processo multi-stage volto ad esfiltrare credenziali e a stabilire una persistenza all’interno dell’ambiente vittima, in dettaglio:
- preleva ed esegue TruffleHog , uno scanner legittimo per la ricerca di informazioni sensibili;
- cerca token e credenziali cloud nei sistemi host;
- valida le credenziali di sviluppatori e ambienti CI trovate;
- crea workflow GitHub Actions non autorizzati nei repository;
- esfiltra dati sensibili verso un endpoint webhook codificato.
Il nome della campagna “Shai-Hulud” è dovuto ad un file di workflow chiamato shai-hulud.yaml incluso nel malware.
Pacchetti compromessi
- @ahmedhfarag/ngx-perfect-scrollbar
- @ahmedhfarag/ngx-virtual-scroller
- @art-ws/common
- @art-ws/config-eslint
- @art-ws/config-ts
- @art-ws/db-context
- @art-ws/di-node
- @art-ws/di
- @art-ws/eslint
- @art-ws/fastify-http-server
- @art-ws/http-server
- @art-ws/openapi
- @art-ws/package-base
- @art-ws/prettier
- @art-ws/slf
- @art-ws/ssl-info
- @art-ws/web-app
- @crowdstrike/commitlint
- @crowdstrike/falcon-shoelace
- @crowdstrike/foundry-js
- @crowdstrike/glide-core
- @crowdstrike/logscale-dashboard
- @crowdstrike/logscale-file-editor
- @crowdstrike/logscale-parser-edit
- @crowdstrike/logscale-search
- @crowdstrike/tailwind-toucan-base
- @ctrl/deluge
- @ctrl/golang-template
- @ctrl/magnet-link
- @ctrl/ngx-codemirror
- @ctrl/ngx-csv
- @ctrl/ngx-emoji-mart
- @ctrl/ngx-rightclick
- @ctrl/qbittorrent
- @ctrl/react-adsense
- @ctrl/shared-torrent
- @ctrl/tinycolor
- @ctrl/torrent-file
- @ctrl/transmission
- @ctrl/ts-base32
- @hestjs/core
- @hestjs/cqrs
- @hestjs/demo
- @hestjs/eslint-config
- @hestjs/logger
- @hestjs/scalar
- @hestjs/validation
- @nativescript-community/arraybuffers
- @nativescript-community/gesturehandler
- @nativescript-community/perms
- @nativescript-community/sentry
- @nativescript-community/sqlite
- @nativescript-community/text
- @nativescript-community/typeorm
- @nativescript-community/ui-collectionview
- @nativescript-community/ui-document-picker
- @nativescript-community/ui-drawer
- @nativescript-community/ui-image
- @nativescript-community/ui-label
- @nativescript-community/ui-material-bottom-navigation
- @nativescript-community/ui-material-bottomsheet
- @nativescript-community/ui-material-core-tabs
- @nativescript-community/ui-material-core
- @nativescript-community/ui-material-ripple
- @nativescript-community/ui-material-tabs
- @nativescript-community/ui-pager
- @nativescript-community/ui-pulltorefresh
- @nexe/config-manager
- @nexe/eslint-config
- @nexe/logger
- @nstudio/angular
- @nstudio/focus
- @nstudio/nativescript-checkbox
- @nstudio/nativescript-loading-indicator
- @nstudio/ui-collectionview
- @nstudio/web-angular
- @nstudio/web
- @nstudio/xplat-utils
- @nstudio/xplat
- @operato/board
- @operato/data-grist
- @operato/graphql
- @operato/headroom
- @operato/help
- @operato/i18n
- @operato/input
- @operato/layout
- @operato/popup
- @operato/pull-to-refresh
- @operato/shell
- @operato/styles
- @operato/utils
- @teselagen/bio-parsers
- @teselagen/bounce-loader
- @teselagen/file-utils
- @teselagen/liquibase-tools
- @teselagen/ove
- @teselagen/range-utils
- @teselagen/react-list
- @teselagen/react-table
- @teselagen/sequence-utils
- @teselagen/ui
- @thangved/callback-window
- @things-factory/attachment-base
- @things-factory/auth-base
- @things-factory/email-base
- @things-factory/env
- @things-factory/integration-base
- @things-factory/integration-marketplace
- @things-factory/shell
- @tnf-dev/api
- @tnf-dev/core
- @tnf-dev/js
- @tnf-dev/mui
- @tnf-dev/react
- @ui-ux-gang/devextreme-angular-rpk
- @yoobic/design-system
- @yoobic/jpeg-camera-es6
- @yoobic/yobi
- airchief
- airpilot
- angulartics2
- browser-webdriver-downloader
- capacitor-notificationhandler
- capacitor-plugin-healthapp
- capacitor-plugin-ihealth
- capacitor-plugin-vonage
- capacitorandroidpermissions
- config-cordova
- cordova-plugin-voxeet2
- cordova-voxeet
- create-hest-app
- db-evo
- devextreme-angular-rpk
- ember-browser-services
- ember-headless-form-yup
- ember-headless-form
- ember-headless-table
- ember-url-hash-polyfill
- ember-velcro
- encounter-playground
- eslint-config-crowdstrike-node
- eslint-config-crowdstrike
- eslint-config-teselagen
- globalize-rpk
- graphql-sequelize-teselagen
- html-to-base64-image
- json-rules-engine-simplified
- jumpgate
- koa2-swagger-ui
- mcfly-semantic-release
- mcp-knowledge-base
- mcp-knowledge-graph
- mobioffice-cli
- monorepo-next
- mstate-angular
- mstate-cli
- mstate-dev-react
- mstate-react
- ng2-file-upload
- ngx-bootstrap
- ngx-color
- ngx-toastr
- ngx-trend
- ngx-ws
- oradm-to-gql
- oradm-to-sqlz
- ove-auto-annotate
- pm2-gelf-json
- printjs-rpk
- react-complaint-image
- react-jsonschema-form-conditionals
- react-jsonschema-form-extras
- react-jsonschema-rxnt-extras
- remark-preset-lint-crowdstrike
- rxnt-authentication
- rxnt-healthchecks-nestjs
- rxnt-kue
- swc-plugin-component-annotate
- tbssnch
- teselagen-interval-tree
- tg-client-query-builder
- tg-redbird
- tg-seq-gen
- thangved-react-grid
- ts-gaussian
- ts-imports
- tvi-cli
- ve-bamreader
- ve-editor
- verror-extra
- voip-callkit
- wdio-web-reporter
- yargs-help-output
- yoo-styles
N.B. Per il dettaglio delle versioni compromesse si rimanda al link all’analisi disponibile nella sezione Riferimenti.
Azioni di mitigazione
Gli utenti e le organizzazioni possono far fronte a questa tipologia di attacchi verificando scrupolosamente che i pacchetti NPM da installare corrispondano alle versioni lecite.
Nel dettaglio, per quanto esposto, si suggerisce di valutare le seguenti azioni di mitigazione:
- controllare le versioni dei pacchetti in uso:
- assicurarsi di non utilizzare versioni compromesse dei pacchetti riportati in tabella;
- pulire la cache npm:
- comando: npm cache clean –force per evitare che versioni malevole vengano riutilizzate;
- reinstallare tutte le dipendenze:
- eliminare node_modules e reinstallare i pacchetti da zero;
- utilizzare un package lock e versioni pinned:
- bloccare le versioni delle dipendenze ( package-lock.json o yarn.lock ) per evitare aggiornamenti automatici a versioni compromesse;
- effettuare il version pinning:
- specificare puntualmente la versione dei pacchetti critici per impedire aggiornamenti non verificati;
- ruotare i token npm e altri segreti esposti
- se i pacchetti compromessi sono stati installati su macchine con credenziali di pubblicazione, è necessario rigenerare i token npm e qualsiasi altro segreto potenzialmente esposto (es. chiavi API, credenziali cloud);
- audit regolare delle dipendenze:
- utilizzare strumenti come npm audit , yarn audit o semgrep per individuare pacchetti vulnerabili o compromessi.
Si consiglia infine di valutare l’utilizzo del tool riportato al link nella sezione Riferimenti per verificare l’eventuale compromissione dei propri sistemi e l’implementazione degli IoC forniti al link all’analisi.
Riferimenti
- https://github.com/Cyb3r-Monk/Threat-Hunting-and-Detection/blob/main/Uncategorized/NPM%20debug%20and%20chalk%20compromise%2009-2025.md
- https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages
- https://x.com/The_Cyber_News/status/1967936067086028991
- https://cybersecuritynews.com/npm-supply-chain-attack-crowdstrike/
Change log
Versione | Note | Data |
---|---|---|
1.0 | Pubblicato il 17-09-2025 | 17/09/2025 |
Il presente articolo è un prodotto originale di csirt.gov.it, riproposto qui a solo scopo di aumentarne la visibilità. Può essere visualizzato in versione originale al seguente link
Ultimo aggiornamento
17 Settembre 2025, 13:36