Skip to content

fix: harden FortiFlow request boundaries and dependencies - #1

Merged
Tetrax merged 4 commits into
mainfrom
fix/audit-security-hardening
Aug 9, 2026
Merged

fix: harden FortiFlow request boundaries and dependencies#1
Tetrax merged 4 commits into
mainfrom
fix/audit-security-hardening

Conversation

@Tetrax

@Tetrax Tetrax commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Résumé

Ce lot corrige les findings de sécurité à forte valeur identifiés lors de l’audit FortiFlow, sans introduire d’authentification applicative ni modifier la limite métier des gros exports FortiAnalyzer.

Findings corrigés

  • Rate limiting — FIXED
    • limiteur placé avant express.json, Multer et les routes coûteuses ;
    • protection effective de /api/upload et /api/admin ;
    • confiance proxy explicite via FORTIFLOW_TRUST_PROXY, vide par défaut ;
    • configuration Nginx évitant de conserver un X-Forwarded-For fourni par le client.
  • Multer — FIXED : 2.1.12.2.0.
  • ws — FIXED : 8.20.08.21.3.
  • CI sécurité — FIXED / POLICY DOCUMENTED
    • audit npm bloquant sur les vulnérabilités CRITICAL ;
    • Trivy bloquant sur les CRITICAL corrigibles ;
    • HIGH informatives tant que certaines advisories n’ont pas de correctif exploitable.

Accepted risks

  • Absence d’authentification admin/session — ACCEPTED RISK
    • aucun login, utilisateur ou middleware d’identité ajouté ;
    • accès volontairement protégé par l’allowlist IP du firewall fournisseur.
  • Limite upload 2 Gio — ACCEPTED RISK / MAINTAINED
    • besoin confirmé pour les gros exports FortiAnalyzer ;
    • limite conservée et configurable.

Éléments deferred

  • XLSX 0.18.5 — DEFERRED
    • advisories prototype pollution et ReDoS sans correctif npm ;
    • aucun remplacement maintenu et compatible .xls/.xlsx suffisamment fiable ;
    • mitigations conservées : firewall, rate limit, worker isolé, limite Excel dédiée.
  • Réservation atomique de capacité avant écriture upload — DEFERRED
    • nécessiterait réservation et rollback pour éviter les races ; complexité disproportionnée dans ce lot.

Tests et résultats

  • npm test : 58/58 PASS ;
  • cinq répétitions consécutives de la suite : PASS ;
  • node --check : PASS ;
  • docker compose config : PASS ;
  • build Docker local isolé : PASS ;
  • smoke test conteneur : HTTP 200, 21e requête admin en HTTP 429 ;
  • npm audit --omit=dev : 11 → 9 vulnérabilités :
    • high : 6 → 4 ;
    • moderate : 5 ;
    • critical : 0.

Correctif CI après ouverture de la PR

  • 37302a7 fix(ci): align runtime tests and base image security :
    • le contrôle Nginx reste exécuté dans le checkout complet et est explicitement ignoré dans l’image applicative, où infra/nginx est volontairement absent ;
    • image de base épinglée sur node:26.7.0-alpine3.24 afin d’obtenir npm 11.19.0 et tar 7.5.19, version corrigeant CVE-2026-59873 ;
    • Node 24 LTS a été vérifié mais embarquait encore tar 7.5.16 ; aucun contournement ou ignore Trivy n’a été ajouté.

Résultats GitHub Actions finaux

  • node-tests : PASS ;
  • docker-build : PASS ;
  • security-scan : PASS ;
  • publish-ghcr : SKIPPED attendu sur une Pull Request.

Régressions

Aucune régression observée lors des tests locaux, de la CI et de la review indépendante.

Hors périmètre

Cette PR ne merge ni ne redéploie aucune stack Portainer.

Tetrax added 4 commits August 9, 2026 17:11
Register upload and admin limiting before body parsing, support an explicit trusted proxy, and cover rate and upload boundaries with HTTP tests.
Upgrade the directly exposed upload and WebSocket dependencies to versions outside the audited vulnerable ranges.
Run npm audit with a critical threshold, block fixable critical Trivy findings, and document accepted and deferred security risks.
@Tetrax
Tetrax merged commit 1b47fdd into main Aug 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant