Python Vulnerability Scanner: Secure Your Dependencies

Scanner de Vulnérabilités Python : Sécurisez vos Dépendances

Last updated: April 2026

Dernière mise à jour : avril 2026

The Python Dependency Security Problem

Le problème de sécurité des dépendances Python

The Python Package Index (PyPI) hosts over 500,000 packages and serves billions of downloads every month. Python powers everything from web applications with Django and Flask to data science pipelines, machine learning infrastructure, and DevOps automation. This ubiquity makes the Python ecosystem an increasingly attractive target for supply chain attacks.

Le Python Package Index (PyPI) héberge plus de 500 000 packages et sert des milliards de téléchargements chaque mois. Python alimente tout, des applications web avec Django et Flask aux pipelines de data science, l'infrastructure de machine learning et l'automatisation DevOps. Cette ubiquité fait de l'écosystème Python une cible de plus en plus attrayante pour les attaques de supply chain.

Unlike npm, Python's packaging landscape is fragmented across multiple tools: pip, poetry, pipenv, conda, and uv each have their own lockfile formats and dependency resolution strategies. This fragmentation makes it harder to maintain a consistent security posture across projects. A team might use requirements.txt for one project, poetry.lock for another, and Pipfile.lock for a third—each requiring different audit tools and workflows.

Contrairement à npm, le paysage de packaging Python est fragmenté entre plusieurs outils : pip, poetry, pipenv, conda et uv ont chacun leurs propres formats de lockfile et stratégies de résolution de dépendances. Cette fragmentation rend plus difficile le maintien d'une posture de sécurité cohérente entre les projets. Une équipe peut utiliser requirements.txt pour un projet, poetry.lock pour un autre, et Pipfile.lock pour un troisième—chacun nécessitant des outils d'audit et des workflows différents.

Recent high-profile incidents have underscored these risks. In 2022, researchers discovered thousands of typosquatting packages on PyPI designed to steal credentials and inject backdoors. The ctx package hijack exposed AWS keys of developers who installed what they thought was a trusted library. In 2023, malicious packages disguised as popular AI libraries targeted the growing machine learning community. These attacks demonstrate that any Python project with third-party dependencies is a potential target.

Des incidents récents de grande envergure ont souligné ces risques. En 2022, des chercheurs ont découvert des milliers de packages de typosquatting sur PyPI conçus pour voler des identifiants et injecter des backdoors. Le détournement du package ctx a exposé les clés AWS de développeurs qui avaient installé ce qu'ils pensaient être une bibliothèque de confiance. En 2023, des packages malveillants déguisés en bibliothèques IA populaires ciblaient la communauté grandissante du machine learning. Ces attaques démontrent que tout projet Python avec des dépendances tierces est une cible potentielle.

The challenge is compounded by Python's execution model: setup.py and pyproject.toml build scripts can execute arbitrary code during installation. A single pip install command can run untrusted code on your machine before you've even imported the package. This makes proactive vulnerability monitoring not just useful, but essential.

Le défi est amplifié par le modèle d'exécution de Python : les scripts de build setup.py et pyproject.toml peuvent exécuter du code arbitraire pendant l'installation. Une seule commande pip install peut exécuter du code non fiable sur votre machine avant même que vous ayez importé le package. Cela rend le monitoring proactif des vulnérabilités non seulement utile, mais essentiel.

How to Check Python Vulnerabilities

Comment vérifier les vulnérabilités Python

Using pip audit

Utiliser pip audit

The pip-audit tool (maintained by the Python Packaging Authority) scans your installed packages or a requirements file against the OSV.dev vulnerability database. It's the closest Python equivalent to npm audit.

L'outil pip-audit (maintenu par la Python Packaging Authority) scanne vos packages installés ou un fichier requirements contre la base de vulnérabilités OSV.dev. C'est l'équivalent Python le plus proche de npm audit.

Install and run a basic audit:

Installer et lancer un audit basique :

$ pip install pip-audit
$ pip-audit

Found 4 known vulnerabilities in 3 packages
Name        Version  ID                  Fix Versions
----------  -------  ------------------  ------------
django      3.2.15   GHSA-jrh2-hc4r-7jwx 3.2.16
requests    2.28.0   PYSEC-2023-74       2.31.0
cryptography 38.0.4  GHSA-w7pp-m8wf-vj6r 39.0.1
urllib3     1.26.12  GHSA-v845-jxx5-vc9f  1.26.18

For CI/CD pipelines, JSON output is more useful:

Pour les pipelines CI/CD, la sortie JSON est plus utile :

$ pip-audit --format json --output audit-report.json
$ pip-audit -r requirements.txt --format json

Using safety check

Utiliser safety check

The safety CLI (by SafetyCLI) is another popular option. It checks your dependencies against a curated vulnerability database:

Le CLI safety (par SafetyCLI) est une autre option populaire. Il vérifie vos dépendances contre une base de vulnérabilités curée :

$ pip install safety
$ safety check -r requirements.txt

+==============================================================================+
|                                                                              |
|                               /$$$$$$            /$$                         |
|                              /$$__  $$          | $$                         |
|                             | $$  \__/  /$$$$$$ | $$$$$$$   /$$$$$$          |
|                              \$$$$$$   |____  $$| $$_  $$  /$$__  $$         |
|                               \____  $$ /$$$$$$$| $$ \ $$ | $$$$$$$$         |
|                               /$$  \ $$/$$__  $$| $$ | $$ | $$_____/         |
|                              |  $$$$$$/  $$$$$$$| $$ | $$ |  $$$$$$$         |
|                               \______/ \_______/|__/ |__/  \_______/         |
|                                                                              |
+==============================================================================+

3 vulnerabilities found

Using poetry check and poetry audit

Utiliser poetry check et poetry audit

If you use Poetry, the poetry audit command (available since Poetry 1.6) checks your locked dependencies for vulnerabilities:

Si vous utilisez Poetry, la commande poetry audit (disponible depuis Poetry 1.6) vérifie les vulnérabilités de vos dépendances verrouillées :

$ poetry audit

Checking dependencies for known security vulnerabilities...

Package    Installed  Affected   CVE
---------  ---------  ---------  ---------------
django     3.2.15     <3.2.16   CVE-2022-41323
pillow     9.2.0      <9.3.0    CVE-2022-45198

The limitations of manual scanning

Les limites du scan manuel

All these tools share the same fundamental limitations: they're point-in-time, single-project commands that you must remember to run. Each tool only works with its own package manager—pip-audit for pip, poetry audit for Poetry, pipenv check for Pipenv. If your team uses multiple Python package managers across different projects, you need multiple tools and workflows.

Tous ces outils partagent les mêmes limitations fondamentales : ce sont des commandes ponctuelles, mono-projet que vous devez penser à exécuter. Chaque outil ne fonctionne qu'avec son propre gestionnaire de packages—pip-audit pour pip, poetry audit pour Poetry, pipenv check pour Pipenv. Si votre équipe utilise plusieurs gestionnaires de packages Python sur différents projets, vous avez besoin de multiples outils et workflows.

Why Manual Scanning Fails

Pourquoi le scan manuel échoue

Running pip-audit or safety check once is easy. Doing it consistently across every project, every day, is where teams fail. Here's why manual Python vulnerability scanning doesn't scale:

Exécuter pip-audit ou safety check une fois est facile. Le faire de manière cohérente sur chaque projet, chaque jour, c'est là que les équipes échouent. Voici pourquoi le scan manuel des vulnérabilités Python ne passe pas à l'échelle :

OptiBot: Continuous Python Vulnerability Monitoring

OptiBot : Monitoring continu des vulnérabilités Python

OptiBot is a Python vulnerability scanner built for teams who manage multiple projects and need more than a one-time audit. It works with all major Python package managers—pip, Poetry, and Pipenv—from a single dashboard. No Python environment required, no code access needed.

OptiBot est un scanner de vulnérabilités Python conçu pour les équipes qui gèrent plusieurs projets et ont besoin de plus qu'un audit ponctuel. Il fonctionne avec tous les principaux gestionnaires de packages Python—pip, Poetry et Pipenv—depuis un tableau de bord unique. Pas d'environnement Python requis, pas d'accès au code nécessaire.

How it works

Comment ça fonctionne

1

Upload your lockfile

Uploadez votre lockfile

Drag and drop your requirements.txt, poetry.lock, or Pipfile.lock into OptiBot. No GitHub access, no PyPI token, no source code—just the dependency file.

Glissez-déposez votre requirements.txt, poetry.lock ou Pipfile.lock dans OptiBot. Pas d'accès GitHub, pas de token PyPI, pas de code source—juste le fichier de dépendances.

2

Instant vulnerability scan

Scan de vulnérabilités instantané

OptiBot queries the OSV.dev vulnerability database and cross-references every package and version in your dependency tree. Results appear in seconds.

OptiBot interroge la base de vulnérabilités OSV.dev et croise chaque package et version de votre arborescence de dépendances. Les résultats apparaissent en quelques secondes.

3

Daily monitoring

Monitoring quotidien

Your project is automatically re-scanned every day against the latest vulnerability data. New CVEs are matched to your exact dependency versions—no manual action required.

Votre projet est automatiquement re-scanné chaque jour avec les dernières données de vulnérabilités. Les nouveaux CVE sont associés aux versions exactes de vos dépendances—aucune action manuelle requise.

4

Email alerts & PDF reports

Alertes email & rapports PDF

When a new vulnerability affects your dependencies, you receive an email alert with CVE details, severity rating, and fix versions. Generate professional PDF reports for clients and stakeholders with one click.

Quand une nouvelle vulnérabilité affecte vos dépendances, vous recevez une alerte email avec les détails du CVE, le score de sévérité et les versions correctives. Générez des rapports PDF professionnels pour vos clients et parties prenantes en un clic.

Works with ALL Python package managers

Fonctionne avec TOUS les gestionnaires de packages Python

Unlike standalone tools that only support one format, OptiBot accepts:

Contrairement aux outils autonomes qui ne supportent qu'un seul format, OptiBot accepte :

No code access required

Aucun accès au code nécessaire

OptiBot only reads package names and versions from your lockfile. It never sees your source code, never requires a GitHub integration or SSH key. This makes it ideal for agencies auditing client projects—just ask the client for their dependency file and start monitoring. No trust boundary issues, no security review required.

OptiBot ne lit que les noms de packages et les versions de votre lockfile. Il ne voit jamais votre code source, ne nécessite jamais d'intégration GitHub ni de clé SSH. C'est idéal pour les agences auditant des projets clients—demandez simplement au client son fichier de dépendances et commencez le monitoring. Pas de problème de limite de confiance, pas d'examen de sécurité requis.

Multi-stack monitoring

Monitoring multi-stack

Most Python projects don't exist in isolation. Your Django app likely has a JavaScript frontend, and your deployment might include PHP services. OptiBot also supports package-lock.json (Node.js) and composer.lock (PHP), so you can monitor your entire stack from a single dashboard.

La plupart des projets Python n'existent pas de manière isolée. Votre application Django a probablement un frontend JavaScript, et votre déploiement peut inclure des services PHP. OptiBot supporte aussi package-lock.json (Node.js) et composer.lock (PHP), vous permettant de surveiller toute votre stack depuis un seul tableau de bord.

Common Python Vulnerabilities

Vulnérabilités Python courantes

Understanding the types of vulnerabilities found in Python packages helps you assess risk and prioritize fixes. Here are the most common categories affecting the PyPI ecosystem:

Comprendre les types de vulnérabilités trouvées dans les packages Python vous aide à évaluer les risques et prioriser les corrections. Voici les catégories les plus courantes affectant l'écosystème PyPI :

Arbitrary Code Execution

Exécution de code arbitraire

The most critical category. Python's dynamic nature and features like eval(), exec(), and pickle.loads() create opportunities for attackers to execute arbitrary code. Libraries that process untrusted input—template engines, serialization libraries, YAML parsers—are frequent targets. The infamous PyYAML yaml.load() vulnerability (CVE-2020-1747) allowed remote code execution through crafted YAML documents and affected thousands of projects.

La catégorie la plus critique. La nature dynamique de Python et des fonctionnalités comme eval(), exec() et pickle.loads() créent des opportunités pour les attaquants d'exécuter du code arbitraire. Les bibliothèques qui traitent des entrées non fiables—moteurs de templates, bibliothèques de sérialisation, parseurs YAML—sont des cibles fréquentes. La fameuse vulnérabilité PyYAML yaml.load() (CVE-2020-1747) permettait l'exécution de code à distance via des documents YAML manipulés et affectait des milliers de projets.

Insecure Deserialization

Désérialisation non sécurisée

Python's pickle module is notoriously dangerous when used with untrusted data. Any library that deserializes data—whether through pickle, shelve, or custom protocols—can become a vector for remote code execution. Machine learning frameworks that load model files (often pickled objects) are particularly at risk. Never unpickle data from an untrusted source.

Le module pickle de Python est notoirement dangereux lorsqu'il est utilisé avec des données non fiables. Toute bibliothèque qui désérialise des données—que ce soit via pickle, shelve ou des protocoles personnalisés—peut devenir un vecteur d'exécution de code à distance. Les frameworks de machine learning qui chargent des fichiers de modèles (souvent des objets picklés) sont particulièrement à risque. Ne dépicklez jamais des données provenant d'une source non fiable.

Path Traversal

Traversée de chemin

Vulnerabilities where user input constructs file paths without proper sanitization. Python web frameworks, file upload handlers, and archive extraction libraries (like zipfile and tarfile) have been affected. The tarfile module's default behavior of following symlinks and extracting to absolute paths has led to multiple CVEs. Attackers can read sensitive files like /etc/passwd or overwrite application code.

Des vulnérabilités où l'entrée utilisateur construit des chemins de fichiers sans assainissement adéquat. Les frameworks web Python, les gestionnaires d'upload de fichiers et les bibliothèques d'extraction d'archives (comme zipfile et tarfile) ont été affectés. Le comportement par défaut du module tarfile qui suit les liens symboliques et extrait vers des chemins absolus a conduit à de multiples CVE. Les attaquants peuvent lire des fichiers sensibles comme /etc/passwd ou écraser le code de l'application.

Server-Side Request Forgery (SSRF)

Falsification de requête côté serveur (SSRF)

Python applications frequently make HTTP requests using libraries like requests, httpx, or urllib3. When URLs are constructed from user input without validation, attackers can force your server to make requests to internal services, cloud metadata endpoints (like 169.254.169.254 on AWS), or other sensitive resources. SSRF vulnerabilities in Python web applications are among the most commonly exploited in cloud environments.

Les applications Python font fréquemment des requêtes HTTP via des bibliothèques comme requests, httpx ou urllib3. Lorsque les URLs sont construites à partir d'entrées utilisateur sans validation, les attaquants peuvent forcer votre serveur à effectuer des requêtes vers des services internes, des endpoints de métadonnées cloud (comme 169.254.169.254 sur AWS) ou d'autres ressources sensibles. Les vulnérabilités SSRF dans les applications web Python sont parmi les plus exploitées en environnement cloud.

SQL Injection

Injection SQL

While modern ORMs like Django ORM and SQLAlchemy provide protection, vulnerabilities still arise from raw SQL queries, improperly used .extra() or .raw() methods, and vulnerable database connector libraries. Django itself has had multiple SQL injection CVEs in components like QuerySet.order_by() and JSON field lookups. Keeping your ORM and database libraries updated is critical.

Bien que les ORM modernes comme Django ORM et SQLAlchemy offrent une protection, des vulnérabilités surviennent toujours avec les requêtes SQL brutes, les méthodes .extra() ou .raw() mal utilisées, et les bibliothèques de connecteurs de bases de données vulnérables. Django lui-même a eu de multiples CVE d'injection SQL dans des composants comme QuerySet.order_by() et les lookups de champs JSON. Garder vos ORM et bibliothèques de bases de données à jour est critique.

Python Dependency Security Best Practices

Bonnes pratiques de sécurité des dépendances Python

Securing your Python supply chain requires discipline and the right tools. Follow these practices to minimize your attack surface:

Sécuriser votre supply chain Python demande de la discipline et les bons outils. Suivez ces pratiques pour minimiser votre surface d'attaque :

