vLLM vulnerabilità SHM nel cache multimodale shm
vLLM vulnerabilità SHM pubblicata il 20 ottobre 2026 (GHSA-6757-hggm-hp2w) collega handle shm falsificato a pickle nel worker, CVSS 8.8 e patch nella 0.32.0.
In questo articolo
Il 20 ottobre 2026 il progetto vLLM ha pubblicato l’advisory GHSA-6757-hggm-hp2w. La vLLM vulnerabilità SHM è un difetto di confine in cui un handle di memoria condivisa falsificato può arrivare a pickle.loads() nel worker quando il deploy usa mm-processor-cache-type shm. L’avviso ufficiale indica High, CVSS 8.8, impatto fino alla 0.25.1 e correzione nella 0.32.0.
Per chi gestisce una piattaforma di inferenza multimodale, il punto operativo è separare l’ottimizzazione IPC dalla prova di origine dell’handle. La cache multimodale shm vLLM esiste per ridurre le copie tra processi, e diventa incidente solo quando il chiamante autenticato consegna un carrier che il worker continua a fidarsi senza validazione crittografica. Questo articolo spiega cosa afferma l’advisory, perché la deserializzazione pickle worker al bordo conta, come inventariare il flag, come salire alla linea corretta e come ridisegnare il bordo a livello concettuale, senza passi di sfruttamento.
Se il cluster non abilita shm, il rischio descritto in questo advisory non si applica allo stesso modo, anche se la revisione di versione resta utile perché la 0.32.0 chiude altri avvisi nella stessa finestra. Se invece il flag è attivo, trattate patch e modello di fiducia come priorità di ingegneria, non come ritocco cosmetico del changelog.
Cosa afferma l’advisory GHSA-6757-hggm-hp2w su versioni e CVSS?#
L’avviso classifica il caso come High, con CVSS v3.1 a 8.8, CWE-502, pacchetto pip vllm interessato fino alla 0.25.1 e versione corretta 0.32.0. La conferma citata nel testo include la 0.25.1 nel commit 752a3a504485, e il vettore richiede privilegio basso, cioè un chiamante autenticato e non un visitatore anonimo senza credenziali.
Secondo l’advisory GHSA-6757-hggm-hp2w, lo scenario richiede mm-processor-cache-type shm e non dipende da VLLM_ALLOW_INSECURE_SERIALIZATION attivo. L’impatto dichiarato è esecuzione di Python arbitrario nel processo worker in deploy con cache multimodale SHM, oltre a un effetto collaterale osservato sulla salute di EngineCore dopo la catena di prova del ricercatore. L’indice Traceary degli advisory di vLLM rispecchia la stessa data, severità high e correzione nella 0.32.0.
Un dettaglio di inventario conta per l’ingegnere di piattaforma. L’avviso elenca le versioni affette come minori o uguali a 0.25.1 e la patched come 0.32.0, senza trasformare l’intervallo intermedio in un elenco esplicito di versioni sicure per omissione. In pratica, la linea che l’editore indica come correzione è la 0.32.0, e chi è sotto quella linea deve incrociare lo SHA deployato con l’advisory prima di dichiarare conformità. L’assenza di un CVE numerico nel testo del GHSA, nella consultazione di questa materia il 21 ottobre 2026, non riduce la priorità dell’identificatore GitHub Security Advisory.
In operazione, l’errore costoso è leggere solo il numero CVSS e ignorare le precondizioni. Un otto virgola otto con privilegio basso cambia la coda di risposta quando l’API di inferenza autentica già clienti interni o partner e, allo stesso tempo, espone rotte scale-out sulla stessa superficie. Io priorizzo inventario di versione e del flag shm nello stesso ticket, perché uno senza l’altro produce falsi negativi.
Perché la deserializzazione al confine di fiducia è un problema di architettura?#
Deserializzare un dato che ha attraversato un confine senza prova di origine trasforma il formato di trasporto in superficie di esecuzione. MITRE lo descrive come CWE-502, e OWASP riassume lo stesso schema in Insecure Deserialization, con conseguenze che vanno dall’abuso di logica all’esecuzione di codice e alla negazione di servizio.
Nel disegno di un motore di inferenza, il confine non è solo il TLS sulla porta pubblica. Esistono confini interni tra processo API, engine core e worker, e confini logici tra tensore elaborato dal server e struttura inviata dal cliente autenticato. Quando un handle di memoria condivisa viene accettato come se fosse un token di capacità emesso dal server stesso, la fiducia migra dall’emittente al contenuto della richiesta. Nei sistemi distribuiti equivale a trattare un puntatore remoto come capability senza sigillo.
La trappola classica è pensare che disattivare la serializzazione non sicura risolva l’intera classe. L’advisory rende chiaro che la catena arriva a pickle.loads() del deserializzatore SHM incorporato anche con il flag opzionale di serializzazione non sicura disattivo. In altre parole, il controllo di configurazione che il team ricorda nel runbook può non coprire il percorso che la cache shm usa davvero. Un’altra trappola è isolare solo la rete est-ovest e lasciare che l’API autenticata consegni carrier opachi senza validazione di integrità sul bordo scale-out.
Dal punto di vista della piattaforma, tratto ogni loads di oggetto nativo su un percorso alimentato da request come debito di fiducia finché non esiste binding crittografico o formato solo dati. Il costo di performance dello shm si giustifica solo quando la capacità che autorizza la lettura resta sovrana del server. Quando quella sovranità sparisce, il guadagno di IPC diventa leva sul worker.
vLLM vulnerabilità SHM e il ruolo della cache multimodale in memoria condivisa#
La vLLM vulnerabilità SHM nasce dal modo in cui la cache multimodale shm rappresenta un elemento per address e monotonic_id e tratta quella coppia come autorità per dereferenziare memoria condivisa nel worker. Così, una request scale-out autenticata che fornisce features.kwargs_data può caricare un carrier interno falsificato che punta a byte già presenti nel ring buffer, e il worker deserializza quell’oggetto con pickle.loads().
La documentazione ufficiale spiega il motivo legittimo della funzione. In Optimization and Tuning, la cache in shared memory è presentata come opzione più efficiente quando ci sono più worker, ad esempio con tensor parallelism maggiore di 1, tenendo le chiavi nel processo API e i dati elaborati nella memoria condivisa. Il default documentato del tipo di cache, però, è lru, e shm va scelto in modo esplicito. Quindi l’ottimizzazione è opt-in operativo, non un dettaglio invisibile di ogni installazione multimodale.
L’advisory lega il rischio a file e frammenti concreti della linea 0.25.1, tra cui la deserializzazione SHM che arriva a pickle.loads per oggetti byte, l’emissione del carrier solo con indirizzo e id, la lettura nel worker senza binding alla cache key, e la rotta scale-out che decodifica kwargs_data senza autenticare l’handle prima del passaggio all’engine. L’«e se» rilevante per l’architettura è semplice. Se il chiamante è già autenticato e la rotta pubblica accetta il carrier, l’autenticazione utente non sostituisce l’autenticazione dell’handle.
Nella pratica, ciò che vedo più spesso nei post-mortem di piattaforma è il team che celebra il guadagno di TTFT della cache shm e dimentica che l’handle è diventato un secondo protocollo di fiducia. Mantengo shm attivo solo dopo la patch e dopo aver garantito che il bordo rifiuti carrier senza capability emessa dal server, perché performance senza prova di origine è debito con interessi sul worker.
Quali precondizioni e flag rendono il deploy elegibile allo scenario dell’avviso?#
Il deploy entra nello scope dell’avviso quando combina versione vulnerabile, cache multimodale di tipo shm e un chiamante autenticato capace di parlare con le rotte HTTP ordinarie usate nella catena descritta. L’advisory richiede mm-processor-cache-type shm, conferma l’impatto con chiamante autenticato e afferma la raggiungibilità senza la serializzazione non sicura opzionale attiva.
Gli argomenti di engine documentati in Engine Arguments rendono chiara la mappa operativa. Il flag mm-processor-cache-type accetta lru oppure shm, con default lru. Il budget mm-processor-cache-gb ha default 4 GiB, e mm-shm-cache-max-object-size-mb ha senso solo con tipo shm, default 128. Se il tipo non è shm, regolare la dimensione massima dell’oggetto shm non dovrebbe neppure essere configurazione attiva. Questa combinazione aiuta a trovare footprint reali in valori Helm, unit systemd, manifest e script di vllm serve.
Ci sono eccezioni che cambiano l’urgenza relativa. Un cluster solo testo, senza percorso multimodale scale-out, riduce la superficie di questo avviso specifico, anche se non autorizza a ignorare la linea 0.32.0 se altri advisory della stessa release sono applicabili. Un ambiente con autenticazione debole o chiave condivisa tra molti tenant aumenta il valore pratico del privilegio basso nel CVSS, perché quella precondizione smette di essere un analista isolato e diventa qualsiasi integrazione con token valido. Un ambiente air-gapped resta elegibile se l’attaccante ha già una credenziale interna.
Il criterio che uso in triage è binario al primo taglio. Se il flag shm compare nell’inventario e la versione è anteriore alla 0.32.0 indicata come patched, l’elemento sale a correzione accelerata. Se il flag non compare, registro comunque la versione, perché domani qualcuno attiva shm per throughput e eredita il bug senza un nuovo ticket.
Come sapere se il cluster usa mm-processor-cache-type shm?#
Confermate l’uso di shm con l’inventario della configurazione effettiva del processo, non con il nome del modello né con la presenza di immagini nel traffico. Cercate il flag CLI, il campo mm_processor_cache_type in codice o chart, e il valore risolto nella configurazione dell’engine a runtime.
Una lettura utile della documentazione ufficiale è la tabella di placement della cache. In modalità shm, le chiavi restano nel processo API e il valore elaborato resta accessibile ai worker via shared memory. In lru, l’assetto speculare o key-replicated è diverso, e il default documentato favorisce lru. Quindi la multimodalità da sola non prova shm. Un tensor parallelism alto aumenta la probabilità che qualcuno abbia abilitato shm per prestazioni, ma la prova resta la config.
Usate la tabella sotto come checklist di lettura dell’inventario.
| Segnale nel deploy | Cosa indica | Azione immediata |
|---|---|---|
| mm-processor-cache-type shm oppure mm_processor_cache_type uguale a shm | Cache SHM multimodale attiva | Priorizzare upgrade alla linea patched e rivedere il bordo |
| Tipo assente oppure lru | Default documentato, non è la modalità dell’advisory | Registrare comunque la versione e monitorare i cambi di chart |
| mm-shm-cache-max-object-size-mb definito | Forte indizio di intenzione shm | Confermare il tipo reale, perché il parametro vale solo con shm |
| mm_processor_cache_gb uguale a 0 | Cache disabilitata secondo la docs | Il rischio di questo advisory scende, con costo di rielaborazione |
Se esistono più pool, inventariate ciascuno. Un canary con shm e un pool legacy con lru generano risposte diverse nello stesso prodotto. Controllate anche overlay di staging che copiano flag di produzione solo per misurare TTFT e dimenticano di tornare indietro.
Quando faccio audit di flotta, parto dai values dell’orchestratore e solo dopo guardo il processo vivo, perché il drift tra manifesto e argv è comune nei restart manuali. Il segnale che evita più sorprese è un controllo di configurazione che fa fallire il deploy se shm è attivo sotto la versione minima sicura.
Come aggiornare alla versione corretta senza trattare il numero come dettaglio?#
La correzione indicata dall’advisory è la 0.32.0 del pacchetto vllm, e la disciplina corretta è promuovere un artefatto pinnato, validare il multimodale e solo poi tagliare il traffico. L’indice delle release notes della 0.32.0 su Traceary descrive questa versione come chiusura di diversi advisory, incluso GHSA-6757-hggm-hp2w, e menziona handle della cache multimodale in shared memory firmati con HMAC e rifiuto di handle falsificati. Chi segue vLLM 0.32.0 sicurezza nell’inventario deve incrociare quella chiusura con lo SHA dell’immagine, non solo con l’etichetta del chart.
Il versionamento semantico aiuta a leggere il salto, ma non sostituisce l’advisory. Passare da 0.25.1 a 0.32.0 è un cambio di linea con superficie ampia, quindi il rischio operativo dell’upgrade esiste anche quando il rischio di sicurezza del bug è maggiore. Per questo il piano serve canary, smoke multimodale e criterio di rollback esplicito. Vale anche ricordare che essere sopra la 0.25.1 non è, di per sé, il linguaggio dell’avviso. Il linguaggio dell’avviso per la correzione è la 0.32.0.
Seguite questi passi in ordine.
- Inventariate la versione installata (pip show vllm, immagine OCI o lockfile) e la presenza di mm-processor-cache-type shm in ogni pool.
- Montate un artefatto pinnato sulla 0.32.0 o superiore patched, con dipendenze CUDA e torch verificate nell’ambiente target.
- Alzate un canary con lo stesso carico multimodale rappresentativo e verificate la salute di EngineCore oltre alla rotta di completions.
- Solo dopo promuovete il resto, mantenendo una finestra di osservazione e rollback allo SHA precedente se compaiono latenza o errori di cache.
Il limite onesto è che la patch dell’editore riduce la classe di falsificazione di handle descritta, ma non trasforma un’autenticazione debole dell’API in un disegno sicuro. Senza controllo su chi chiama il bordo, avete solo accorciato un percorso.
Non faccio upgrade silenziosi di venerdì. In una flotta di inferenza, la combinazione che funziona è pin di versione, canary multimodale e allarme di salute dell’engine nello stesso change, perché l’advisory racconta anche un calo di health dopo la catena di prova.
Come progettare il bordo con autenticazione, rete e rifiuto concettuale di handle falsificato?#
Il bordo sicuro per questo rischio combina tre strati. Autenticare il chiamante, restringere chi raggiunge le rotte scale-out e rifiutare handle che non portino capability emessa e legata a cache key, address e monotonic id. Lo stesso advisory suggerisce di autenticare ogni carrier SHM con capability di server, ruotare il segreto nel clear() della cache e bloccare carrier malformati prima del passaggio all’engine. Il PR di autenticazione degli handle SHM descrive la correzione come HMAC su cache key, address e id, con validazione prima della lettura della memoria condivisa.
Questo si allinea a ciò che OWASP raccomanda per la deserializzazione non sicura, cioè integrità tramite firma o meccanismo equivalente, restrizione dei tipi e isolamento del codice che ricostruisce oggetti. Concettualmente, l’handle smette di essere un puntatore affidabile e diventa una capability verificabile. In rete, il disegno difensivo evita che qualsiasi cliente dell’API di chat parli direttamente con interfacce interne di generate o scale-out pensate per componenti del sistema stesso.
Autenticazione utente e autorizzazione di rotta sono temi distinti, e la sicurezza delle API spesso fallisce quando il token valido per completions serve anche, senza scope minore, a superfici di trasporto multimodale. Rate limiting e segmentazione aiutano come contenimento, ma non autenticano l’handle. L’«e se» qui è il cliente interno compromesso. Se la capability dipende da un segreto solo nel ring buffer del server e la validazione avviene prima del worker, la falsificazione esterna perde forza anche con un token di inferenza valido.
Lo schema che difendo in review di architettura è capability a vita breve emessa dal sender, binding esplicito alla cache key e fail-closed sul bordo pubblico. Qualsiasi percorso che accetti address grezzo del cliente per dereferenza nel worker torna alla stessa classe CWE-502 sotto un altro nome.
Cosa non si sa ancora e cosa cambia la decisione dopo l’avviso?#
Con le sole fonti aperte di questa materia non si può ancora trattare come fatto un CVE NVD specifico legato a questo GHSA, né il comportamento auditato di ogni minor tra 0.25.2 e 0.31.x su questo percorso. Ciò che è solido il 21 ottobre 2026 è il testo dell’advisory, la data del 20 ottobre 2026, la linea affetta dichiarata fino alla 0.25.1, la patched 0.32.0, il CVSS pubblicato e la dipendenza dal flag shm.
Cambia anche la decisione il vostro modello di minaccia. Se solo operatori privilegiati raggiungono l’API, il privilegio basso del vettore pesa meno che in un endpoint multi-tenant con chiavi cliente. Se dipendete da shm per TP alto in visione, spegnere il flag può essere mitigazione temporanea con costo di throughput, non strategia permanente. Se il prodotto espone scale-out multimodale ad altri servizi, la revisione del contratto di features deve entrare nello stesso epic del bump di versione.
Ciò che farei il lunedì successivo all’avviso è semplice e misurabile. Inventario del flag, pin sulla 0.32.0 in canary, e checklist di bordo che chieda il rifiuto di carrier senza capability. Senza queste tre evidenze, non firmo rischio accettato in un comitato di change.
Domande frequenti su vLLM vulnerabilità SHM#
Queste domande raccolgono i dubbi che compaiono quando il team di piattaforma legge l’advisory per la prima volta e deve decidere inventario, finestra di change e disegno di bordo senza trasformare il post-mortem in tutorial offensivo. Le risposte sotto ripetono solo ciò che le fonti primarie sostengono e segnano il limite di ciò che non è ancora documentato in modo inequivocabile nelle pagine aperte in questa sessione.
La vulnerabilità interessa ogni deploy vLLM multimodale?#
No. L’advisory condiziona lo scenario a mm-processor-cache-type shm e a un percorso in cui il worker tratta la coppia di handle come autorità di lettura. La documentazione ufficiale indica lru come default del tipo di cache, quindi un servizio multimodale può essere fuori da questa modalità. Anche così, confermate la configurazione effettiva di ogni pool, perché chart e overlay spesso attivano shm con TP alto senza avviso nel ticket originale, e la versione resta rilevante per la linea patched 0.32.0.
Spegnere VLLM_ALLOW_INSECURE_SERIALIZATION mitiga il caso?#
No secondo lo stesso advisory. Il testo afferma che la catena è raggiungibile con quella serializzazione non sicura opzionale disattiva, perché abusa del deserializzatore SHM incorporato e non dell’ext-hook msgpack opzionale. Trattare la variabile d’ambiente come unico controllo genera falsa sensazione di sicurezza. La mitigazione allineata all’editore è aggiornare alla 0.32.0 e mantenere la validazione di capability sul carrier, oltre a non esporre rotte interne oltre il necessario.
Qual è la differenza pratica tra aggiornare e solo rimuovere il flag shm?#
Aggiornare alla 0.32.0 applica la correzione descritta, con handle autenticati e rifiuto di falsificazione sul bordo e nel reader. Rimuovere il flag shm può ridurre l’esposizione a questo percorso mentre l’upgrade non chiude, ma restituisce costo di IPC e può degradare workload che dipendevano dalla cache condivisa. Le due azioni non sono equivalenti. In un ambiente che necessita di shm per le prestazioni, la rimozione è un ponte temporaneo, e il pin sulla versione patched resta obbligatorio per chiudere il rischio dichiarato.
Serve un CVE su NVD per aprire un change emergenziale?#
No. L’identificatore operativo di questo caso è GHSA-6757-hggm-hp2w, pubblicato il 20 ottobre 2026 dal repository di vLLM, con versioni e CVSS espliciti. In molti ecosistemi il CVE arriva dopo o in parallelo, e aspettare lo specchio in un aggregatore ritarda il contenimento. Usate il GHSA, lo SHA dell’immagine e l’evidenza del flag shm come base del change, e seguite poi se compare un mapping CVE aggiuntivo senza bloccare la patch.
L’autenticato del CVSS significa che le reti interne sono senza rischio?#
No. Privilegio basso nel vettore significa che l’attaccante modellato possiede già una credenziale tipica di cliente autenticato, non che la rete aziendale sia una zona senza minaccia. Nelle piattaforme multi-tenant, una chiave API di un solo cliente soddisfa già quella precondizione. Per questo segmentazione delle rotte scale-out, scope minimi e rifiuto di handle falsificato restano necessari dopo un login riuscito.
Come validare l’upgrade senza riprodurre uno sfruttamento?#
Validare per via difensiva. Confermate la versione 0.32.0 o superiore patched sull’artefatto, confermate se shm resta necessario, esercitate traffico multimodale legittimo di canary e osservate salute di EngineCore, errori di cache e latenza. Rifiutare carrier inconsistenti sul bordo e auditarne i log di rifiuto sono segnali di controllo. Non è necessario, e non è appropriato in questo testo, montare una prova offensiva per dichiarare l’ambiente corretto.
Conclusione#
La lettura corretta di GHSA-6757-hggm-hp2w, per chi opera inferenza, è di un difetto di capability nella cache shm multimodale, non di un dettaglio oscuro di pickle in astratto. Il 20 ottobre 2026 l’editore ha documentato severità High, CVSS 8.8, impatto fino alla 0.25.1 e correzione nella 0.32.0, con precondizione chiara sul flag di memoria condivisa e con impatto sul worker anche senza la serializzazione non sicura opzionale.
Per la maggior parte delle flotte, il primo passo è inventariare versione e mm-processor-cache-type, e il secondo è un canary sulla 0.32.0 con smoke multimodale. La risposta cambia quando non usate shm e non esponete scale-out, perché l’urgenza relativa scende, anche se il bump di linea può restare desiderabile per gli altri avvisi della stessa release. In ogni caso, autenticazione del chiamante senza autenticazione dell’handle resta un disegno incompleto.
Se c’è un cambio di abitudine che questo avviso dovrebbe fissare nella piattaforma, è questo. L’ottimizzazione IPC entra in produzione solo quando il bordo sa rifiutare un riferimento che il server non ha emesso.
Questo testo ha carattere informativo ed educativo sull’advisory GHSA-6757-hggm-hp2w e sul disegno difensivo delle piattaforme di inferenza multimodale. Non sostituisce una valutazione professionale di sicurezza, l’inventario del vostro ambiente né un parere formale di change in produzione.
Perguntas frequentes
- La vulnerabilità interessa ogni deploy vLLM multimodale?
- No. L’advisory condiziona lo scenario a mm-processor-cache-type shm e a un percorso in cui il worker tratta la coppia di handle come autorità di lettura. La documentazione ufficiale indica lru come default del tipo di cache, quindi un servizio multimodale può essere fuori da questa modalità. Anche così, confermate la configurazione effettiva di ogni pool, perché chart e overlay spesso attivano shm con TP alto senza avviso nel ticket originale, e la versione resta rilevante per la linea patched 0.32.0.
- Spegnere VLLM_ALLOW_INSECURE_SERIALIZATION mitiga il caso?
- No secondo lo stesso advisory. Il testo afferma che la catena è raggiungibile con quella serializzazione non sicura opzionale disattiva, perché abusa del deserializzatore SHM incorporato e non dell’ext-hook msgpack opzionale. Trattare la variabile d’ambiente come unico controllo genera falsa sensazione di sicurezza. La mitigazione allineata all’editore è aggiornare alla 0.32.0 e mantenere la validazione di capability sul carrier, oltre a non esporre rotte interne oltre il necessario.
- Qual è la differenza pratica tra aggiornare e solo rimuovere il flag shm?
- Aggiornare alla 0.32.0 applica la correzione descritta, con handle autenticati e rifiuto di falsificazione sul bordo e nel reader. Rimuovere il flag shm può ridurre l’esposizione a questo percorso mentre l’upgrade non chiude, ma restituisce costo di IPC e può degradare workload che dipendevano dalla cache condivisa. Le due azioni non sono equivalenti. In un ambiente che necessita di shm per le prestazioni, la rimozione è un ponte temporaneo, e il pin sulla versione patched resta obbligatorio per chiudere il rischio dichiarato.
- Serve un CVE su NVD per aprire un change emergenziale?
- No. L’identificatore operativo di questo caso è GHSA-6757-hggm-hp2w, pubblicato il 20 ottobre 2026 dal repository di vLLM, con versioni e CVSS espliciti. In molti ecosistemi il CVE arriva dopo o in parallelo, e aspettare lo specchio in un aggregatore ritarda il contenimento. Usate il GHSA, lo SHA dell’immagine e l’evidenza del flag shm come base del change, e seguite poi se compare un mapping CVE aggiuntivo senza bloccare la patch.
- L’autenticato del CVSS significa che le reti interne sono senza rischio?
- No. Privilegio basso nel vettore significa che l’attaccante modellato possiede già una credenziale tipica di cliente autenticato, non che la rete aziendale sia una zona senza minaccia. Nelle piattaforme multi-tenant, una chiave API di un solo cliente soddisfa già quella precondizione. Per questo segmentazione delle rotte scale-out, scope minimi e rifiuto di handle falsificato restano necessari dopo un login riuscito.
- Come validare l’upgrade senza riprodurre uno sfruttamento?
- Validare per via difensiva. Confermate la versione 0.32.0 o superiore patched sull’artefatto, confermate se shm resta necessario, esercitate traffico multimodale legittimo di canary e osservate salute di EngineCore, errori di cache e latenza. Rifiutare carrier inconsistenti sul bordo e auditarne i log di rifiuto sono segnali di controllo. Non è necessario, e non è appropriato in questo testo, montare una prova offensiva per dichiarare l’ambiente corretto.