metalfrom.eu/apps/api/test
Nicolas FRYDER cded10cb3b fix(sécurité): plafond de /admin/import contournable en variant le jeton
Le limiteur était keyé sur le Bearer fourni par l'appelant :

  keyGenerator: (req) => authBearer(req) || req.ip

La clé était donc une valeur non authentifiée, entièrement choisie par
l'attaquant. Envoyer un jeton différent à chaque requête ouvrait un seau neuf à
chaque fois : sur 30 tentatives avec un jeton variable, 0 étaient bloquées, là
où 20 l'étaient avec un jeton fixe. Le plafond ne freinait donc rien — alors
qu'il est précisément là pour ralentir la recherche du jeton par force brute.
Chaque jeton inédit consommait en prime une entrée du cache LRU du limiteur,
évinçant les compteurs légitimes.

La clé redevient l'IP. Isoler par identité réelle est impossible à cette
couche : le limiteur s'exécute avant l'authentification.

Le test « limite par jeton, pas globalement » verrouillait explicitement le
comportement vulnérable. Il est remplacé, avec la raison de l'abandon.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 13:15:12 +02:00
..
helpers feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
integration fix: sync du point principal + verrou de migration, redis mort retiré, tests par propriétés 2026-08-18 21:03:17 +02:00
adminAuth.test.js feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
adminRoutes.test.js fix(admin): passe de debug guidée par la mutation — 4 bugs, mutation 64 → 68 % 2026-08-18 15:42:52 +02:00
adminRoutesCoverage.test.js feat: validation syntaxique du SQL + supervision des services de fond 2026-08-18 18:20:15 +02:00
bandFilters.test.js fix(admin): passe de debug guidée par la mutation — 4 bugs, mutation 64 → 68 % 2026-08-18 15:42:52 +02:00
cancellation.test.js feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
conflicts.test.js fix(admin): passe de debug guidée par la mutation — 4 bugs, mutation 64 → 68 % 2026-08-18 15:42:52 +02:00
harness.test.js feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
locations.test.js fix: sync du point principal + verrou de migration, redis mort retiré, tests par propriétés 2026-08-18 21:03:17 +02:00
publicRoutes.test.js feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
publicRoutesCoverage.test.js feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
rateLimit.test.js fix(sécurité): plafond de /admin/import contournable en variant le jeton 2026-08-22 13:15:12 +02:00
sqlSyntax.test.js fix: sync du point principal + verrou de migration, redis mort retiré, tests par propriétés 2026-08-18 21:03:17 +02:00
validate.property.test.js fix: sync du point principal + verrou de migration, redis mort retiré, tests par propriétés 2026-08-18 21:03:17 +02:00
validate.test.js feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00