Se sei un programmatore o anche se sei solo un appassionato dell’omonimo linguaggio di programmazione (ossia Python), allora sappi che puoi avere il tuo (o i tuoi) progetto/i a rischio sicurezza.
Si stima che fino a 350.000 progetti open source siano potenzialmente a rischio di attacco a causa di un difetto di sicurezza in un modulo Python rimasto senza patch per 15 anni.
I repository open source hanno una serie di settori di sviluppo, come lo sviluppo di software, l’intelligenza artificiale (apprendimento automatico o machine learning in gergo), lo sviluppo web, i media, la sicurezza e la gestione dell’IT.
In cosa consiste questa vulnerabilità che riguarda i repository del linguaggio di programmazione Python?
La mancanza, indicata come CVE-2007-4559 (punteggio CVSS: 6,8), è radicata nel modulo tarfile, il cui sfruttamento riuscito potrebbe portare all’esecuzione di codice da una scrittura arbitraria di file.
“La vulnerabilità è un attacco che attraversa un percorso tramite le funzioni di extract ed extractall nel modulo tarfile che consentono a un utente malintenzionato di sovrascrivere file arbitrariamente aggiungendo la sequenza ‘..’ ai nomi dei file in un archivio TAR“, ha affermato il ricercatore di sicurezza di Trellix, Kasimir Schulz, in una sua pubblicazione.
Originariamente divulgato nell’agosto 2007, il bug ha a che fare con il modo in cui un archivio tar appositamente predisposto può essere sfruttato per sovrascrivere file arbitrariamente su una macchina (nel senso un personal computer, non l’automobile…) di destinazione semplicemente all’apertura del file.
In parole povere, una persona malintenzionata può sfruttare questa vulnerabilità di Python caricando un file tar dannoso in un modo che consenta di sfuggire alla directory in cui un file deve essere estratto e ottenere l’esecuzione di codice, consentendo all’avversario di prendere potenzialmente il controllo di un obiettivo dispositivo.
Come ci si difende da questa vulnerabilità Python secondo gli esperti?
“Non estrarre mai archivi da fonti non attendibili senza un’ispezione preventiva“, si può leggere nella documentazione Python per tarfile. “È possibile che i file vengano creati al di fuori del percorso, ad esempio membri che hanno nomi di file assoluti che iniziano con ‘/’ o nomi di file con due punti ‘..’.”
La vulnerabilità è anche une “reminiscenza” di un difetto di sicurezza recentemente rivelato nell’utilità UnRAR di RARlab (CVE-2022-30333) che potrebbe portare all’esecuzione di codice in modalità esecuzione da remoto.
Trellix ha inoltre rilasciato un’utility personalizzata che si chiama Creosote per la scansione di progetti vulnerabili a CVE-2007-4559, utilizzandola per scoprire la vulnerabilità nell’IDE Spyder Python e Polemarch.
“[Se] Non controllata, questa vulnerabilità è stata aggiunta involontariamente a centinaia di migliaia di progetti open e closed-source in tutto il mondo, creando una notevole superficie di attacco della catena di fornitura del software“, rende noto Douglas McKee in una sua pubblicazione.
Lascio un video che mostra il bug nella sua essenza; sostanzialmente nel video viene mostrato come un hacker può interagire.
“Ma io ho diversi miei programmi sviluppati in Python, esiste un modo per proteggersi da questa vulnerabilità?”
Partiamo da un presupposto molto curioso: le vulnerabilità citate hanno tutte bisogno di una connessione ad internet per funzionare.
Che tu abbia Windows o Linux non fa molta differenza, visto le vulnerabilità non riguardano i sistemi operativi.
Piccolo appunto: se sei utente Linux in questo caso specifico dovrai fare un tantino più di attenzione rispetto ad un utente Windows, molte distribuzioni di Linux, infatti, scaricano in automatico molti moduli Python.
Hai presente quando fai “sudo apt update”, e poi fai “sudo apt list –upgradable” e non è affatto inusuale vedere repository di quel linguaggio programmazione che molti amano? Ecco.
Resta il fatto che molti di questi software possono essere programmati anche disconnessi dalla rete, per fortuna.
Al limite se sei “fobico” puoi usare una VPN (un po’ esagerato, ma perché no?).
Allo stato attuale (almeno da connessi alla rete internet) non esiste una vera e propria soluzione, se non aspettare che gli sviluppatori che gestiscono questi repository sistemino il tutto.