Audit de sécurité
Dernière mise à jour : 24 septembre 2026.
Capibara publie le résultat de ses audits de sécurité : ce qui a été cherché, ce qui a été trouvé, ce qui est corrigé et ce qui reste à faire. Chaque ligne décrit ce qui était possible et ce qui a changé, sans le détail qui permettrait de le reproduire.
Audit de septembre 2026
176 constats confirmés, 176 corrigés au 24 septembre 2026.
Ce qui a été examiné
- Comptes, connexion, double authentification et sessions
- Cloisonnement entre organisations et droits par rôle
- Paiements, abonnements et facturation
- Sites publics des organisations : membres, réservations, billetterie, partages
- Fichiers et pièces jointes
- Contenus injectés dans les pages (scripts, intégrations)
- Requêtes émises par le serveur vers d'autres sites
- Abus : force brute, envois en masse, épuisement de quotas
- Secrets et jetons (invitation, réinitialisation, clés d'accès)
- Console d'administration de la plateforme
- Portail développeurs, applications tierces et connexion OAuth
- Messagerie et webmail
- Configuration du serveur web et des certificats
- Données personnelles : export, effacement, durées de conservation
Méthode
- Audit interne du code source complet, réalisé par l'équipe Capibara avec des outils d'analyse de code.
- Chaque constat a été soumis à un second examen chargé de le réfuter ; seuls les constats qui y ont résisté sont comptés ci-dessous.
- Les constats exploitables sans compte ont été confirmés sur le service en production par des requêtes en lecture seule, sans rien modifier.
- Chaque correction est accompagnée de tests automatisés qui empêchent le défaut de revenir.
- Cet audit ne remplace pas un test d'intrusion mené par un prestataire indépendant.
Résultats par gravité
| Gravité | Confirmés | Corrigés |
|---|---|---|
| Critique | 4 | 4 |
| Élevée | 18 | 18 |
| Moyenne | 54 | 54 |
| Faible | 100 | 100 |
Le détail
| Gravité | Domaine | Ce qui était possible, et ce qui a changé | État |
|---|---|---|---|
| Critique | Comptes et connexion | Le lien d'invitation d'un nouveau membre était visible par les autres membres, et pouvait servir à prendre un compte existant. Les liens sont désormais stockés sous forme d'empreinte, n'apparaissent plus dans aucune liste, et un compte déjà utilisé ne peut plus être réclamé par une invitation. | Corrigé |
| Critique | Paiements | Sur une réservation ou un achat en ligne, la carte enregistrée d'un client pouvait être proposée à quelqu'un qui avait simplement saisi son adresse e-mail. Les cartes enregistrées ne sont plus proposées qu'à un membre dont l'adresse est vérifiée. | Corrigé |
| Critique | Messagerie | Une organisation pouvait créer un alias sur le domaine d'une autre, ou sur un domaine public, et capter ou détruire des boîtes ; un alias n'est plus accepté que sur un domaine que l'organisation possède et a vérifié. | Corrigé |
| Critique | Messagerie | Un membre au rôle le plus bas pouvait ouvrir le webmail de n'importe quel collègue ; seuls le titulaire, les membres de l'équipe de la boîte et les gestionnaires des boîtes peuvent l'ouvrir, et l'ouverture par un gestionnaire est journalisée. | Corrigé |
| Élevée | Noms de domaine | Une organisation pouvait consulter et modifier la configuration DNS d'un domaine qu'elle avait seulement déclaré, sans en avoir prouvé la propriété. La preuve de propriété est désormais exigée. | Corrigé |
| Élevée | Console d'administration | Un « Administrateur » pouvait réinitialiser le mot de passe d'un compte Root et en prendre le contrôle ; seul un Root dépanne désormais un membre du staff, et jamais un Root depuis la console. | Corrigé |
| Élevée | Console d'administration | Bannir un compte ou réinitialiser son mot de passe ne coupait pas ses sessions ouvertes ; elles sont désormais révoquées. | Corrigé |
| Élevée | Fichiers | Une pièce jointe de projet pouvait se faire passer pour une image et exécuter du code dans la session de qui l'ouvrait ; le type d'un fichier est maintenant décidé par le serveur, et tout fichier déposé est servi sans possibilité de script. | Corrigé |
| Élevée | Abonnements | Changer d'offre ouvrait un second abonnement sans arrêter le premier, et revenir au plan Gratuit n'arrêtait pas le prélèvement ; une organisation n'a désormais qu'un abonnement, qui est modifié ou arrêté en fin de période. | Corrigé |
| Élevée | Applications tierces | Une application tierce pouvait enregistrer une adresse de retour piégée qui exécutait du code sur Capibara au moment du consentement ; seules les adresses https sont désormais acceptées, à l'enregistrement comme à chaque autorisation. | Corrigé |
| Élevée | Applications tierces | Les webhooks d'une application installée recevaient les événements d'une organisation (paiements, contacts, et sur option le PDF de la facture et l'identité du client) sans que l'organisation ait accordé l'accès correspondant ; ils sont désormais limités aux données autorisées, vérifiées au moment de chaque envoi, et le lien du PDF expire. | Corrigé |
| Élevée | Sites publics | En créant un compte sur le site d'un commerçant avec l'adresse e-mail d'un de ses clients, on pouvait voir ses demandes au support et son adresse postale ; ces informations ne sont plus rattachées à un compte qu'une fois l'adresse e-mail confirmée, et cette confirmation demande aussi le mot de passe du compte. | Corrigé |
| Élevée | Sites publics | Une requête forgée pouvait faire pointer le lien de réinitialisation du mot de passe d'un compte membre vers un site tiers, alors que l'e-mail partait bien de la vraie adresse du commerçant ; ces liens sont désormais toujours construits sur l'adresse officielle du site. | Corrigé |
| Élevée | Droits et rôles | Un gestionnaire pouvait s'attribuer le rôle d'administrateur de son organisation ; on ne peut plus attribuer un rôle plus puissant que le sien, ni agir sur un membre qui a plus de droits que soi. | Corrigé |
| Élevée | Comptes et connexion | Une session ouverte n'était jamais revérifiée : révoquer un appareil, changer ou réinitialiser son mot de passe, ou un bannissement ne coupaient pas l'accès ; ces gestes prennent désormais effet en moins d'une minute. | Corrigé |
| Élevée | Cloisonnement | Un membre suspendu d'une organisation gardait l'accès à ses données ; la suspension est désormais vérifiée à chaque requête, dans l'application comme dans l'API. | Corrigé |
| Élevée | Comptes et connexion | La limite de tentatives de connexion pouvait être dépassée par des essais simultanés, et ne s'appliquait pas par compte ; chaque tentative est désormais comptée avant vérification, par adresse et par compte. | Corrigé |
| Élevée | Fichiers | Les fichiers déposés par les utilisateurs (pièces jointes du support et des projets, justificatifs, documents RH) n'étaient pas tous servis dans un bac à sable ; ils le sont désormais, avec un type fixé par le serveur : un fichier piégé ouvert dans un onglet ne peut plus agir au nom de la personne qui l'ouvre. | Corrigé |
| Élevée | Droits et rôles | Un délégué autorisé à gérer les rôles pouvait créer un rôle portant des droits qu'il n'avait pas (paie, export du fichier client) puis se l'attribuer ; on ne peut plus donner à un rôle ni à un membre plus de droits que les siens. | Corrigé |
| Élevée | Portail d'entreprise | Réinitialiser le mot de passe d'un utilisateur du portail d'entreprise en remettait le nouveau mot de passe à l'auteur, y compris pour un compte plus puissant que le sien ; c'est désormais refusé, et la réinitialisation coupe les sessions ouvertes. | Corrigé |
| Élevée | Abus | Une cinquantaine de formulaires publics lisaient le contenu d'une requête en entier avant tout contrôle de taille : un envoi démesuré pouvait saturer la mémoire du service ; la lecture est désormais plafonnée selon la nature du formulaire. | Corrigé |
| Élevée | Paiements | Un client qui payait par prélèvement SEPA sur la billetterie ou la boutique pouvait voir sa commande annulée, et sa place ou sa marchandise remise en vente, pendant que le prélèvement était en cours ; la réservation est désormais maintenue jusqu'à l'issue du prélèvement, 21 jours au plus. | Corrigé |
| Moyenne | Messagerie | L'interface d'administration du serveur de messagerie était joignable depuis Internet (protégée par mot de passe). Elle ne l'est plus : seul le service d'auto-configuration des logiciels de messagerie reste public. | Corrigé |
| Moyenne | Console d'administration | Tout membre du staff, même en lecture seule, pouvait publier une actualité visible par tous les clients, sans trace ; cette porte a été supprimée. | Corrigé |
| Moyenne | Données personnelles | La suppression d'une organisation laissait ses index de recherche et une partie de ses données rattachées ; elles sont désormais effacées avec elle. | Corrigé |
| Moyenne | Noms de domaine | Les domaines personnalisés des clients recevaient un en-tête qui imposait HTTPS à tous leurs sous-domaines, y compris ceux hébergés ailleurs ; cet engagement est désormais réservé aux domaines de Capibara. | Corrigé |
| Moyenne | Noms de domaine | L'achat de nom de domaine, dont le parcours n'était pas terminé, restait déclenchable par l'API ; il est coupé côté serveur jusqu'à son achèvement. | Corrigé |
| Moyenne | Noms de domaine | Une valeur par défaut pouvait publier une adresse locale dans la zone DNS du domaine d'un client ; elle est désormais refusée. | Corrigé |
| Moyenne | Fichiers | Une clé de fichier forgée permettait à un salarié de relire des fichiers de son organisation auxquels il n'avait pas droit, comme les pièces RH d'un collègue ; les clés sont désormais validées strictement, et le stockage refuse tout chemin détourné. | Corrigé |
| Moyenne | Ressources humaines | Le calendrier d'équipe révélait le motif des absences des collègues, par exemple un arrêt maladie ; seuls l'intéressé et les RH le voient désormais. | Corrigé |
| Moyenne | Documents | Un lien de partage rapide restait actif après la suppression du document et ne pouvait pas être révoqué ; les nouveaux liens rapides sont révocables, et la corbeille coupe tous les liens. | Corrigé |
| Moyenne | Requêtes sortantes | Le logo de l'organisation était téléchargé par le serveur sans garde, ce qui ouvrait une sonde du réseau interne et un risque de saturation mémoire ; il est désormais lu directement dans la médiathèque, sans aucune requête réseau. | Corrigé |
| Moyenne | Comptes et connexion | La connexion avec OPUS pouvait ouvrir un compte Capibara existant sur la seule foi de l'adresse e-mail, sans demander la double authentification ; un compte existant n'est plus jamais rattaché automatiquement, et le code de double authentification est désormais exigé. | Corrigé |
| Moyenne | Secrets et jetons | Des jetons de récupération de la double authentification et de vérification d'adresse étaient conservés en clair, et le compte de lecture des tableaux de bord pouvait lire toute la base commune ; seule leur empreinte est conservée, et ce compte ne lit plus que les statistiques agrégées. | Corrigé |
| Moyenne | Abus | Des requêtes envoyées en rafale pouvaient dépasser les limites de débit ; la décision est désormais atomique. | Corrigé |
| Moyenne | Abus | Les limites de débit comptaient chaque adresse IPv6 séparément ; elles regroupent désormais les adresses d'un même réseau. | Corrigé |
| Moyenne | Abonnements | L'essai gratuit de 14 jours pouvait être rouvert à chaque réabonnement ; il n'est plus offert qu'une fois par organisation et par propriétaire. | Corrigé |
| Moyenne | Boutique | Un code promo à usage limité pouvait être utilisé plusieurs fois par des commandes simultanées ; son usage est désormais réservé de façon atomique. | Corrigé |
| Moyenne | Boutique | Les clés de licence générées par la boutique utilisaient un tirage prévisible ; elles sont désormais tirées de façon cryptographique. | Corrigé |
| Moyenne | Réservations | Deux visiteurs pouvaient réserver et payer le même créneau au même instant ; la réservation d'un créneau est désormais exclusive. | Corrigé |
| Moyenne | Applications tierces | Une application payante suspendue faute de paiement pouvait être réactivée par une simple mise à jour ; elle ne se réactive plus que par un nouvel achat. | Corrigé |
| Moyenne | Applications tierces | Le code d'une application hébergée pouvait joindre toute l'application interne et choisir l'adresse IP vue par les limites de débit ; sa sortie réseau est désormais limitée au seul service prévu, avec des en-têtes reconstruits. | Corrigé |
| Moyenne | Messagerie | Le secret d'accès au webmail était partagé et permanent, donc un accès pouvait survivre au départ d'une personne ; chaque ouverture reçoit désormais son propre secret, qui expire et qui est révoqué quand la boîte change de mains. | Corrigé |
| Moyenne | Messagerie | Un ancien écran pouvait afficher une signature HTML non filtrée ; cet écran et l'édition libre de la signature ont été supprimés. | Corrigé |
| Moyenne | Documents partagés | Le code à six chiffres d'un document partagé n'était limité qu'adresse IP par adresse IP ; les essais sont désormais comptés par partage, avec un verrouillage temporaire. | Corrigé |
| Moyenne | Contenus des pages | Le code HTML collé dans un bloc Intégration pouvait s'afficher seul, sous l'adresse de l'application ou le domaine d'un autre client, et servir à imiter une page de connexion ; il ne s'affiche plus que dans son cadre, sur le site de son organisation. | Corrigé |
| Moyenne | Abus | L'image de partage des sites et les tuiles de carte pouvaient être sollicitées en boucle jusqu'à ralentir le service ; l'image n'est plus recalculée à chaque demande et les tuiles ne sont servies que par petits morceaux. | Corrigé |
| Moyenne | Intelligence artificielle | Un visiteur anonyme du chat pouvait épuiser le quota d'IA de l'organisation ; l'assistant du chat a désormais ses propres plafonds et n'entame plus la part de l'équipe. | Corrigé |
| Moyenne | Intelligence artificielle | Seule la question envoyée à l'assistant d'aide était limitée en taille ; toute la requête l'est désormais, avec un plafond par connexion. | Corrigé |
| Moyenne | Billetterie | Un billet payé dans les dernières minutes du paiement pouvait être encaissé sans être émis ; la réservation dure maintenant plus longtemps que le paiement, le prestataire de paiement est consulté avant de libérer des places, et un paiement tardif émet les billets ou alerte l'organisateur. | Corrigé |
| Moyenne | Billetterie | Un visiteur pouvait bloquer les places d'un événement en multipliant les réservations ; le nombre de places par adresse e-mail et par connexion est désormais plafonné. | Corrigé |
| Moyenne | Constructeur de site | Les codes d'accès du site et des pages protégées étaient transmis en clair à tout membre ayant un accès en lecture au constructeur de site ; ils ne sont plus jamais renvoyés à l'écran. | Corrigé |
| Moyenne | Organisations | N'importe quel membre pouvait lancer un transfert de propriété, et un transfert abouti laissait l'organisation sans propriétaire ; seul le propriétaire peut désormais le lancer, et le destinataire devient bien propriétaire. | Corrigé |
| Moyenne | Données personnelles | La suppression de compte demandée n'était jamais exécutée ; elle l'est désormais automatiquement à l'issue du délai de 30 jours annoncé. | Corrigé |
| Moyenne | Abus | Les invitations pouvaient servir à envoyer des e-mails en masse ou à répétition depuis la plateforme ; elles sont désormais limitées en nombre, en fréquence et par les places du forfait. | Corrigé |
| Moyenne | Comptes et connexion | Un code de double authentification pouvait être rejoué ou deviné depuis de nombreuses adresses ; chaque code ne sert plus qu'une fois et les essais sont limités par compte. | Corrigé |
| Moyenne | Comptes et connexion | Une requête interne renvoyait au navigateur des données sensibles du compte ; elle ne renvoie plus que l'identifiant et l'adresse e-mail. | Corrigé |
| Moyenne | Comptes et connexion | Un jeton de connexion par portail d'entreprise ou OPUS pouvait servir plusieurs fois ; il ne sert plus qu'une fois. | Corrigé |
| Moyenne | Comptabilité | Le justificatif d'une dépense pouvait désigner un autre fichier de l'organisation ; sa référence est désormais vérifiée strictement, à l'enregistrement comme à la lecture. | Corrigé |
| Moyenne | Cloisonnement | Un rôle limité à ses propres contacts voyait ceux de toute l'organisation dans la recherche rapide et via l'assistant ; la recherche applique désormais la même portée que la liste des contacts. | Corrigé |
| Moyenne | Portail d'entreprise | Les invitations du portail d'entreprise échappaient aux limites des invitations ordinaires (droits, places du forfait, fréquence, volume d'envoi) ; elles y sont désormais soumises. | Corrigé |
| Moyenne | Données personnelles | Les fichiers d'une organisation supprimée conservés sur le stockage objet n'étaient pas effacés, et les suppressions antérieures gardaient des données rattachées ; les fichiers partent désormais avec l'organisation, et une tâche de maintenance termine l'effacement des organisations déjà supprimées. | Corrigé |
| Moyenne | Avis | Quiconque connaissait l'adresse e-mail d'un acheteur pouvait publier sans modération un avis marqué « Achat vérifié », et apprendre ainsi que cette personne avait acheté le produit ; la mention exige désormais un compte dont l'adresse a été confirmée. | Corrigé |
| Moyenne | Sites publics | Le code d'une page protégée n'était freiné que par adresse IP ; les essais sont désormais aussi comptés par page, toutes connexions confondues, et le site d'une organisation suspendue ne se déverrouille plus. | Corrigé |
| Moyenne | Abus | Trois formulaires d'envoi de fichiers chargeaient toute la requête en mémoire avant d'en vérifier la taille ; la lecture est désormais bornée, et la limite de fréquence s'applique avant. | Corrigé |
| Moyenne | Documents partagés | Un document partagé publiquement était renvoyé avec le type déclaré au moment de son dépôt ; il part désormais en téléchargement neutre, isolé du site. | Corrigé |
| Moyenne | Applications tierces | Un fichier enregistré par une application tierce était servi avec le type choisi par l'application ; ce type est désormais déduit du fichier lui-même, qui est isolé du reste de l'interface. | Corrigé |
| Moyenne | Boutique | Un visiteur pouvait bloquer le stock d'un produit en multipliant les paniers ; le nombre d'unités réservées par connexion est désormais plafonné. | Corrigé |
| Moyenne | Billetterie | Le filet qui vérifie auprès du prestataire de paiement avant de libérer des places de billetterie ou de formation n'était pas activé ; il l'est désormais. | Corrigé |
| Moyenne | Billetterie | Le plafond de places réservables par connexion sur la billetterie n'était pas appliqué ; il l'est désormais. | Corrigé |
| Moyenne | Réservations | Un paiement de formation ou de réservation effectué dans les dernières minutes pouvait être encaissé alors que la place avait déjà été libérée ; la réservation dure maintenant plus longtemps que le paiement, et le prestataire est consulté avant de libérer. | Corrigé |
| Moyenne | Caisse | Un paiement au terminal virtuel restait possible 24 heures, y compris après son annulation par le caissier ; il expire au bout de 30 minutes, et l'annulation ferme d'abord le paiement chez le prestataire. | Corrigé |
| Moyenne | Facturation | Un client qui ouvrait le lien de paiement d'une facture dans deux onglets pouvait la payer deux fois ; le paiement déjà ouvert est désormais réutilisé. | Corrigé |
| Moyenne | Paiements | Les paiements par prélèvement (SEPA) confirmés quelques jours après la commande n'étaient pas pris en compte ; ils le sont désormais, et un prélèvement en cours ne libère plus la place réservée. | Corrigé |
| Moyenne | Portail d'entreprise | La connexion du portail d'entreprise n'avait pas les protections de la connexion principale (limite de tentatives par compte, code de double authentification à usage unique, temps de réponse constant) ; elle les applique désormais. | Corrigé |
| Moyenne | Abus | Sur la plupart des formulaires et pages publics, l'adresse d'un visiteur pouvait être prise dans un en-tête qu'il écrit lui-même, ce qui permettait de contourner les limites anti-abus ; elle est désormais toujours prise dans la valeur posée par le serveur frontal de Capibara, et une adresse IPv6 est comptée par réseau. | Corrigé |
| Faible | Bibliothèques | La bibliothèque d'affichage des cartes avait une faille connue dans une fonction que Capibara n'utilise pas. Elle a été mise à jour vers une version corrigée. | Corrigé |
| Faible | Console d'administration | Un rôle staff pouvait être donné à un compte dont l'adresse n'était pas vérifiée ; l'adresse doit maintenant l'être. | Corrigé |
| Faible | Modération | La modération pouvait remettre en ligne une organisation suspendue par l'administration (fraude, bannissement) ; l'origine de chaque suspension est désormais enregistrée et respectée. | Corrigé |
| Faible | Support | Un agent support pouvait effacer les sanctions consignées dans le dossier d'un client sans que le contenu soit conservé ; ce retrait exige maintenant le droit de sanctionner et reste tracé. | Corrigé |
| Faible | Console d'administration | Un « e-mail de test » officiel pouvait partir vers n'importe quelle adresse avec des liens libres ; il ne part plus qu'au staff. | Corrigé |
| Faible | Paiements | L'écran de diagnostic des paiements pouvait afficher la clé secrète Stripe en clair quand son format n'était pas reconnu ; elle est toujours masquée. | Corrigé |
| Faible | Console d'administration | L'état technique détaillé de la plateforme était visible par les rôles support et modération ; il est réservé aux rôles d'administration technique. | Corrigé |
| Faible | Infrastructure | Une route interne de contrôle des certificats répondait au public et écrivait en base à chaque appel ; elle ne sert plus que l'infrastructure, répond pareil à tout refus et n'écrit qu'une fois par domaine. | Corrigé |
| Faible | Contenus des pages | La politique de sécurité du contenu autorisait des scripts de n'importe quel paquet d'un CDN public ; elle est restreinte au seul chemin utilisé, sur la seule page qui en a besoin. | Corrigé |
| Faible | Exploitation | La documentation d'exploitation décrivait un changement du secret principal qui aurait rendu illisibles les secrets chiffrés et bloqué les comptes à double authentification ; elle est corrigée. | Corrigé |
| Faible | Noms de domaine | Une coupure réseau pendant une commande auprès du registraire pouvait la faire renvoyer ; ces requêtes ne sont plus rejouées et ont un délai d'abandon. | Corrigé |
| Faible | Ressources humaines | Supprimer un salarié laissait ses pièces RH sur le disque ; elles sont maintenant effacées avec la fiche, comme les justificatifs de frais retirés. | Corrigé |
| Faible | Documents | Le droit « déposer des fichiers » permettait de remplacer le contenu d'un document existant ; il faut désormais le droit de modification, ou être propriétaire du document. | Corrigé |
| Faible | Documents | On pouvait déposer un fichier dans le dossier d'une équipe dont on n'était pas membre ; la visibilité du dossier est maintenant vérifiée. | Corrigé |
| Faible | Médiathèque | Les dossiers personnels ou d'équipe de la médiathèque pouvaient être renommés ou supprimés par d'autres membres ; seuls leur propriétaire, leur équipe ou la modération le peuvent désormais. | Corrigé |
| Faible | Médiathèque | L'import d'images par l'assistant ignorait le quota de la formule et ne bornait pas le téléchargement ; le quota s'applique, et la durée comme la taille sont bornées. | Corrigé |
| Faible | Performance | Plusieurs téléchargements chargeaient tout le fichier en mémoire ; ils sont servis en flux. | Corrigé |
| Faible | Comptes et connexion | Un lien de connexion OPUS ou du portail d'entreprise pouvait connecter quelqu'un à son insu dans le compte d'un tiers ; le lien OPUS est désormais lié au navigateur qui a fait la connexion, et le portail demande une confirmation qui nomme le compte. | Corrigé |
| Faible | Comptes et connexion | Les redirections de la connexion OPUS pouvaient repartir en http derrière le serveur mandataire ; elles sont construites sur l'adresse publique. | Corrigé |
| Faible | Comptes et connexion | Désactiver la double authentification par e-mail ne coupait pas les sessions ouvertes ; elles le sont désormais. | Corrigé |
| Faible | Paiements | Un paiement par prélèvement pouvait activer un achat avant que l'argent soit encaissé ; rien n'est plus accordé avant l'encaissement. | Corrigé |
| Faible | Paiements | Le droit de facturation suffisait à rembourser une commande de billets sans les annuler ; ce remboursement passe désormais uniquement par la billetterie. | Corrigé |
| Faible | Facturation électronique | Pour les offres payantes, la facture d'usage de la facturation électronique pouvait partir sans moyen de paiement ; elle est désormais prélevée sur la carte de l'abonnement. | Corrigé |
| Faible | Facturation | Une facture annulée pouvait être marquée payée, et un double clic la comptait deux fois ; ce passage est désormais vérifié. | Corrigé |
| Faible | Portail développeurs | Suspendre un développeur ne coupait pas ses clés d'API ni ses jetons, et un jeton restait valable jusqu'à une heure après la suppression de son client ; les deux sont désormais vérifiés à chaque appel. | Corrigé |
| Faible | Portail développeurs | La clé de ligne de commande d'un membre retiré d'une équipe restait utilisable ; elle est révoquée avec lui. | Corrigé |
| Faible | Portail développeurs | L'adresse d'autorisation OAuth pouvait rediriger vers un site tiers, et renvoyait une erreur serveur sur une adresse mal formée ; elle répond désormais par une erreur, sans redirection, tant que l'application et son adresse ne sont pas vérifiées. | Corrigé |
| Faible | Portail développeurs | D'autres jetons signés de la plateforme étaient acceptés comme jetons d'API ; chaque jeton porte désormais son usage, vérifié. | Corrigé |
| Faible | Portail développeurs | Un même code d'autorisation pouvait être échangé deux fois en simultané ; l'échange est désormais atomique. | Corrigé |
| Faible | Portail développeurs | Les écrans de revue et du portail recevaient les secrets chiffrés des développeurs ; ils ne quittent plus le serveur. | Corrigé |
| Faible | Portail développeurs | Le webhook Git lisait tous les projets à chaque requête anonyme, sans limite de débit ; la recherche est désormais ciblée et limitée. | Corrigé |
| Faible | Messagerie | L'ouverture d'une boîte de la plateforme par l'équipe Capibara n'était pas journalisée ; elle l'est désormais. | Corrigé |
| Faible | Messagerie | Créer un alias d'équipe ou une adresse d'envoi pouvait supprimer une boîte existante du même nom ; c'est désormais refusé. | Corrigé |
| Faible | Messagerie | Une révocation ou une suppression pouvait s'afficher comme faite alors que le serveur mail ne l'avait pas appliquée ; l'écran n'affiche plus que ce qui est confirmé. | Corrigé |
| Faible | Messagerie | Les rebonds des adresses d'envoi par défaut n'étaient pas enregistrés ; ils le sont désormais, et les adresses mortes sont écartées. | Corrigé |
| Faible | Messagerie | Un outil de diagnostic de la plateforme était accessible aux administrateurs des organisations ; il est réservé à l'équipe Capibara. | Corrigé |
| Faible | Messagerie | Deux envois simultanés pouvaient dépasser ensemble le plafond d'envoi ; le plafond est désormais vérifié de façon atomique. | Corrigé |
| Faible | Sites publics | Une même adresse pouvait recevoir en rafale des e-mails de réinitialisation ; un délai par adresse est désormais appliqué. | Corrigé |
| Faible | Support | Le formulaire de réponse au support lisait des envois de taille illimitée avant tout contrôle ; la taille est désormais bornée, et la limite de requêtes s'applique avant la lecture. | Corrigé |
| Faible | Centre d'aide | Les votes « article utile » du centre d'aide pouvaient être répétés sans limite ; un seul vote par article et par visiteur est désormais retenu. | Corrigé |
| Faible | Données personnelles | À la suppression d'un compte membre, son nom restait affiché sur ses avis et commentaires ; il est désormais remplacé par « Ancien membre ». | Corrigé |
| Faible | Sites publics | Sur un site suspendu, la connexion, l'inscription et la réinitialisation des comptes membres restaient possibles ; elles suivent désormais la suspension. | Corrigé |
| Faible | Contenus des pages | Le contenu intégré d'une page réservée restait accessible par l'adresse de son cadre ; il applique désormais les mêmes règles d'accès que la page. | Corrigé |
| Faible | Performance | Chaque affichage d'une intégration relisait toutes les pages du site ; seule la page concernée est désormais lue, avec une limite par visiteur. | Corrigé |
| Faible | Intelligence artificielle | En cas d'erreur, l'assistant d'aide affichait le message technique du fournisseur d'IA ; il affiche désormais un message simple. | Corrigé |
| Faible | Boutique | La page de confirmation de commande pouvait être rechargée en boucle pour multiplier les appels au prestataire de paiement ; ces appels sont désormais espacés et limités. | Corrigé |
| Faible | Newsletter | La version web des anciennes campagnes de newsletter affichait leur HTML sans filtrage ; elle s'affiche désormais dans un cadre isolé. | Corrigé |
| Faible | Messagerie | Le nom d'une organisation n'était pas neutralisé dans les e-mails de transfert de propriété ; il l'est désormais comme partout ailleurs. | Corrigé |
| Faible | Abus | Un compte pouvait créer des organisations sans limite ; la création est désormais bornée. | Corrigé |
| Faible | Organisations | Le message affiché au dernier membre d'une organisation renvoyait vers un écran inexistant ; il oriente désormais vers le support. | Corrigé |
| Faible | Droits et rôles | L'export des données d'une organisation contournait le droit d'exporter le fichier client ; chaque partie de l'export suit désormais le droit qui la protège. | Corrigé |
| Faible | Droits et rôles | Des réglages internes, dont des taux financiers, étaient lisibles par tout membre ; seuls les réglages d'affichage le sont désormais. | Corrigé |
| Faible | Exports | Des champs saisis par des visiteurs pouvaient déclencher des formules à l'ouverture d'un export dans un tableur ; ils sont désormais neutralisés. | Corrigé |
| Faible | Données personnelles | Le droit à l'oubli d'un contact laissait des données personnelles dans son historique et ses inscriptions ; elles sont désormais effacées aussi. | Corrigé |
| Faible | Données personnelles | Des journaux techniques (connexions, adresses IP) étaient conservés sans limite ; ils sont désormais purgés au bout de 12 mois, comme annoncé. | Corrigé |
| Faible | Données personnelles | La durée de conservation du journal d'activité pouvait être réduite à presque rien ; elle ne descend plus sous celle de la formule. | Corrigé |
| Faible | Performance | L'export des abonnés d'une liste n'avait aucune borne ; il en a désormais une. | Corrigé |
| Faible | Secrets et jetons | L'empreinte stockée d'une invitation pouvait servir de lien à qui lisait la base ; elle est désormais refusée. | Corrigé |
| Faible | Secrets et jetons | Les liens de réinitialisation de mot de passe étaient stockés en clair ; seule leur empreinte est conservée. | Corrigé |
| Faible | Comptes et connexion | La vérification du mot de passe actuel n'était pas limitée pour un compte connecté ; elle l'est désormais. | Corrigé |
| Faible | Comptes et connexion | Le temps de réponse révélait si une adresse avait un compte, et un bannissement se révélait sans mot de passe ; les réponses sont désormais indiscernables. | Corrigé |
| Faible | Comptes et connexion | Une adresse saisie avec des majuscules à l'inscription empêchait de réinitialiser son mot de passe ; les adresses sont désormais normalisées. | Corrigé |
| Faible | Comptes et connexion | Les codes de secours de la double authentification étaient tirés de façon non uniforme ; ils le sont désormais. | Corrigé |
| Faible | Médiathèque | Un membre pouvait déposer une image dans le dossier personnel d'un collègue ; un dossier personnel n'accepte plus que les fichiers de son propriétaire. | Corrigé |
| Faible | Applications tierces | L'écran d'autorisation des applications tierces ne revérifiait pas lui-même l'adresse de retour ; il le fait désormais et ne redirige que vers une adresse web, même ouvert directement. | Corrigé |
| Faible | Applications tierces | L'adresse publique qu'une application installée expose aux services extérieurs ne pouvait pas être révoquée ; un administrateur peut désormais la régénérer, et l'ancienne cesse aussitôt de fonctionner. | Corrigé |
| Faible | Applications tierces | L'écran d'installation d'une application pouvait annoncer qu'aucune donnée ne quittait Capibara alors que son éditeur recevait des événements de l'organisation par webhook ; il le dit désormais. | Corrigé |
| Faible | Messagerie | La signature HTML transmise au webmail n'était pas filtrée par le webmail lui-même ; elle l'est désormais avant d'être enregistrée. | Corrigé |
| Faible | Données personnelles | Le droit à l'oubli d'un contact laissait son nom dans le journal d'activité ; il n'y apparaît plus. | Corrigé |
| Faible | Messagerie | Le nom d'une organisation s'affichait mal dans l'objet de certains e-mails ; les objets sont désormais écrits en texte brut. | Corrigé |
| Faible | Organisations | L'écran des organisations proposait le transfert de propriété à des administrateurs qui ne pouvaient pas le faire, et décrivait mal son effet ; il est réservé au propriétaire et décrit fidèlement. | Corrigé |
| Faible | Données personnelles | Les formulaires publics conservaient une empreinte réversible de l'adresse IP des visiteurs ; elle n'est plus enregistrée. | Corrigé |
| Faible | Exports | Un export CSV réimporté ajoutait une apostrophe devant certaines valeurs à chaque aller-retour ; il redonne désormais les valeurs d'origine. | Corrigé |
| Faible | Portail d'entreprise | Un membre suspendu puis réactivé depuis le portail d'entreprise pouvait rester bloqué ; la réactivation rouvre bien son accès et respecte les places du forfait. | Corrigé |
| Faible | Console d'administration | Le remboursement forcé depuis la console pouvait viser une commande de billets sans annuler les billets ; il passe désormais par la billetterie de l'organisation. | Corrigé |
| Faible | Marketplace | L'essai gratuit d'une app payante du marketplace pouvait être rouvert à chaque réabonnement ; il n'est plus offert qu'une fois par organisation et par app. | Corrigé |
| Faible | Banque | La facture mensuelle des comptes bancaires supplémentaires pouvait partir sans moyen de paiement ; elle est désormais prélevée sur la carte de l'abonnement. | Corrigé |
| Faible | Abonnements | Une organisation repassée au plan Gratuit par l'ancien parcours, dont l'abonnement était encore prélevé, n'avait plus de bouton pour l'arrêter ; elle peut désormais le résilier depuis sa page d'abonnement. | Corrigé |
| Faible | Réservations | Une réservation saisie par l'équipe et une réservation en ligne pouvaient occuper le même créneau au même instant ; toute réservation, en ligne ou par l'équipe, réserve désormais le créneau de façon exclusive. | Corrigé |
| Faible | Console d'administration | Certains outils techniques de la console (métriques, description de l'API) et l'envoi d'images d'actualité étaient ouverts à tout membre du staff ; ils exigent désormais le rôle correspondant. | Corrigé |
| Faible | Facturation | Faute d'administrateur, les e-mails de facturation (échec de paiement, facture) pouvaient partir au premier membre venu ; ils ne vont plus qu'au propriétaire ou à un administrateur. | Corrigé |
| Faible | Boutique | Un gestionnaire de boutique pouvait désigner comme « fichier vendu » un fichier rangé hors du dossier prévu ; seuls les fichiers réellement déposés pour la vente sont acceptés. | Corrigé |
| Faible | Intelligence artificielle | Le plafond de réponses de l'assistant IA du chat par connexion n'était pas appliqué ; il l'est désormais. | Corrigé |
| Faible | Marketplace | Les adresses des captures d'écran d'une fiche du marketplace n'étaient vérifiées que dans le navigateur ; elles le sont désormais par le serveur. | Corrigé |
| Faible | Sites publics | Lors d'un incident de base de données, un site protégé par code ou réservé aux membres pouvait s'afficher comme public ; il affiche désormais une erreur. | Corrigé |
| Faible | Cloisonnement | Un membre suspendu pouvait encore demander à basculer vers l'organisation dont il était suspendu ; la bascule vérifie désormais que son adhésion est active. | Corrigé |
| Faible | Comptes et connexion | Les sessions de connexion expirées ou révoquées n'étaient jamais supprimées ; elles sont purgées chaque nuit. | Corrigé |
| Faible | Comptes et connexion | Désactiver la double authentification ne demandait que le mot de passe ; un code de l'application ou de secours est désormais exigé. | Corrigé |
| Faible | Comptes et connexion | La page de connexion affichait « mot de passe incorrect » même quand le compte était temporairement verrouillé ; elle affiche désormais la vraie raison, sans en révéler davantage. | Corrigé |
| Faible | Sites publics | Sur les sites clients, le temps de réponse de « mot de passe oublié » révélait si une adresse était inscrite ; la réponse est désormais indiscernable. | Corrigé |
| Faible | Messagerie | Les accès au webmail abandonnés n'expiraient qu'à la réouverture de la boîte ; ils sont désormais révoqués automatiquement toutes les heures. | Corrigé |
| Faible | Messagerie | Retirer un membre d'une équipe ou de l'organisation, ou le suspendre, ne coupait pas son webmail déjà ouvert ; ses sessions sont désormais révoquées immédiatement. | Corrigé |
| Faible | Abus | Quand le cache était indisponible, des requêtes envoyées en rafale pouvaient dépasser les limites de débit ; le comptage de secours est désormais sûr. | Corrigé |
| Faible | Abonnements | Suspendre puis réactiver des membres permettait de dépasser le nombre de places du forfait ; la réactivation vérifie désormais les places. | Corrigé |
| Faible | Paiements | Quand un paiement était déjà en cours ou que le prestataire de paiement ne répondait pas, la page de paiement affichait un message générique ; elle explique maintenant la situation. | Corrigé |
| Faible | Paiements | Les remboursements de billets et d'inscriptions à une formation pouvaient passer par un circuit qui n'annulait ni les billets ni l'inscription ; ils ne passent plus que par leur module, qui libère aussi les places. | Corrigé |
| Faible | Applications tierces | Les fichiers déposés par une app étaient lus ou supprimés sur la foi d'un simple début d'adresse ; l'emplacement doit désormais désigner exactement un fichier de cette installation. | Corrigé |
| Faible | Comptabilité | L'export groupé des justificatifs de dépenses n'appliquait pas la vérification stricte d'emplacement du téléchargement unitaire ; il l'applique désormais. | Corrigé |
| Faible | Comptes et connexion | La liste des sessions actives du compte affichait aussi des sessions déjà expirées ; elle ne montre plus que celles qui donnent encore accès. | Corrigé |
| Faible | Recherche | Après la suppression d'une organisation, la recherche rapide pouvait croire ses index encore remplis ; ce comptage est désormais oublié immédiatement. | Corrigé |
Ce qui reste à faire
- Retirer les scripts en ligne de la politique de sécurité du contenu (CSP à nonce).
- Servir les sites des organisations depuis un domaine distinct de celui de l'application.
- Rendre la double authentification obligatoire pour l'équipe Capibara.
- Transmettre l'accès au webmail sans que le mot de passe de la boîte passe par le navigateur.
- Permettre de changer le secret principal de la plateforme sans interruption.
- Borner la taille des requêtes sur les derniers formulaires authentifiés et les webhooks.
Ce qui protège vos données au quotidien
- Les données de chaque organisation vivent dans un espace de base de données séparé, et chaque accès est vérifié selon le rôle de la personne, à chaque requête.
- Les secrets (clés d'accès, jetons) sont chiffrés au repos et ne sont jamais renvoyés à l'écran.
- Les connexions sont limitées en nombre d'essais, et la double authentification est disponible pour chaque compte.
- Le service est hébergé en France ; la liste des prestataires qui peuvent accéder à des données est publique (sous-traitants).
- Les bibliothèques logicielles utilisées sont contrôlées contre les vulnérabilités connues avant les mises en production.
Signaler une faille
Écrivez à contact@forgenet.fr en décrivant le chemin suivi. Ne testez jamais sur les données d'une autre organisation que la vôtre, et ne rendez rien public avant la correction. Les coordonnées sont aussi publiées au format standard dans /.well-known/security.txt.