I ricercatori di GitGuardian hanno pubblicato i risultati di un'analisi dei dati sensibili dimenticati dagli sviluppatori nel codice caricato nel repository dei pacchetti Python PyPI (Python Package Index). Dopo aver esaminato oltre 9,5 milioni di file e 5 milioni di versioni di pacchetti, associati a 450.000 progetti, sono stati identificati 56.866 casi di fuga di dati sensibili. Considerando solo i dati unici, senza duplicati tra diverse versioni, il numero di fughe identificate è stato di 3.938, mentre il numero di progetti in cui è presente almeno una fuga è di 2.922.
Sono stati identificati oltre 150 tipi di fuga di informazioni sensibili, tra cui password comuni, chiavi crittografiche, token di accesso a servizi cloud, sistemi di integrazione continua e API. Almeno 768 credenziali erano attive al momento della ricerca. Come esempio delle fughe popolari che rimangono rilevanti, vengono menzionate le chiavi di accesso ad Azure Active Directory, le credenziali SSH, MongoDB, MySQL e PostgreSQL, le chiavi per le GitHub OAuth App, Dropbox e Auth0, e i parametri di accesso per Coinbase e Twilio.
Tra i tipi di fuga in crescita, si segnalano i token per l'accesso ai bot di Telegram, il cui numero è raddoppiato all'inizio del 2021 e si è nuovamente raddoppiato nella primavera del 2023. Dall'inizio del 2020 si registra anche una crescita continua delle fughe di chiavi di accesso a Google API, mentre dal 2022 si osservano fughe di credenziali di database. Tra i pacchetti con il maggior numero di fughe, si segnalano i pacchetti chatllm e safire, in cui sono state dimenticate 209 chiavi per OpenAI e 320 chiavi per Google Cloud.
Tra i tipi di file in cui è stato riscontrato il maggior numero di fughe, oltre ai file con estensione «.py», si evidenziano i file con estensione .json (610 fughe), .md (270), PKG-INFO (240), METADATA (210), .txt (170), così come i file README (209) e i file contenuti in directory chiamate test (675). Molte fughe sono anche correlate a distrazioni ed errori nella configurazione delle eccezioni di file durante la creazione di pacchetti. Ad esempio, i file con configurazioni locali (.cookiecutterrc, .env, .pypirc, ecc.) possono essere esclusi dal repository Git tramite il file «.gitignore», che non viene considerato durante la creazione del pacchetto. In particolare, nel repository sono stati trovati 43 file .pypirc contenenti credenziali per l'accesso a PyPI. In 15 casi di fughe, gli sviluppatori non intendevano pubblicare pacchetti creati originariamente per uso interno, ma li hanno pubblicati per errore su PyPI.
In aggiunta, si possono menzionare altri due eventi legati a PyPI:
- Sono stati trovati 8 pacchetti dannosi nel repository di PyPI, presentati come utilità per l'offuscamento, ovvero la trasformazione del codice in una forma illeggibile, rendendo difficile il ripristino dell'algoritmo di funzionamento. I pacchetti identificati contenevano nel nome la stringa «pyobf» (Pyobftoexe, Pyobfusfile, Pyobfexecute, Pyobfpremium, Pyobflight, Pyobfadvance, Pyobfuse e pyobfgood) e sono stati scaricati oltre 2000 volte.
Il codice dannoso integrato nei pacchetti era specifico per la piattaforma Windows e consentiva di connettersi a un controllore esterno server, eseguire comandi arbitrari sul computer dello sviluppatore, trovare e inviare informazioni riservate a un server esterno, come chiavi di accesso, e trasferire file arbitrari dal sistema. Inoltre, il codice dannoso poteva fungere da keylogger, intercettare le password digitate in Chrome, creare screenshot, registrare audio e persino controllare la webcam.
- Sono stati pubblicati i risultati di un audit indipendente del codice sorgente dell'insieme di strumenti utilizzato per gestire il repository pypi.org e del framework «cabotage», coinvolto nell'infrastruttura per l'orchestrazione dei container. L'audit è stato condotto con il supporto dell'organizzazione non profit OTF (Open Technology Fund). Durante l'audit non sono state riscontrate problematiche di alto rischio, e i codici sorgenti sono stati giudicati conformi ai principali requisiti per una scrittura sicura del codice. Tuttavia, è stata evidenziata una copertura insufficiente dei test del codice sorgente di cabotage e sono state riscontrate 29 problematiche, delle quali otto sono state classificate come di rischio moderato, 6 come basse e 14 come osservazioni informative.
Le problematiche più evidenti:
- Una verifica insufficiente delle firme digitali utilizzate per l'integrazione di PyPI con AWS SNS ha consentito l'invio di notifiche alle email di singoli utenti.
- Una fuga di informazioni nel gestore di upload, che consentiva di determinare l'esistenza di un account senza generare eventi di tentativi di accesso.
- L'uso di hash crittografici inaffidabili, che non escludono attacchi di avvelenamento della cache.
- Con i diritti per avviare processi di build tramite cabotage, un attaccante avrebbe potuto potenzialmente sostituire i propri comandi.
- Con i diritti di deploy in cabotage, un attaccante avrebbe potuto potenzialmente distribuire un'immagine apparentemente legittima.
Fonte: opennet.ru
