Why FastAPI Security Starts with Dependencies
FastAPI has earned its reputation as one of the fastest, most developer-friendly Python web frameworks. Its async-first design, automatic OpenAPI documentation, and Pydantic-powered validation make it the go-to choice for modern APIs and microservices. But here is the uncomfortable truth: FastAPI itself is a thin orchestration layer. The real heavy lifting happens in its dependencies — and that is exactly where the security risks live.
When you run pip install fastapi, you are not just installing one package. You are pulling in Starlette for the HTTP layer, Pydantic for data validation, and a constellation of transitive dependencies that handle everything from URL routing to JSON serialization. Add uvicorn as your ASGI server, and the dependency tree grows further with httptools, uvloop, websockets, and more.
Each of these packages is maintained by different teams with different security practices, release cadences, and vulnerability disclosure processes. A single CVE in any of them can compromise your entire application — even if your own code is flawless. FastAPI security is dependency security, and treating it otherwise is a dangerous blind spot.
According to Sonatype's State of the Software Supply Chain report, 96% of known-vulnerable open source downloads were avoidable — the fix was already available at the time of download.
The FastAPI Dependency Tree: From 10 to 50+
Let us look at what a typical FastAPI project actually installs. You start with a clean virtual environment and a modest requirements.txt:
fastapi==0.115.0
uvicorn[standard]==0.32.0
sqlalchemy[asyncio]==2.0.36
asyncpg==0.30.0
httpx==0.28.0
python-multipart==0.0.18
pydantic-settings==2.7.0
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
jinja2==3.1.5
That is 10 direct dependencies. Now run pip freeze and count the lines:
annotated-types==0.7.0
anyio==4.8.0
asyncpg==0.30.0
bcrypt==4.2.1
certifi==2024.12.14
cffi==1.17.1
click==8.1.8
cryptography==44.0.0
ecdsa==0.19.0
fastapi==0.115.0
greenlet==3.1.1
h11==0.14.0
httpcore==1.0.7
httptools==0.6.4
httpx==0.28.0
idna==3.10
jinja2==3.1.5
markupsafe==3.0.2
passlib==1.7.4
pyasn1==0.6.1
pycparser==2.22
pydantic==2.10.4
pydantic-core==2.27.2
pydantic-settings==2.7.0
python-dotenv==1.0.1
python-jose==3.3.0
python-multipart==0.0.18
rsa==4.9
sniffio==1.3.1
sqlalchemy==2.0.36
starlette==0.41.3
typing-extensions==4.12.2
uvicorn==0.32.0
uvloop==0.21.0
watchfiles==1.0.4
websockets==14.1
That is 36 packages — more than triple your direct dependencies. Each one is a potential attack surface. And this is a relatively lean setup. Add Redis, Celery, an S3 client, or an ORM migration tool, and you are easily past 60 packages.
Understanding transitive depth
The danger of transitive dependencies is their invisibility. You never explicitly chose h11 or httptools or pyasn1, yet they are running in your production environment. When a CVE is published against one of these packages, most teams have no idea they are even affected — because the vulnerable package never appeared in their requirements.txt.
This is not a theoretical concern. In 2023, a critical vulnerability in cryptography (CVE-2023-49083) affected every Python application using X.509 certificate validation — including most FastAPI apps with HTTPS clients. Many teams did not realize they were exposed until weeks after the fix was available.
Common Vulnerability Vectors in FastAPI Stacks
Let us examine the specific areas where FastAPI dependencies have historically been vulnerable and where you should focus your attention.
Pydantic validation bypass
Pydantic is the backbone of FastAPI's request validation. When Pydantic has a parsing bug, your validation assumptions break silently. Past issues have included incorrect handling of nested union types, permissive coercion of string inputs to numeric types, and edge cases in regex-constrained strings. A validation bypass means malicious input reaches your business logic unchecked — exactly the kind of bug that leads to injection attacks, data corruption, or privilege escalation.
Starlette middleware and routing issues
Starlette handles all HTTP processing beneath FastAPI. Vulnerabilities here are especially dangerous because they affect every single request. Historical issues have included path traversal via malformed URLs, CORS middleware misconfiguration edge cases, and session cookie handling flaws. Because FastAPI delegates all routing and middleware processing to Starlette, a Starlette vulnerability is a FastAPI vulnerability.
Uvicorn HTTP parsing
Uvicorn, the most common ASGI server for FastAPI, relies on httptools (a Python binding for Node.js's http-parser) and h11 for HTTP parsing. HTTP parsing bugs are a classic source of request smuggling attacks, where an attacker crafts ambiguous HTTP requests that are interpreted differently by your proxy (Nginx) and your application server (uvicorn). This can lead to cache poisoning, authentication bypass, and unauthorized access to other users' sessions.
HTTPX and outbound SSRF
Many FastAPI applications use httpx for outgoing HTTP requests — calling third-party APIs, webhooks, or microservices. SSRF (Server-Side Request Forgery) vulnerabilities allow attackers to make your server issue requests to internal services, cloud metadata endpoints, or other sensitive resources. While SSRF is often an application-level flaw, library-level URL parsing bugs and redirect-following behavior can make exploitation easier.
Cryptographic dependencies
If your FastAPI app handles JWT authentication (python-jose), password hashing (passlib, bcrypt), or TLS (cryptography), you are depending on packages where a single vulnerability can completely compromise your authentication system. These packages deserve extra scrutiny because their failures are silent — a weak hash or a broken signature verification does not throw errors; it just stops protecting you.
How to Audit Your FastAPI Dependencies
Knowing the risks is step one. Step two is establishing a repeatable process for finding and fixing vulnerable dependencies.
pip-audit: the standard tool
pip-audit is maintained by the Python Packaging Authority (PyPA) and checks your installed packages against the OSV (Open Source Vulnerabilities) database. It is the closest thing to an official vulnerability scanner for Python.
# Install pip-audit
pip install pip-audit
# Audit your current environment
pip-audit
# Audit a requirements file directly
pip-audit -r requirements.txt
# Output in JSON for CI parsing
pip-audit --format json --output audit-results.json
pip-audit is fast and reliable for point-in-time checks. However, it has limitations: it only scans when you run it, it does not track vulnerabilities discovered after your last audit, and it requires your environment to be installed (or a well-formed requirements file).
Safety: commercial alternative
safety checks your dependencies against the Safety DB (now maintained by Safetycli). It works similarly to pip-audit but uses a different vulnerability database, so running both can catch issues that one misses.
# Install and run
pip install safety
safety check
# Check a requirements file
safety check -r requirements.txt
Poetry audit for Poetry users
If you use Poetry for dependency management, the poetry audit plugin integrates vulnerability scanning directly into your workflow:
# Install the plugin
poetry self add poetry-audit-plugin
# Run the audit
poetry audit
Manual review with pip freeze
Sometimes automated tools miss issues or you need deeper analysis. A manual approach starts with exporting your full dependency tree:
# Export exact versions
pip freeze > installed-packages.txt
# Use pipdeptree to visualize the dependency graph
pip install pipdeptree
pipdeptree --warn silence
This gives you a clear picture of which packages pull in which transitive dependencies, helping you identify high-risk branches of your dependency tree.
CI/CD Integration: Audit on Every Push
Manual audits are good for initial assessments, but they do not scale. You need automated scanning on every commit and pull request. Here is how to integrate dependency auditing into your CI/CD pipeline.
GitHub Actions
# .github/workflows/dependency-audit.yml
name: Dependency Audit
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
schedule:
- cron: '0 8 * * 1' # Every Monday at 8 AM
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pip-audit safety
- name: Run pip-audit
run: pip-audit --strict --desc
- name: Run safety check
run: safety check
continue-on-error: true
- name: Check for outdated packages
run: pip list --outdated --format=json
GitLab CI
# .gitlab-ci.yml
dependency-audit:
stage: test
image: python:3.12-slim
script:
- pip install -r requirements.txt
- pip install pip-audit safety
- pip-audit --strict --desc
- safety check || true
- pip list --outdated --format=json
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "main"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
The --strict flag in pip-audit makes the command return a non-zero exit code when vulnerabilities are found, which will fail your pipeline — exactly what you want. This prevents merging code with known vulnerable dependencies.
Pre-commit hooks
For faster feedback, you can also add a pre-commit hook that runs pip-audit before each commit:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/trailofbits/pip-audit
rev: v2.7.3
hooks:
- id: pip-audit
args: ['--strict']
Beyond CI: Continuous Production Monitoring
CI-based auditing catches vulnerabilities at deployment time. But what about the vulnerabilities discovered after you deploy? Your production application might be running version 2.10.4 of Pydantic today, and a critical CVE could be published against that exact version tomorrow morning. Your CI pipeline will not catch it — there is no new commit to trigger a scan.
This is the fundamental gap in CI-only security strategies. Vulnerabilities are discovered continuously, but CI runs discretely. Between deploys, you are flying blind.
Consider the timeline of a typical vulnerability:
- Day 0: You deploy your FastAPI app with all dependencies passing audit.
- Day 12: A researcher discovers a request smuggling flaw in httptools and privately reports it.
- Day 30: The maintainers release a patch and the CVE is published.
- Day 30-45: Your app is running a known-vulnerable version, but nobody on your team knows it.
- Day 46: A developer happens to push a new feature, CI runs, and finally flags the issue.
That is potentially two weeks of exposure between the CVE being public and your team being aware. For critical infrastructure, two weeks is an eternity. You need a monitoring solution that scans your production dependency list continuously, regardless of your deploy cadence.
OptiBot for FastAPI Teams
This is exactly the problem CVE OptiBot was built to solve. Instead of relying solely on CI checks, OptiBot provides continuous, deploy-independent monitoring of your dependency tree.
How it works
- Upload your lockfile: Upload your
requirements.txt,poetry.lock, orPipfile.lockto OptiBot. No source code, no repository access — just dependency names and versions. - Continuous scanning: OptiBot checks your dependency list against the OSV database daily. When a new CVE is published that affects one of your packages, you are notified immediately.
- Multi-project dashboard: Running 5 FastAPI microservices? 10? Upload each one and monitor them all from a single dashboard. See at a glance which projects are affected by a newly published CVE.
- Email alerts: Get notified the moment a vulnerability is discovered — not the next time someone pushes a commit.
- PDF reports: Generate professional security reports for clients, auditors, or management. Agencies can send branded vulnerability assessments to their clients.
Why it matters for microservice architectures
FastAPI is commonly used in microservice architectures where you might have dozens of small services, each with their own dependency tree. Manually tracking vulnerabilities across all of them is impractical. OptiBot gives you a centralized view of your entire organization's dependency health, with automatic alerts when any project becomes affected by a new CVE.
Security Checklist for FastAPI Projects
Here is a practical checklist you can adopt today to harden your FastAPI application's dependency security:
- Pin all dependency versions. Never use unpinned requirements like
fastapi>=0.100. Use exact versions:fastapi==0.115.0. This ensures reproducible builds and prevents silent upgrades to vulnerable versions. - Use lockfiles. Whether you use pip-tools (
requirements.txtgenerated fromrequirements.in), Poetry (poetry.lock), or PDM (pdm.lock), a lockfile captures your entire transitive dependency tree with exact versions. - Audit in CI on every PR. Add pip-audit to your CI pipeline with
--strictmode. Block merges when known vulnerabilities are present. - Run scheduled CI scans. Add a weekly cron job to your CI that runs the audit even when no code changes have been pushed. This catches new CVEs published between deploys.
- Monitor in production. Use a continuous monitoring tool like CVE OptiBot to track vulnerabilities against your deployed dependency versions. CI alone is not enough.
- Review dependencies before adding them. Before adding a new package, check its maintenance status, recent CVE history, and how many transitive dependencies it brings in. A package that has not been updated in two years is a risk. A package that pulls in 20 sub-dependencies for a simple task is a risk.
- Keep your base image updated. If you deploy with Docker, regularly update your Python base image. The
python:3.12-slimimage includes system libraries (openssl, libexpat) that also receive CVEs. - Separate dev and production dependencies. Do not install pytest, black, or mypy in production. Fewer packages means fewer potential vulnerabilities.
- Enable Dependabot or Renovate. Automated dependency update tools create pull requests when new versions are available, making it easy to stay current.
- Document your security process. Write down how your team handles dependency vulnerabilities — who gets notified, what is the SLA for patching critical CVEs, and how do you verify the fix. An undocumented process is an unreliable process.
The best time to start monitoring your FastAPI dependencies was when you first deployed. The second-best time is today.
Pourquoi la securite FastAPI commence par les dependances
FastAPI s'est impose comme l'un des frameworks web Python les plus rapides et les plus agreables a utiliser. Son design async-first, sa documentation OpenAPI automatique et sa validation par Pydantic en font le choix de reference pour les APIs et microservices modernes. Mais voici la realite inconfortable : FastAPI en lui-meme n'est qu'une fine couche d'orchestration. Le vrai travail est effectue par ses dependances — et c'est precisement la que se cachent les risques de securite.
Quand vous executez pip install fastapi, vous n'installez pas qu'un seul paquet. Vous integrez Starlette pour la couche HTTP, Pydantic pour la validation des donnees, et une constellation de dependances transitives qui gerent tout, du routage d'URL a la serialisation JSON. Ajoutez uvicorn comme serveur ASGI, et l'arbre de dependances s'etend encore avec httptools, uvloop, websockets, et d'autres.
Chacun de ces paquets est maintenu par des equipes differentes avec des pratiques de securite, des rythmes de publication et des processus de divulgation de vulnerabilites differents. Un seul CVE dans l'un d'entre eux peut compromettre l'integralite de votre application — meme si votre propre code est irréprochable. La securite FastAPI, c'est la securite des dependances, et ignorer cela est un angle mort dangereux.
Selon le rapport State of the Software Supply Chain de Sonatype, 96% des telechargements de composants open source contenant des vulnerabilites connues etaient evitables — le correctif existait deja au moment du telechargement.
L'arbre de dependances FastAPI : de 10 a 50+
Regardons ce qu'un projet FastAPI typique installe reellement. Vous commencez avec un environnement virtuel propre et un requirements.txt modeste :
fastapi==0.115.0
uvicorn[standard]==0.32.0
sqlalchemy[asyncio]==2.0.36
asyncpg==0.30.0
httpx==0.28.0
python-multipart==0.0.18
pydantic-settings==2.7.0
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
jinja2==3.1.5
Cela represente 10 dependances directes. Maintenant, executez pip freeze et comptez les lignes :
annotated-types==0.7.0
anyio==4.8.0
asyncpg==0.30.0
bcrypt==4.2.1
certifi==2024.12.14
cffi==1.17.1
click==8.1.8
cryptography==44.0.0
ecdsa==0.19.0
fastapi==0.115.0
greenlet==3.1.1
h11==0.14.0
httpcore==1.0.7
httptools==0.6.4
httpx==0.28.0
idna==3.10
jinja2==3.1.5
markupsafe==3.0.2
passlib==1.7.4
pyasn1==0.6.1
pycparser==2.22
pydantic==2.10.4
pydantic-core==2.27.2
pydantic-settings==2.7.0
python-dotenv==1.0.1
python-jose==3.3.0
python-multipart==0.0.18
rsa==4.9
sniffio==1.3.1
sqlalchemy==2.0.36
starlette==0.41.3
typing-extensions==4.12.2
uvicorn==0.32.0
uvloop==0.21.0
watchfiles==1.0.4
websockets==14.1
Cela fait 36 paquets — plus du triple de vos dependances directes. Chacun est une surface d'attaque potentielle. Et c'est une configuration relativement legere. Ajoutez Redis, Celery, un client S3 ou un outil de migration, et vous depassez facilement les 60 paquets.
Comprendre la profondeur transitive
Le danger des dependances transitives, c'est leur invisibilite. Vous n'avez jamais explicitement choisi h11, httptools ou pyasn1, et pourtant ils s'executent dans votre environnement de production. Quand un CVE est publie contre l'un de ces paquets, la plupart des equipes ignorent completement qu'elles sont concernees — parce que le paquet vulnerable n'apparait jamais dans leur requirements.txt.
Ce n'est pas une preoccupation theorique. En 2023, une vulnerabilite critique dans cryptography (CVE-2023-49083) a affecte toutes les applications Python utilisant la validation de certificats X.509 — y compris la plupart des applications FastAPI avec des clients HTTPS. De nombreuses equipes n'ont realise leur exposition que des semaines apres la disponibilite du correctif.
Vecteurs de vulnerabilites courants dans les stacks FastAPI
Examinons les zones specifiques ou les dependances FastAPI ont historiquement ete vulnerables et ou vous devez concentrer votre attention.
Contournement de la validation Pydantic
Pydantic est l'epine dorsale de la validation des requetes FastAPI. Quand Pydantic a un bug de parsing, vos hypotheses de validation s'effondrent silencieusement. Les problemes passes incluent la gestion incorrecte des types union imbriques, la coercition permissive des chaines vers des types numeriques, et des cas limites dans les chaines contraintes par regex. Un contournement de validation signifie que des donnees malveillantes atteignent votre logique metier sans verification — exactement le type de bug qui mene aux attaques par injection, a la corruption de donnees ou a l'escalade de privileges.
Problemes de middleware et de routage Starlette
Starlette gere tout le traitement HTTP sous FastAPI. Les vulnerabilites ici sont particulierement dangereuses car elles affectent chaque requete. Les problemes historiques incluent le path traversal via des URLs mal formees, des cas limites de misconfiguration du middleware CORS et des failles de gestion des cookies de session. Parce que FastAPI delegue tout le traitement du routage et des middlewares a Starlette, une vulnerabilite Starlette est une vulnerabilite FastAPI.
Parsing HTTP par Uvicorn
Uvicorn, le serveur ASGI le plus courant pour FastAPI, s'appuie sur httptools (un binding Python du http-parser de Node.js) et h11 pour le parsing HTTP. Les bugs de parsing HTTP sont une source classique d'attaques par request smuggling, ou un attaquant forge des requetes HTTP ambigues qui sont interpretees differemment par votre proxy (Nginx) et votre serveur applicatif (uvicorn). Cela peut mener a l'empoisonnement du cache, au contournement de l'authentification et a l'acces non autorise aux sessions d'autres utilisateurs.
HTTPX et SSRF sortant
De nombreuses applications FastAPI utilisent httpx pour les requetes HTTP sortantes — appels d'APIs tierces, webhooks ou microservices. Les vulnerabilites SSRF (Server-Side Request Forgery) permettent aux attaquants de faire emettre par votre serveur des requetes vers des services internes, des endpoints de metadonnees cloud ou d'autres ressources sensibles. Bien que le SSRF soit souvent une faille au niveau applicatif, les bugs de parsing d'URL et le comportement de suivi des redirections au niveau de la bibliotheque peuvent faciliter l'exploitation.
Dependances cryptographiques
Si votre application FastAPI gere l'authentification JWT (python-jose), le hachage de mots de passe (passlib, bcrypt) ou le TLS (cryptography), vous dependez de paquets ou une seule vulnerabilite peut compromettre completement votre systeme d'authentification. Ces paquets meritent une attention particuliere car leurs defaillances sont silencieuses — un hash faible ou une verification de signature cassee ne leve pas d'erreur ; cela cesse simplement de vous proteger.
Comment auditer vos dependances FastAPI
Connaitre les risques est la premiere etape. La deuxieme est d'etablir un processus repetable pour trouver et corriger les dependances vulnerables.
pip-audit : l'outil de reference
pip-audit est maintenu par la Python Packaging Authority (PyPA) et verifie vos paquets installes contre la base de donnees OSV (Open Source Vulnerabilities). C'est ce qui se rapproche le plus d'un scanner de vulnerabilites officiel pour Python.
# Installer pip-audit
pip install pip-audit
# Auditer votre environnement actuel
pip-audit
# Auditer un fichier requirements directement
pip-audit -r requirements.txt
# Sortie en JSON pour le parsing CI
pip-audit --format json --output audit-results.json
pip-audit est rapide et fiable pour les verifications ponctuelles. Cependant, il a des limites : il ne scanne que quand vous le lancez, il ne suit pas les vulnerabilites decouvertes apres votre dernier audit, et il necessite que votre environnement soit installe (ou un fichier requirements bien forme).
Safety : alternative commerciale
safety verifie vos dependances contre la Safety DB (maintenue par Safetycli). Il fonctionne de maniere similaire a pip-audit mais utilise une base de donnees de vulnerabilites differente, donc executer les deux peut detecter des problemes que l'un manque.
# Installer et executer
pip install safety
safety check
# Verifier un fichier requirements
safety check -r requirements.txt
Poetry audit pour les utilisateurs Poetry
Si vous utilisez Poetry pour la gestion des dependances, le plugin poetry audit integre le scan de vulnerabilites directement dans votre workflow :
# Installer le plugin
poetry self add poetry-audit-plugin
# Executer l'audit
poetry audit
Revue manuelle avec pip freeze
Parfois les outils automatises manquent des problemes ou vous avez besoin d'une analyse plus approfondie. Une approche manuelle commence par l'export de votre arbre de dependances complet :
# Exporter les versions exactes
pip freeze > installed-packages.txt
# Utiliser pipdeptree pour visualiser le graphe de dependances
pip install pipdeptree
pipdeptree --warn silence
Cela vous donne une image claire de quels paquets importent quelles dependances transitives, vous aidant a identifier les branches a haut risque de votre arbre de dependances.
Integration CI/CD : audit a chaque push
Les audits manuels sont bons pour les evaluations initiales, mais ils ne passent pas a l'echelle. Vous avez besoin d'un scan automatise a chaque commit et pull request. Voici comment integrer l'audit de dependances dans votre pipeline CI/CD.
GitHub Actions
# .github/workflows/dependency-audit.yml
name: Dependency Audit
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
schedule:
- cron: '0 8 * * 1' # Tous les lundis a 8h
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pip-audit safety
- name: Run pip-audit
run: pip-audit --strict --desc
- name: Run safety check
run: safety check
continue-on-error: true
- name: Check for outdated packages
run: pip list --outdated --format=json
GitLab CI
# .gitlab-ci.yml
dependency-audit:
stage: test
image: python:3.12-slim
script:
- pip install -r requirements.txt
- pip install pip-audit safety
- pip-audit --strict --desc
- safety check || true
- pip list --outdated --format=json
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "main"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
Le flag --strict de pip-audit fait retourner un code de sortie non-nul quand des vulnerabilites sont trouvees, ce qui fera echouer votre pipeline — exactement ce que vous voulez. Cela empeche de merger du code avec des dependances vulnérables connues.
Hooks pre-commit
Pour un retour plus rapide, vous pouvez aussi ajouter un hook pre-commit qui execute pip-audit avant chaque commit :
# .pre-commit-config.yaml
repos:
- repo: https://github.com/trailofbits/pip-audit
rev: v2.7.3
hooks:
- id: pip-audit
args: ['--strict']
Au-dela du CI : monitoring continu en production
L'audit par CI detecte les vulnerabilites au moment du deploiement. Mais qu'en est-il des vulnerabilites decouvertes apres le deploiement ? Votre application de production peut executer la version 2.10.4 de Pydantic aujourd'hui, et un CVE critique pourrait etre publie contre cette version exacte demain matin. Votre pipeline CI ne le detectera pas — il n'y a pas de nouveau commit pour declencher un scan.
C'est la faille fondamentale des strategies de securite basees uniquement sur le CI. Les vulnerabilites sont decouvertes en continu, mais le CI s'execute ponctuellement. Entre les deploiements, vous volez a l'aveugle.
Considerez la chronologie d'une vulnerabilite typique :
- Jour 0 : Vous deployez votre application FastAPI avec toutes les dependances passant l'audit.
- Jour 12 : Un chercheur decouvre une faille de request smuggling dans httptools et la signale en prive.
- Jour 30 : Les mainteneurs publient un correctif et le CVE est publie.
- Jour 30-45 : Votre application execute une version vulnerableconnue, mais personne dans votre equipe ne le sait.
- Jour 46 : Un developpeur pousse une nouvelle fonctionnalite, le CI s'execute et signale enfin le probleme.
Cela represente potentiellement deux semaines d'exposition entre la publication du CVE et la prise de conscience de votre equipe. Pour les infrastructures critiques, deux semaines c'est une eternite. Vous avez besoin d'une solution de monitoring qui scanne votre liste de dependances de production en continu, independamment de votre cadence de deploiement.
OptiBot pour les equipes FastAPI
C'est exactement le probleme que CVE OptiBot a ete concu pour resoudre. Au lieu de s'appuyer uniquement sur les checks CI, OptiBot fournit un monitoring continu et independant du deploiement de votre arbre de dependances.
Comment ca fonctionne
- Uploadez votre lockfile : Importez votre
requirements.txt,poetry.lockouPipfile.lockdans OptiBot. Pas de code source, pas d'acces au depot — juste les noms et versions des dependances. - Scan continu : OptiBot verifie votre liste de dependances contre la base OSV quotidiennement. Quand un nouveau CVE est publie qui affecte l'un de vos paquets, vous etes notifie immediatement.
- Dashboard multi-projets : Vous faites tourner 5 microservices FastAPI ? 10 ? Uploadez chacun d'entre eux et monitorez-les tous depuis un seul tableau de bord. Voyez en un coup d'oeil quels projets sont affectes par un CVE nouvellement publie.
- Alertes email : Soyez notifie des qu'une vulnerabilite est decouverte — pas la prochaine fois que quelqu'un pousse un commit.
- Rapports PDF : Generez des rapports de securite professionnels pour les clients, auditeurs ou la direction. Les agences peuvent envoyer des evaluations de vulnerabilites a leurs clients.
Pourquoi c'est important pour les architectures microservices
FastAPI est couramment utilise dans des architectures microservices ou vous pouvez avoir des dizaines de petits services, chacun avec son propre arbre de dependances. Suivre manuellement les vulnerabilites a travers tous ces services est impraticable. OptiBot vous offre une vue centralisee de la sante des dependances de toute votre organisation, avec des alertes automatiques quand n'importe quel projet est affecte par un nouveau CVE.
Checklist de securite pour les projets FastAPI
Voici une checklist pratique que vous pouvez adopter des aujourd'hui pour renforcer la securite des dependances de votre application FastAPI :
- Epinglez toutes les versions de dependances. N'utilisez jamais de requirements non epingles comme
fastapi>=0.100. Utilisez des versions exactes :fastapi==0.115.0. Cela garantit des builds reproductibles et empeche les mises a jour silencieuses vers des versions vulnerables. - Utilisez des lockfiles. Que vous utilisiez pip-tools (
requirements.txtgenere depuisrequirements.in), Poetry (poetry.lock) ou PDM (pdm.lock), un lockfile capture l'integralite de votre arbre de dependances transitives avec les versions exactes. - Auditez en CI sur chaque PR. Ajoutez pip-audit a votre pipeline CI avec le mode
--strict. Bloquez les merges quand des vulnerabilites connues sont presentes. - Executez des scans CI planifies. Ajoutez un cron job hebdomadaire a votre CI qui execute l'audit meme quand aucun changement de code n'a ete pousse. Cela detecte les nouveaux CVE publies entre les deploiements.
- Monitorez en production. Utilisez un outil de monitoring continu comme CVE OptiBot pour suivre les vulnerabilites contre vos versions de dependances deployees. Le CI seul ne suffit pas.
- Examinez les dependances avant de les ajouter. Avant d'ajouter un nouveau paquet, verifiez son statut de maintenance, son historique CVE recent, et combien de dependances transitives il apporte. Un paquet qui n'a pas ete mis a jour depuis deux ans est un risque. Un paquet qui importe 20 sous-dependances pour une tache simple est un risque.
- Gardez votre image de base a jour. Si vous deployez avec Docker, mettez regulierement a jour votre image de base Python. L'image
python:3.12-sliminclut des bibliotheques systeme (openssl, libexpat) qui recoivent aussi des CVE. - Separez les dependances dev et production. N'installez pas pytest, black ou mypy en production. Moins de paquets signifie moins de vulnerabilites potentielles.
- Activez Dependabot ou Renovate. Les outils de mise a jour automatique des dependances creent des pull requests quand de nouvelles versions sont disponibles, facilitant le maintien a jour.
- Documentez votre processus de securite. Ecrivez comment votre equipe gere les vulnerabilites de dependances — qui est notifie, quel est le SLA pour patcher les CVE critiques, et comment verifiez-vous le correctif. Un processus non documente est un processus peu fiable.
Le meilleur moment pour commencer a monitorer vos dependances FastAPI, c'etait lors de votre premier deploiement. Le deuxieme meilleur moment, c'est aujourd'hui.