Il 46% dei pacchetti Python nel repository PyPI contiene codice potenzialmente non sicuro.

Un gruppo di ricercatori dell'Università di Turku (Finlandia) ha pubblicato i risultati di un'analisi dei pacchetti nel repository PyPI in relazione all'uso di strutture potenzialmente pericolose, capaci di generare vulnerabilità. Durante l'analisi di 197 mila pacchetti sono stati identificati 749 mila problemi potenziali di sicurezza. Nel 46% dei pacchetti è presente almeno un problema simile. Tra i problemi più comuni ci sono le insufficienze relative alla gestione delle eccezioni e all'uso di costrutti che consentono l'inserimento di codice.

Dei 749 mila problemi identificati, 442 mila (41%) sono contrassegnati come minori, 227 mila (30%) come problemi di media gravità e 80 mila (11%) come pericolosi. Alcuni pacchetti si distinguono dalla massa e contengono migliaia di problemi: per esempio, nel pacchetto PyGGI sono state trovate 2589 problematiche, principalmente legate all'uso del costrutto "try-except-pass", mentre nel pacchetto appengine-sdk sono stati riscontrati 2356 problemi. Un numero elevato di problemi è presente anche nei pacchetti genie.libs.ops, pbcore e genie.libs.parser.

È importante notare che i risultati sono stati ottenuti attraverso un'analisi statica automatizzata, che non tiene conto del contesto di utilizzo di tali costrutti. Lo sviluppatore dello strumento bandit, utilizzato per eseguire la scansione del codice, ha espresso il parere che, a causa dell'alto numero di falsi positivi, i risultati della verifica non possano essere considerati vulnerabilità senza una successiva revisione manuale di ciascun problema.

Ad esempio, l'analizzatore considera un problema di sicurezza l'uso di generatori di numeri casuali e algoritmi di hashing non sicuri, come MD5, mentre nel codice tali algoritmi possono essere utilizzati per scopi che non influiscono sulla sicurezza. L'analizzatore considera anche problematica qualsiasi elaborazione di dati esterni in funzioni non sicure, come pickle, yaml.load, subprocess ed eval, ma questo utilizzo non è necessariamente associato alla creazione di vulnerabilità e, in effetti, l'uso di tali funzioni può essere implementato senza rischi per la sicurezza.

Tra i controlli utilizzati nello studio:

  • Uso di funzioni potenzialmente pericolose come exec, mktemp, eval, mark_safe, ecc.
  • Impostazioni di permessi insicure per i file.
  • Collegamento di un socket di rete a tutte le interfacce di rete.
  • Utilizzo di password e chiavi hardcodate nel codice.
  • Uso di una directory temporanea predefinita.
  • Utilizzo di pass e continue nei gestori di eccezioni in stile catch-all;
  • Esecuzione di web app basate sul framework web Flask con la modalità di debug attivata.
  • Utilizzo di metodi di deserializzazione dei dati non sicuri.
  • Utilizzo di funzioni hash MD2, MD4, MD5 e SHA1.
  • Utilizzo di algoritmi di cifratura non sicuri DES e modalità di cifratura.
  • Utilizzo di un'implementazione non sicura di HTTPSConnection in alcune versioni di Python.
  • Specifica dello schema file:// in urlopen.
  • Utilizzo di generatori di numeri pseudo-casuali per compiti crittografici.
  • Utilizzo del protocollo Telnet.
  • Utilizzo di parser XML non sicuri.

Inoltre, è possibile notare la scoperta di 8 pacchetti dannosi nel repository PyPI. Prima della rimozione, i pacchetti problematici erano stati scaricati oltre 30.000 volte. Per nascondere attività dannose e aggirare gli avvisi dei semplici analizzatori statici, nei pacchetti veniva utilizzata la codifica dei blocchi di codice con Base64 e l'esecuzione veniva organizzata dopo la decodifica tramite la chiamata a eval.

Nei pacchetti noblesse, genesisbot, are, suffer, noblesse2 e noblessev2 è stato scoperto un codice per intercettare i numeri di carta di credito e le password salvate nei browser Chrome ed Edge, oltre che per trasmettere token di account dall'app Discord e inviare dati di sistema, compresi screenshot del contenuto dello schermo. Nei pacchetti pytagora e pytagora2 era presente la possibilità di caricare ed eseguire codice eseguibile di terze parti.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster