Il 13 aprile 2026 la Python Software Foundation ha registrato CVE-2026-6100, una vulnerabilità use-after-free nei decompressori nativi di CPython che può attivarsi quando un'istanza riutilizzata incontra una condizione di memoria esaurita. Il punteggio CVSS 4.0 è 9.1 CRITICAL, un valore che colloca il bug nella fascia più alta di gravità nonostante le condizioni di attacco siano circoscritte: la combinazione di memory pressure e pattern di riutilizzo specifico rende questo caso un esempio emblematico di come la gestione degli stati d'errore nel runtime più diffuso al mondo stia diventando territorio di ricerca per attacchi sofisticati.
- Le classi
lzma.LZMADecompressor,bz2.BZ2Decompressoregzip.GzipFiledi CPython contengono un use-after-free attivabile al riutilizzo post-MemoryError - Il punteggio CVSS 4.0 è 9.1 CRITICAL secondo il record ufficiale CVE.org, con vettore di rete e impatto totale su confidenzialità e integrità
- CISA ha valutato exploitation "none" e automazione "no" nel framework SSVC, indicando assenza di exploit noti e difficoltà di attacco automatizzato
- Le funzioni helper one-shot come
lzma.decompress()non sono vulnerabili perché creano una nuova istanza per ogni chiamata
Il meccanismo: quando il fallimento della memoria lascia un puntatore fantasma
Secondo la descrizione tecnica dell'advisory originale, il bug risiede nel ciclo di vita degli oggetti decompressore CPython: quando un'allocazione di memoria fallisce con MemoryError, il puntatore interno all'oggetto non viene invalidato. Il riutilizzo successivo dell'istanza in stato parzialmente inizializzato provoca accesso a memoria già liberata, con potenziale sovrascrittura di metadata heap e hijacking dell'esecuzione. Questo pattern è classico nel software systems ma raro nei linguaggi ad alto livello come Python, dove il garbage collection e l'astrazione della memoria tendono a nascondere queste fragilità.
La condizione di trigger richiede esplicitamente due elementi concatenati: una pressione di memoria che causi il fallimento dell'allocazione, e una logica applicativa che riutilizzi l'istanza decompressore anche dopo che l'eccezione è stata sollevata. Non è uno scenario comune nel codice idiomatico Python, dove MemoryError è tipicamente gestita come condizione terminale o propagata. Tuttavia, in sistemi di elaborazione dati batch, pipeline di decompressione stream, o servizi long-running con pattern di object pooling, il riutilizzo di istanze è una pratica consolidata.
"Use-after-free (UAF) was possible in thelzma.LZMADecompressor,bz2.BZ2Decompressor, andgzip.GzipFilewhen a memory allocation fails with aMemoryErrorand the decompression instance is re-used"
— systemtek.co.uk, riportando la descrizione CVE della Python Software Foundation
La lettura del punteggio: perché CVSS 9.1 con condizioni così strette
Il record ufficiale CVE.org assegna a CVE-2026-6100 il punteggio 9.1 CRITICAL con vettore CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N. La combinazione di attacco di rete (AV:N) e impatto elevato su confidenzialità e integrità (VC:H, VI:H) spinge il punteggio verso l'alto, nonostante la complessità dell'attacco (AC:H) e la necessità di condizioni particolari (AT:P, atomicity presente). La formula CVSS 4.0, diversamente dalla versione 3.1, separa più nettamente i componenti e penalizza meno le condizioni di accesso complesse quando l'impatto tecnico resta totale.
NVD riporta invece il vettore v3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H senza esplicitare il punteggio numerico nel testo estratto dal dossier. Le CWE associate nel record NVD sono tre: CWE-416 (Use After Free), CWE-787 (Out-of-bounds Write) e CWE-825 (Expired Pointer Dereference), a conferma della natura multi-facettata del bug che attraversa la corruzione di memoria fino al potenziale controllo del flusso di esecuzione.
CISA, attraverso il programma ADP, ha aggiunto il 17 giugno 2026 una valutazione SSVC che fissa exploitation a "none", automatable a "no" e technicalImpact a "total". Questa triade è significativa: tecnicamente il bug permette impatto totale, ma non esistono exploit noti al momento e l'attacco non è automatizzabile in modo scalabile. La discrepanza tra gravità teorica e rischio operativo immediato è il cuore della "vulnerabilità silenziosa" che il caso CVE-2026-6100 rappresenta.
Cosa sappiamo sulle patch e i vendor
Il dossier documenta un fix specifico per Oracle Linux 8: Snyk riporta l'aggiornamento del pacchetto platform-python alla versione 0:3.6.8-76.0.1.el8_10 o superiore. Red Hat ha inoltre modificato il record NVD il 14 luglio 2026 aggiungendo CPE per multiple versioni RHEL, segnalando copertura del bug nel proprio ecosistema. Il dossier non documenta invece dettagli di commit o rilascio patch direttamente dalla Python Software Foundation, né versioni specifiche di CPython interessate oltre a quelle implicate dai pacchetti vendor.
La classificazione di Snyk posiziona il componente come "bound to the network stack", con attacco possibile da Internet. Questa etichetta non implica che il bug sia sfruttabile via un semplice payload di rete: indica piuttosto che il codice vulnerabile risiede in un percorso eseguibile in contesti di servizio network-facing, dove dati compressi da remoto raggiungono i decompressori CPython. La distinzione è sottile ma rilevante per la valutazione del perimetro di esposizione.
Cosa fare adesso
- Verificare se il codice in produzione riutilizza istanze di
LZMADecompressor,BZ2DecompressoroGzipFiledopo eccezioni, sostituendo il pattern con istanze fresh o con le funzioni one-shotlzma.decompress(),bz2.decompress(),gzip.decompress() - Applicare gli aggiornamenti di sicurezza del sistema operativo dove disponibili, prioritariamente su Oracle Linux 8 con
platform-python >= 0:3.6.8-76.0.1.el8_10, e monitorare i canali di sicurezza Red Hat per le versioni RHEL interessate - Ispezionare i log applicativi per pattern ricorrenti di
MemoryErrornelle componenti di decompressione, che possono indicare condizioni di memoria sottopressione che rendono il bug teorico attivabile - Privilegiare le funzioni helper one-shot nel nuovo codice, dato che il dossier le esclude esplicitamente dalla superficie di attacco grazie alla creazione di nuova istanza per ogni invocazione
Il confine tra garbage collection e sicurezza di sistema
CVE-2026-6100 rivela una tensione crescente nel design dei runtime moderni: l'astrazione della memoria non elimina la necessità di gestione esplicita degli stati d'erroce nelle estensioni C sottostanti. CPython, che delega le operazioni di decompressione a librerie native con binding Python, espone qui il confine fragile tra il mondo gestito e quello non gestito. La Python Software Foundation come CNA ha riconosciuto tempestivamente la vulnerabilità, ma la natura del fix — pulire il dangling pointer nella condizione di errore — è un richiamo a pratiche di defensive programming più comuni nel kernel che in un linguaggio di alto livello.
Per i team DevOps e i security engineer, il caso offre un invito concreto: auditare non solo le dipendenze esterne ma i pattern di gestione errore nel proprio codice, specialmente dove oggetti con stato interno complesso vengono mantenuti attivi attraverso cicli eccezionali. La memoria esaurita non è più solo un problema di affidabilità: in CVE-2026-6100, è il trigger che trasforma un bug di gestione stato in una vulnerabilità critica.
Fonti
- https://www.systemtek.co.uk/2026/04/critical-severity-vulnerability-affecting-cpython-cve-2026-6100/
- https://nvd.nist.gov/vuln/detail/CVE-2026-6100
- https://www.cve.org/CVERecord?id=CVE-2026-6100
- https://security.snyk.io/vuln/SNYK-ORACLE8-PLATFORMPYTHON-16323449
Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.
Fonti
- https://www.esri.com/arcgis-blog/products/trust-arcgis/administration/april2026_security_bulletin
- https://nvd.nist.gov/vuln
- https://nvd.nist.gov/vuln/search
- https://nvd.nist.gov/vuln/categories
- https://nvd.nist.gov/vuln/data-feeds
- https://nvd.nist.gov/vuln/vendor-comments