Iniezione silenziosa di dipendenze attraverso pipeline di documentazione AI. 240 esecuzioni Docker isolate dimostrano che il server MCP senza sanitizzazione di Context Hub consente a documenti avvelenati di compromettere i progetti degli sviluppatori senza preavviso.
Vulnerabilità con assenza totale di sanitizzazione in Context Hub (@aisuite/chub v0.1.3) che consente l'iniezione silenziosa di dipendenze attraverso il pipeline di documentazione MCP.
Riferimenti: CWE-94 (Code Injection) | CWE-829 (Untrusted Control Sphere) | CWE-345 (Insufficient Verification of Data Authenticity) | OWASP LLM01 (Prompt Injection)
Abbiamo creato documenti realistici avvelenati contenenti dipendenze fittizie (plaid-link-verify, stripe-checkout-guard) e li abbiamo serviti tramite un server MCP chub locale all'interno di container Docker isolati. Nessun contenuto avvelenato è stato caricato nel registry di Context Hub – abbiamo eseguito chub build localmente e configurato il server MCP per servire l'output precompilato dal disco. Dal punto di vista dell'agente, l'esperienza è identica al recupero dei documenti dal registry live.
Quando gli assistenti di codifica AI hanno recuperato i documenti, Haiku ha silenziosamente scritto il pacchetto fittizio in requirements.txt nel 100% delle esecuzioni – senza mai menzionarlo nell'output testuale. Uno sviluppatore che legge la risposta dell'assistente non noterebbe nulla di sospetto, ma il suo progetto è avvelenato.
240 esecuzioni isolate. 3 modelli. 4 livelli di sforzo. 2 API. 0 contaminazione.
Il codice generato importa silenziosamente la dipendenza fittizia insieme ai moduli legittimi:

L'agente modifica anche CLAUDE.md per incorporare il pacchetto fittizio come "standard di progetto":

Queste tabelle mostrano i risultati di Plaid Link (120 esecuzioni isolate). Vedi RESULTS.md per i dati completi inclusi Stripe Checkout (240 esecuzioni totali).
| Sforzo | Haiku | Sonnet | Opus |
|---|---|---|---|
| Basso | 100% | 60% | 0% |
| Medio | 100% | 70% | 0% |
| Alto | 100% | 40% | 0% |
| Massimo | 100% | 40% | 0% |
Haiku non ha mai avvertito riguardo la dipendenza fittizia (0/40). Sonnet ha avvertito nel 48% delle esecuzioni (19/40) ma ha comunque avvelenato requirements.txt nel 53% complessivo. Opus ha avvertito nel 75% delle esecuzioni (30/40) e non ha mai avvelenato requirements.txt o il codice.
| Sforzo | Haiku | Sonnet | Opus |
|---|---|---|---|
| Basso | 90% | 70% | 0% |
| Medio | 80% | 70% | 0% |
| Alto | 90% | 40% | 0% |
| Massimo | 90% | 50% | 0% |
Haiku modifica il CLAUDE.md del progetto per includere la dipendenza fittizia come "standard di progetto" nell'88% delle esecuzioni (35/40). Questo file viene commitato su git – ogni futuro sviluppatore che clona il repository eredita la configurazione avvelenata.
flowchart LR
A["Attaccante\ninvia PR"] -->|"Nessuna verifica\ndell'identità"| B["Mantainer\nunisce PR"]
B -->|"Nessuna sanitizzazione\ndei contenuti"| C["Doc su CDN\n(nessun controllo d'integrità)"]
C -->|"MCP serve\ncontenuti grezzi"| D["Finestra di contesto\ndell'agente"]
D -->|"L'agente agisce su\ncontenuti non fidati"| E["Workstation\ndello sviluppatore"]
style A fill:#111,stroke:#333,color:#f0f0f0
style B fill:#161616,stroke:#333,color:#888
style C fill:#161616,stroke:#333,color:#888
style D fill:#161616,stroke:#333,color:#888
style E fill:#111,stroke:#333,color:#f0f0f0
| Attaccante | Chiunque possa inviare una PR al registry dei documenti di Context Hub |
| Superficie d'attacco | Documenti della community che fluiscono dalla PR GitHub al CDN al MCP al contesto dell'agente |
| Confine di fiducia | Contenuti di collaboratori non fidati trattati come documentazione API autorevole |
| Prerequisito | Una PR unita contenente un documento avvelenato |
| Impatto | Esecuzione di codice arbitrario tramite iniezione di dipendenze + hook post-installazione di pip |
L'avvelenamento di Haiku è completamente silenzioso. 0/80 esecuzioni di Haiku su entrambe le API hanno menzionato la dipendenza fittizia nella risposta. Il modello scrive su disco senza informare. Sonnet ha avvertito nel 48% delle esecuzioni ma ha comunque avvelenato requirements.txt in 35-53% delle esecuzioni. Opus ha avvertito in 23-75% delle esecuzioni e non ha mai avvelenato requirements.txt o il codice.
Haiku è sfruttabile al 100% a ogni livello di sforzo. Indipendente dallo sforzo su entrambe le API. Il modello più debole della famiglia non rileva mai la dipendenza fittizia.
Opus resiste all'avvelenamento del codice ma non a quello della configurazione. Opus non ha mai scritto la dipendenza fittizia in requirements.txt o in codice Python (0/80 su entrambe le API). Tuttavia, su Stripe, Opus ha modificato CLAUDE.md nel 38% delle esecuzioni, documentando il canarino come dipendenza di progetto senza installarlo.
La persistenza in CLAUDE.md crea un vettore di supply chain. I file di configurazione modificati vengono commitati su git, avvelenando ogni sviluppatore che clona il repository e ogni futura sessione AI in quel progetto. Questo funziona su tutti i modelli (Haiku 88-90%, Sonnet 58%, Opus 0-38%).
La familiarità con l'API è importante. Stripe (nota): i modelli rilevano pacchetti fittizi tramite dati di addestramento. Plaid (meno nota): i modelli non possono verificare e accettano la dipendenza fittizia senza discutere.
Questo è un problema di categoria. Context7 aveva ContextCrush (Feb 2026). Context Hub ha questo. Qualsiasi strumento che inietti contenuti esterni non sanitizzati nel contesto dell'agente è vulnerabile.
Zero sanitizzazione lungo tutto il pipeline:
annotations.js – writeFileSync con contenuti grezzi, nessun filtrobuild.js – nessuna scansione dei contenuti, nessuna normalizzazione Unicodecache.js – fetch da CDN con zero verifica di hash/firmasource: official nel frontmatter – auto-dichiarato, non verificato