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 per identificare l'uso di costrutti potenzialmente pericolosi che potrebbero portare a vulnerabilità. Durante l'analisi di 197 mila pacchetti sono stati riscontrati 749 mila potenziali problemi di sicurezza. Nel 46% dei pacchetti è presente almeno un problema di questo tipo. Tra i problemi più comuni ci sono le lacune relative alla gestione delle eccezioni e all'uso di funzionalità che consentono l'inserimento di codice.

Tra i 749 mila problemi identificati, 442 mila (41%) sono classificati come minori, 227 mila (30%) come problemi di moderata gravità e 80 mila (11%) come pericolosi. Alcuni pacchetti si distinguono per il numero elevato di problematiche: ad esempio, nel pacchetto PyGGI sono state riscontrate 2589 problematiche, principalmente associate all'uso della costruzione "try-except-pass", mentre nel pacchetto appengine-sdk si contano 2356 problemi. Un numero elevato di problematiche è 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 applicazione di determinate costruzioni. Lo sviluppatore dello strumento bandit, utilizzato per la scansione del codice, ha espresso l'opinione che, a causa del numero relativamente elevato di falsi positivi, i risultati della verifica non possano essere considerati vulnerabilità senza un'ulteriore 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 non legati alla sicurezza. L'analizzatore considera anche un problema qualsiasi elaborazione di dati esterni in funzioni non sicure, come pickle, yaml.load, subprocess ed eval, ma questo utilizzo non implica necessariamente la comparsa di vulnerabilità e, in pratica, l'uso delle funzioni indicate può essere realizzato senza minaccia alla sicurezza.

Tra i controlli utilizzati nello studio:

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

Inoltre, si segnala la presenza di 8 pacchetti dannosi nel catalogo PyPI. Prima della loro rimozione, i pacchetti problematici erano stati scaricati oltre 30.000 volte. Per nascondere l'attività dannosa e aggirare gli avvisi dei semplici analizzatori statici, i pacchetti utilizzavano la codifica dei blocchi di codice con Base64 e organizzavano l'esecuzione dopo la decodifica tramite una chiamata a eval.

Nei pacchetti noblesse, genesisbot, are, suffer, noblesse2 e noblessev2 è stato identificato codice per intercettare i numeri di carte di credito e le password salvate nei browser Chrome ed Edge, oltre a trasmettere i token degli account dall'app Discord e inviare dati di sistema, comprese schermate 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, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster