xpeditis2.0/audit_security/televersements-memoire/televersements-memoire.md

5.4 KiB
Raw Blame History

SEC-09 — Les téléversements ne bornent pas la mémoire utilisée

Gravité historique : Moyenne. Classification : CWE-400.

État au 14 septembre 2026 : Corrigé au niveau des intercepteurs suivis : limite de 10 Mio par fichier et bornes sur fichiers, champs et parties. Ce n'est pas une preuve de résistance globale à des uploads concurrents : le stockage reste en mémoire, et 10 fichiers autorisés peuvent représenter environ 100 Mio de contenu avant surcoût par requête. Le plafond du proxy et les limites de concurrence restent à vérifier.

Executive Summary

Un compte authentifié peut envoyer un document multipart très volumineux sur les routes CSV de création, ajout ou remplacement. Les rôles applicables ont depuis été restreints ; cela ne remplace pas une limite de taille par requête.

Cette fiche repose sur la relecture du code historique accessible et du correctif courant, ainsi que des preuves documentées lors des passes précédentes. Elle ne constate aucun incident réel. La plus ancienne version ici vérifiée est le snapshot 8446f87 ; les corrections historiques figurent dans c09b8be. Aucun tag local ni version déployée n'a permis d'établir une première release vulnérable ou corrigée. Voir METHODOLOGIE.md.

Background

Les intercepteurs multipart lisent le flux avant le handler. La protection mémoire doit donc se situer à cette étape ou en amont, plutôt que dans le contrôle métier après réception.

Vulnerability Details

Les anciens FilesInterceptor limitaient le nombre de fichiers mais pas fileSize. En l'absence d'autre stockage configuré, Multer utilise le stockage mémoire et bufferise le fichier avant de le transmettre au contrôleur. Le quota d'expéditions ou la vérification du propriétaire dans le handler arrivent après cette étape. Le throttling limite le nombre de requêtes, pas les octets d'une seule requête. La configuration théorique d'une taille de document ailleurs dans le dépôt ne suffit pas si elle n'est pas transmise à l'intercepteur.

Extrait historique vérifié, apps/backend/src/application/controllers/csv-bookings.controller.ts, lignes 86–88 du snapshot préaudit :

  @Post()
  @ApiBearerAuth()
  @UseInterceptors(FilesInterceptor('documents', 10))

Les numéros ci-dessus décrivent le snapshot ancien ; les liens suivants ouvrent les fichiers courants, où les lignes peuvent avoir changé.

Sources à examiner ensemble :

Les dépendances locales relues sont Multer 2.0.2 et Busboy 1.6.0. Le constructeur Multer choisit memoryStorage() lorsqu’aucun storage/dest n’est défini ; storage/memory.js concatène le flux dans un Buffer. Busboy utilise une limite de taille infinie quand limits.fileSize n’est pas fourni. Ces versions et chemins installés sont vérifiés sans audit externe des dépendances.

Exploitability Analysis

Pression mémoire susceptible de ralentir ou arrêter le processus Node et d'affecter les autres utilisateurs. Aucun crash, consommation maximale ou attaque de charge n'a été exécuté. Un proxy peut réduire la portée en plafonnant les corps HTTP ; sa configuration effective en production n'a pas été vérifiée.

Le code applicatif établit le chemin décrit, mais ne renseigne pas les protections effectives d'un déploiement donné, sa version en ligne ou les accès déjà exercés par un attaquant. La gravité ci-dessus est celle du mécanisme vulnérable avant correction ; elle n'est pas un score de risque résiduel calculé pour la production.

Proof of Concept

Tests de non-régression existants, inspectables dans le dépôt :

Ils testent les refus et les usages autorisés avec des données locales. Ils ne prouvent pas qu'une ancienne exploitation a eu lieu en production. Les commandes et résultats consolidés sont dans VALIDATION.md ; aucun nouvel exploit n'a été exécuté pendant la rédaction.

Remediation

Corrigé au niveau des intercepteurs suivis : limite de 10 Mio par fichier et bornes sur fichiers, champs et parties. Ce n'est pas une preuve de résistance globale à des uploads concurrents : le stockage reste en mémoire, et 10 fichiers autorisés peuvent représenter environ 100 Mio de contenu avant surcoût par requête. Le plafond du proxy et les limites de concurrence restent à vérifier.

Pour solder le constat en exploitation, vérifier le comportement sur la version effectivement déployée et conserver les contrôles légitimes décrits. La présente passe ajoute uniquement de la documentation ; les correctifs mentionnés existaient avant sa rédaction.

Summary

Les téléversements ne bornent pas la mémoire utilisée est un constat historique de l'audit, à lire avec son état courant ci-dessus. La preuve porte sur le mécanisme et les contrôles cités ; elle ne constitue ni une attestation d'exploitation réelle ni une certification exhaustive du projet.