Frequently Asked Questions

Questions fréquentes

How is OptiBot different from pip-audit?

En quoi OptiBot est-il différent de pip-audit ?

pip-audit is a command-line tool for one-time, single-project scanning that requires a Python environment. OptiBot provides continuous daily monitoring across all your projects from a web dashboard, with email alerts and PDF reports. You upload a lockfile once, and OptiBot monitors it for you—no terminal or Python installation required. OptiBot also supports Poetry and Pipenv lockfiles, not just pip.

pip-audit est un outil en ligne de commande pour un scan ponctuel, mono-projet, qui nécessite un environnement Python. OptiBot fournit un monitoring quotidien continu sur tous vos projets depuis un tableau de bord web, avec des alertes email et des rapports PDF. Vous uploadez un lockfile une fois, et OptiBot le surveille pour vous—aucun terminal ni installation Python nécessaire. OptiBot supporte aussi les lockfiles Poetry et Pipenv, pas seulement pip.

Which Python lockfile formats does OptiBot support?

Quels formats de lockfile Python OptiBot supporte-t-il ?

OptiBot supports requirements.txt (pip), poetry.lock (Poetry), and Pipfile.lock (Pipenv). All three formats are parsed to extract package names and pinned versions, which are then checked against the OSV.dev vulnerability database.

OptiBot supporte requirements.txt (pip), poetry.lock (Poetry) et Pipfile.lock (Pipenv). Les trois formats sont parsés pour extraire les noms de packages et les versions fixées, qui sont ensuite vérifiées contre la base de vulnérabilités OSV.dev.

Do I need to give OptiBot access to my code or GitHub?

Dois-je donner à OptiBot accès à mon code ou à GitHub ?

No. OptiBot only needs your dependency lockfile. It reads package names and versions—nothing else. It never accesses your source code, Git repositories, or PyPI account. This makes it safe for agencies working with clients who have strict access policies.

Non. OptiBot n'a besoin que de votre lockfile de dépendances. Il lit les noms de packages et les versions—rien d'autre. Il n'accède jamais à votre code source, vos dépôts Git ou votre compte PyPI. C'est donc sûr pour les agences travaillant avec des clients ayant des politiques d'accès strictes.

Can I monitor Python and Node.js projects together?

Puis-je surveiller des projets Python et Node.js ensemble ?

Yes. OptiBot supports requirements.txt, poetry.lock, and Pipfile.lock (Python), package-lock.json (Node.js/npm), and composer.lock (PHP). Monitor your entire stack from a single dashboard. See our pages on npm vulnerabilities and WordPress CVE monitoring.

Oui. OptiBot supporte requirements.txt, poetry.lock et Pipfile.lock (Python), package-lock.json (Node.js/npm) et composer.lock (PHP). Surveillez toute votre stack depuis un seul tableau de bord. Consultez nos pages sur les vulnérabilités npm et le monitoring CVE WordPress.

Is OptiBot free for Python projects?

OptiBot est-il gratuit pour les projets Python ?

OptiBot offers a free plan with up to 3 projects and manual scanning—no credit card required. For teams needing daily automated monitoring, email alerts, and PDF reports, the Pro plan is 15€/month (20 projects) and the Agency plan is 35€/month (unlimited projects). Sign up free to get started.

OptiBot propose un plan gratuit avec jusqu'à 3 projets et scan manuel—sans carte bancaire. Pour les équipes nécessitant un monitoring automatisé quotidien, des alertes email et des rapports PDF, le plan Pro est à 15€/mois (20 projets) et le plan Agency à 35€/mois (projets illimités). Inscrivez-vous gratuitement pour commencer.

Start scanning your Python dependencies for free

Scannez vos dépendances Python gratuitement

Upload your requirements.txt, poetry.lock, or Pipfile.lock and get a full vulnerability report in seconds. No credit card, no code access required.

Uploadez votre requirements.txt, poetry.lock ou Pipfile.lock et obtenez un rapport de vulnérabilités complet en quelques secondes. Pas de carte bancaire, pas d'accès au code nécessaire.

Start free → Commencer gratuitement →

Related pages

Pages associées