46 % des paquets Python dans le dépôt PyPI contiennent du code potentiellement dangereux

Un groupe de chercheurs de l'Université de Turku (Finlande) a publié les résultats d'une analyse des paquets dans le dépôt PyPI concernant l'utilisation de constructions potentiellement dangereuses susceptibles de conduire à des vulnérabilités. Au cours de l'analyse de 197 000 paquets, 749 000 problèmes potentiels de sécurité ont été identifiés. Dans 46 % des paquets, au moins un de ces problèmes est présent. Parmi les problèmes les plus fréquents, on trouve des défauts liés à la gestion des exceptions et à l'utilisation de fonctionnalités permettant l'injection de code.

Parmi les 749 000 problèmes identifiés, 442 000 (41 %) sont classés comme mineurs, 227 000 (30 %) comme des problèmes de danger modéré et 80 000 (11 %) comme dangereux. Certains paquets se démarquent et contiennent des milliers de problèmes : par exemple, le paquet PyGGI présente 2 589 problèmes, principalement liés à l'utilisation de la construction « try-except-pass », tandis que le paquet appengine-sdk a trouvé 2 356 problèmes. Un grand nombre de problèmes est également présent dans les paquets genie.libs.ops, pbcore et genie.libs.parser.

Il convient de noter que les résultats sont basés sur un analyse statique automatisée, qui ne prend pas en compte le contexte d'utilisation de certaines constructions. Le développeur de l'outil bandit, qui a été utilisé pour scanner le code, a exprimé l'avis qu'en raison d'un nombre relativement élevé de faux positifs, les résultats de la vérification ne peuvent pas être considérés comme des vulnérabilités sans une révision manuelle supplémentaire de chaque problème.

Par exemple, l'analyseur considère comme un problème de sécurité l'utilisation de générateurs de nombres aléatoires peu fiables et d'algorithmes de hachage, tels que MD5, alors que dans le code, de tels algorithmes peuvent être utilisés à des fins qui n'affectent pas la sécurité. L'analyseur considère également comme un problème tout traitement de données externes dans des fonctions non sécurisées, telles que pickle, yaml.load, subprocess et eval, mais cette utilisation n'est pas nécessairement liée à l'apparition d'une vulnérabilité et en pratique, l'utilisation des fonctions mentionnées peut être mise en œuvre sans risque de sécurité.

Parmi les vérifications utilisées dans l'étude :

  • Utilisation de fonctions potentiellement dangereuses telles que exec, mktemp, eval, mark_safe, etc.
  • Attribution de droits d'accès non sécurisés pour les fichiers.
  • Connexion de socket réseau à toutes les interfaces réseau.
  • Utilisation de mots de passe et de clés codés en dur dans le code.
  • Utilisation d'un répertoire temporaire prédéfini.
  • Utilisation de pass et continue dans les gestionnaires d'exceptions de style catch-all.
  • Exécution d'applications web basées sur le framework Flask avec le mode débogage activé.
  • Utilisation de méthodes de désérialisation de données non sécurisées.
  • Utilisation des fonctions de hachage MD2, MD4, MD5 et SHA1.
  • Utilisation des chiffrements DES et des modes de chiffrement non sécurisés.
  • Utilisation d'une implémentation non sécurisée de HTTPSConnection dans certaines versions de Python.
  • Spécification du schéma file:// dans urlopen.
  • Utilisation de générateurs de nombres pseudo-aléatoires lors de l'exécution de tâches cryptographiques.
  • Utilisation du protocole Telnet.
  • Utilisation de parseurs XML non sécurisés.

Il convient de noter que 8 paquets malveillants ont été découverts dans le répertoire PyPI. Avant leur suppression, les paquets problématiques avaient été téléchargés plus de 30 000 fois. Pour masquer l'activité malveillante et contourner les avertissements de simples analyseurs statiques, des blocs de code étaient encodés avec Base64 et organisés pour s'exécuter après décodage via un appel à eval.

Dans les paquets noblesse, genesisbot, are, suffer, noblesse2 et noblessev2, du code pour intercepter les numéros de cartes de crédit et les mots de passe enregistrés dans les navigateurs Chrome et Edge a été identifié, ainsi qu'une méthode pour transmettre des jetons de compte depuis l'application Discord et envoyer des données système, y compris des captures d'écran du contenu de l'écran. Les paquets pytagora et pytagora2 présentaient la possibilité de télécharger et d'exécuter du code exécutable tiers.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster