Netcrook Logo
👤 SECPULSE
🗓️ 18 Apr 2026  

“Teoria delle stringhe” finita male: come una falla in Protobuf.js ha spalancato la porta al dirottamento JavaScript

Un bug critico in una popolare libreria di serializzazione dei dati espone milioni di applicazioni all’esecuzione di codice da remoto - e l’exploit è sorprendentemente semplice.

In un tranquillo venerdì di marzo, un ricercatore di sicurezza di Endor Labs si è imbattuto in una bomba a orologeria sepolta nel profondo del cuore dell’ecosistema JavaScript. Il colpevole? Protobuf.js, una libreria onnipresente che alimenta di tutto, dalle app di chat in tempo reale ai database cloud. Con quasi 50 milioni di download settimanali, è la spina dorsale silenziosa di innumerevoli servizi digitali. Ma una singola stringa non controllata - nascosta nel modo in cui Protobuf.js genera codice - ha aperto un varco che consente agli attaccanti di prendere il controllo di server, macchine degli sviluppatori e dati sensibili in tutto il mondo.

Quando gli sviluppatori usano Protobuf.js, si fidano che traduca in modo sicuro strutture dati complesse per la comunicazione tra servizi. Ma l’indagine di Endor Labs ha rivelato un difetto fatale: la libreria assemblava funzioni JavaScript componendo alla cieca stringhe provenienti da nomi di schema forniti dall’utente, per poi eseguirle usando il famigerato costruttore Function(). Senza un’adeguata sanitizzazione, un attaccante potrebbe creare uno schema malevolo che inietta di nascosto il proprio codice nella funzione generata - codice che verrebbe eseguito nel momento stesso in cui l’applicazione elaborasse il messaggio contaminato.

Le implicazioni sono gravi. Qualsiasi server o applicazione che caricasse schemi controllati da un attaccante potrebbe essere compromesso all’istante. Ciò significa che un intruso potrebbe accedere alle variabili d’ambiente, rubare credenziali, frugare nei database o persino muoversi lateralmente all’interno dei sistemi interni. Nemmeno gli ambienti di sviluppo erano immuni: la semplice decodifica locale di uno schema non attendibile potrebbe attivare l’exploit.

Tracciata come GHSA-xq3m-2v4x-88gg (in attesa di una CVE), la vulnerabilità è stata divulgata responsabilmente da Cristian Staicu il 2 marzo. Nel giro di pochi giorni, i maintainer di Protobuf.js si sono affrettati a correggere il problema su GitHub, rilasciando pacchetti npm risolti all’inizio di aprile. La patch ora elimina i caratteri non alfanumerici dai nomi dei tipi, bloccando le vie d’attacco più immediate - anche se gli esperti avvertono che serve una riprogettazione più fondamentale per eliminare davvero il rischio.

L’avviso di Endor Labs non usa mezzi termini: “Lo sfruttamento è semplice.” Il proof-of-concept incluso dimostra quanto sia facile trasformare questa svista in un’arma. Anche se non ci sono prove di attacchi in corso (per ora), la popolarità enorme di Protobuf.js significa che la finestra per uno sfruttamento di massa è spalancata - a meno che gli utenti non aggiornino tempestivamente.

Oltre alla patch, i team di sicurezza sono invitati a verificare le dipendenze, trattare gli schemi come input non attendibile e preferire, quando possibile, schemi statici o precompilati. La lezione è chiara: nell’era delle supply chain software, anche la più piccola stringa non controllata può disfare la trama della fiducia digitale.

Mentre il mondo JavaScript si affanna ad aggiornare e a rafforzare le proprie difese, l’incidente Protobuf.js è un monito netto: la comodità nel codice può avere un costo di sicurezza elevatissimo. La prossima volta che la tua app analizza uno schema, considera che cosa - o chi - potrebbe nascondersi al suo interno.

WIKICROOK

  • Esecuzione di codice da remoto (RCE): L’esecuzione di codice da remoto (RCE) si verifica quando un attaccante esegue il proprio codice sul sistema della vittima, spesso arrivando al controllo completo o alla compromissione di quel sistema.
  • Protocol Buffers (Protobuf): Protocol Buffers (Protobuf) è un metodo di serializzazione dei dati spesso usato dal malware per nascondere o offuscare le comunicazioni di comando e controllo.
  • Node Package Manager (npm): Node Package Manager (npm) gestisce le librerie JavaScript, consentendo agli sviluppatori di installare, condividere e aggiornare codice in modo sicuro ed efficiente per progetti web.
  • Generazione dinamica di codice: La generazione dinamica di codice consente ai programmi di creare ed eseguire codice a runtime, aumentando la flessibilità ma introducendo anche potenziali vulnerabilità di sicurezza se non gestita correttamente.
  • Schema: Uno schema è un modello che organizza e definisce le strutture dei dati, garantendo coerenza e riducendo gli errori quando database o applicazioni cambiano.
Protobuf.js JavaScript security remote code execution

SECPULSE SECPULSE
SOC Detection Lead
← Back to news