État détaillé de la sécurité technique et juridique de la suite RECOV / RECOVMAX. Document destiné aux DPO, responsables sécurité, dirigeants de cabinets qui veulent comprendre ce qui est en place avant d'utiliser le service. Ce document est public et imprimable en PDF (Ctrl + P) pour archivage.
Cloisonnement
RLS multi-tenant
✓ droits de la base contrôlés chaque jour
Hébergement
Base UE
Supabase · Francfort · sous-traitants hors UE sous CCT
Feuille de route
MFA · pentest externe
planifiés · section 9
Auto-évaluation
OWASP ASVS L1
revue interne · non certifié ISO / SOC 2
Verdict en une phrase : RECOVMAX est un produit récent, ouvert compte par compte, avec un cloisonnement des données vérifié et des droits de base contrôlés chaque jour. Les fondations (RLS multi-tenant, headers HTTP, hébergement UE, RGPD, signature webhooks) sont au niveau attendu d'un service applicatif B2B sérieux. Une revue offensive interne (test d'intrusion, août 2026) a identifié puis corrigé et re-vérifié les vulnérabilités critiques et hautes (voir section 13). Les améliorations restantes sont planifiées par priorité (P2-P3) ou conditionnées à la montée en charge. Les chantiers restants (DPO formalisé, audit juridique et pentest externes indépendants, runbook d'incident, rétention automatique) relèvent de la montée en charge (recommandés au-delà de 250 utilisateurs).
Annexe technique sur demande. Cette page présente les contrôles en place, leur statut et le journal des évaluations. Le détail technique (configuration, objets de la base, seuils, points résiduels et leur traitement, détail de chaque correctif) figure dans une annexe transmise sur demande aux DPO et responsables sécurité, sous accord de confidentialité si besoin : pedro.berbel@dezvolta.org. C'est la pratique courante des éditeurs : ne pas publier la carte de sa propre surface d'attaque. L'essentiel tient en une page dans la synthèse sécurité (PDF).
Méthodologie & référentiels. Les contrôles techniques marqués ✓ (cloisonnement, droits de la base, en-têtes de sécurité, intégrité des bibliothèques tierces, jetons, sauvegardes) sont vérifiés automatiquement : au déploiement pour la configuration, chaque matin pour l'état réel ; un écart déclenche une alerte. Ce document est une auto-évaluation interne alignée sur le référentiel OWASP ASVS niveau 1 (Application Security Verification Standard), complétée par une revue offensive boîte blanche (23 août 2026, voir section 13). Les en-têtes HTTP sont vérifiables indépendamment sur securityheaders.com et Mozilla Observatory. À ce stade, RECOVMAX n'est pas certifié ISO 27001, SOC 2, HDS ni SecNumCloud : ces certifications et un pentest externe indépendant sont envisagés avec la montée en charge (voir roadmap, section 9).
Base de données dans l'UERGPD · DPA publiéIsolation RLS multi-tenantTLS 1.2+ · chiffré au reposJournal append-onlyOWASP ASVS L1 auto-évalRevue offensive · 08/2026Vérifiable par un tiers, en un clicEn-têtes · securityheaders.comMozilla Observatory
Vos données : ce qu'on stocke, ce qu'on ne stocke jamais
Stocké chez DEZVOLTA (UE)
→Email du compte · mot de passe haché (bcrypt Supabase Auth)
→Clients accompagnés (nom, SIRET, email contact, IBAN client final si fourni)
→Adresse IP : en clair dans le journal de filtrage technique et lors d'une inscription, d'une candidature ou d'une acceptation des conditions (preuve et lutte contre les abus) ; pseudonymisée dans les journaux d'audit, d'e-mail et d'IA
→Journal d'audit append-only avec chaînage cryptographique : chaque entrée dépend de la précédente, toute altération a posteriori est détectable
Jamais stocké
✗Données de paiement (CB, IBAN client) : gérées par Stripe (PCI DSS L1)
✗Mots de passe en clair
✗Cookies de tracking publicitaire tiers
✗Aucune donnée de prompt utilisée pour entraîner l'IA Anthropic (opt-out commercial activé)
Architecture & isolation des données
Contrôle
Statut
Détail
RLS PostgreSQL multi-tenant
✓ En place
Toutes les tables métier (dossiers, clients, débiteurs, historique, promesses, échéanciers, modèles) appliquent un cloisonnement par compte au niveau de la base. Un cabinet ne peut techniquement pas voir les données d'un autre : la base elle-même refuse.
RLS read-only enforcement
✓ En place
Un compte dont l'abonnement n'est plus actif passe en lecture seule : la base refuse toute création, modification ou suppression.
RLS plan enforcement
✓ En place
Quotas (clients distincts selon le forfait, créances réparties librement, enveloppe de relances mensuelle) appliqués au niveau base, pas seulement applicatif.
Service-role isolé serverless
✓ En place
La clé de service Supabase n'est utilisée que côté serveur (fonctions serverless), jamais exposée au client. Les accès applicatifs suivent le moindre privilège.
Droits fermés par défaut
✓ Depuis le 04/10/2026
Toute nouvelle table, séquence ou fonction de la base est créée sans aucun droit pour les visiteurs comme pour les comptes connectés : chaque accès est accordé explicitement. Le droit de vider une table n'est accordé à aucun rôle exposé.
Accès sans connexion : liste blanche
✓ Contrôlé chaque jour
Sans connexion, la base ne laisse lire que des contenus publics (articles, textes légaux, prix, annuaire, avis publiés) et déposer un avis ; tout le reste est refusé par la base elle-même. Chaque matin, cette liste est comparée à l'état réel des droits : tout écart déclenche une alerte.
Migrations versionnées
✓ En place
Toute évolution de la base est une migration SQL versionnée dans Git, idempotente (DROP IF EXISTS, CREATE OR REPLACE, ALTER...IF NOT EXISTS).
Backups automatisés & procédure restore
✓
Sauvegardes chiffrées quotidiennes des tables critiques, transmises de façon sécurisée à l'opérateur ; le déclencheur planifié refuse toute exécution sans secret valide (fail-closed). Procédure de restauration documentée v1.0 (13/05/2026) couvrant 4 scénarios (1 ligne · 1 table · base complète · compromission), avec vérifications d'intégrité post-restauration (chaîne d'audit, clés étrangères, cohérence des comptes) et calendrier trimestriel. Premier test validé le 13/05/2026. Engagements : RPO 24h · RTO 48h (formalisés dans la prochaine révision du DPA).
Audit append-only avec chaînage cryptographique
✓
Le journal d'administration est append-only et chaîné cryptographiquement au niveau de la base : chaque entrée dépend de la précédente, de sorte que toute altération a posteriori est détectable par une vérification d'intégrité côté serveur. Modification et suppression sont refusées par la base elle-même, pas seulement par l'application.
Headers HTTP & durcissement web
Header
Statut
Valeur appliquée
Strict-Transport-Security (HSTS)
✓
max-age=63072000; includeSubDomains; preload (2 ans, sous-domaines compris ; directive preload envoyée, inscription à la liste de préchargement des navigateurs non demandée à ce jour)
X-Frame-Options
✓
DENY : pas d'embed possible (anti-clickjacking)
X-Content-Type-Options
✓
nosniff : anti-MIME sniffing
Content-Security-Policy
✓
Liste blanche explicite : origine du site, trois CDN de bibliothèques (versions épinglées et empreintes vérifiées, ligne suivante), Stripe, Supabase et, sous consentement seulement, Google Tag Manager, Google Analytics 4 et Microsoft Clarity. frame-src limité à Stripe ; connect-src limité aux services réellement appelés par le navigateur ; object-src 'none', base-uri 'self', form-action 'self', frame-ancestors 'none'.
Subresource Integrity (SRI)
✓ Depuis le 05/09/2026
Chaque bibliothèque chargée depuis un CDN est épinglée à une version exacte et porte son empreinte sha384 : un fichier modifié côté CDN (compromission, substitution) est refusé par le navigateur au lieu d'être exécuté. Les bibliothèques d'import chargées à la demande portent la même empreinte.
Referrer-Policy
✓
strict-origin-when-cross-origin : pas de leak de chemins lors de navigation externe
Permissions-Policy
✓
camera=(), microphone=(), usb=(), magnetometer=(), gyroscope=(), accelerometer=(), geolocation=(self), payment=(self) : capteurs désactivés ; géolocalisation et paiement réservés à l'origine du site (module de paiement Stripe)
X-Robots-Tag (pages sensibles)
✓
noindex, nofollow, noarchive, nosnippet sur les interfaces d'administration et de reporting (exclues de l'indexation, protégées par authentification)
Cache-Control (pages auth)
✓
private, no-store, no-cache, must-revalidate, max-age=0 : pas de cache sur les pages connectées
Cross-Origin-Opener-Policy
✓
same-origin : isolation du contexte de navigation contre les attaques cross-origin. Actif depuis juin 2026.
Authentification & sessions
Contrôle
Statut
Détail
Supabase Auth (PostgreSQL backed)
✓ En place
Email + mot de passe, magic links, OAuth Google. Sessions gérées par des jetons signés côté fournisseur d'authentification, de courte durée et renouvelés automatiquement, protégés par la politique de sécurité du contenu, l'échappement systématique des données affichées et l'intégrité des bibliothèques tierces (section 2).
Hash des mots de passe
✓ En place
bcrypt côté Supabase (workfactor 10). Aucun mot de passe en clair côté DEZVOLTA.
Rate limiting login
⚠ Renforcement planifié
Les tentatives de connexion sont limitées côté fournisseur d'authentification et complétées par un contrôle applicatif ; les échecs répétés sur l'administration sont détectés et agrégés en alerte quotidienne. Un plafonnement persistant dédié est déployé avec la montée en charge.
Honeypot anti-bot signup
✓ En place
Le formulaire d'inscription intègre des pièges anti-automatisation vérifiés côté serveur, en complément du rate-limiting.
2FA (TOTP)
Planifié P2 · Q4 2026
Second facteur temporel (TOTP), en priorité sur les accès d'administration. Intégration planifiée.
CAPTCHA login
Planifié P2 · Q4 2026
Défi anti-automatisation (type Turnstile/hCaptcha) prévu en complément des protections anti-force-brute existantes.
Tokens API admin
✓ En place
Jeton porteur signé requis pour les endpoints d'administration, stocké côté serveur (variables d'environnement), jamais en code.
XSS, CSRF, injection
Vecteur
Statut
Mitigation
XSS : escape HTML user-controlled
✓ En place
Échappement systématique de toute donnée issue de la base (& < > ") avant réinjection dans le DOM, appliqué de façon uniforme sur l'ensemble du dashboard.
XSS : console d'administration
✓ En place
Toute donnée venue de l'extérieur (formulaires publics, base) est encodée avant d'entrer dans un gestionnaire d'événement ou un lien ; un lien n'est suivi que s'il pointe vers une adresse web. Vérifié par une garde qui bloque le déploiement.
SQL injection
✓ Couvert
Requêtes paramétrées via le SDK Supabase et des fonctions serveur dédiées. Aucune concaténation SQL côté application. Les routines Postgres utilisent des paramètres typés et un contrôle d'accès strict au rôle appelant.
CSRF dashboard
✓ Couvert
Authentification par jeton transmis en en-tête, sans cookie de session : une requête forgée depuis un autre site ne porte pas l'authentification.
CSRF webhooks Stripe
✓ Couvert
Signature cryptographique vérifiée sur chaque événement, à temps constant, avec fenêtre anti-rejeu. Rejet immédiat si la signature est invalide ou si le secret manque.
CSRF webhooks partenaires
✓ Couvert
Échanges signés dans les deux sens avec un secret propre à chaque partenaire.
Open redirect
✓ Couvert
Tous les redirects (login, magic link, Stripe checkout) utilisent des URLs hardcodées vers le domaine recov.pro. Aucun paramètre user-controlled dans les redirects.
Données personnelles & RGPD
Exigence RGPD
Statut
Détail
Hébergement Union européenne
✓ En place
Supabase région eu-central-1 (Frankfurt). Vercel (région fra1) pour les fonctions sensibles et le CDN. Pas de Cloudflare en infrastructure.
Transferts hors UE encadrés
✓ En place
Base de données dans l'Union européenne (Francfort). Les sous-traitants techniques qui peuvent traiter des données hors UE (hébergement applicatif Vercel, envoi d'e-mails Resend, assistant Anthropic) sont encadrés par les Clauses Contractuelles Types Commission UE 2021/914 ; pour Anthropic, opt-out d'entraînement activé (les données ne servent pas à entraîner les modèles). Stripe Irlande (UE). Aucun CDN tiers devant le site : la diffusion est assurée par Vercel (retrait de Cloudflare le 21 août 2026, voir la liste des sous-traitants).
Liste publique des sous-traitants (art. 28-2)
✓ En place
Page recov.pro/sous-traitants mise à jour à chaque ajout/retrait. Préavis 30 jours pour droit d'opposition.
DPA spécifique RECOVMAX
✓ En place
15 articles couvrant la sous-traitance à 3 niveaux (RECOV → Cabinet → Client TPE). Voir DPA RECOVMAX.
Mandat de gestion fourni
✓ En place
Modèle PDF généré par RECOVMAX (9 articles, relevé daté des créances confiées, annexe de sous-traitance RGPD). C'est l'une des trois preuves du pouvoir d'agir que l'utilisateur déclare et date pour chaque client : ce mandat signé, une clause du contrat de prestation ou de la lettre de mission (pour un expert-comptable, mandat spécial écrit), ou son statut de salarié de l'entreprise. L'envoi automatique n'est possible qu'une fois ce pouvoir déclaré.
L'application (espace connecté) ne charge aucun outil d'analytics et ne dépose aucun cookie de suivi. Depuis août 2026, les pages marketing (accueil, pages de présentation) intègrent Microsoft Clarity et Google Analytics (via Google Tag Manager) pour la mesure d'usage, activés uniquement après consentement via le bandeau cookies, déclaré dans la politique de confidentialité, aucun traceur publicitaire.
Retention policy automatisée
À faire P2
Pas de purge auto après inactivité. Recommandé : 3 ans après dernière connexion. Sprint estimé : 1 jour (cron).
DPO désigné
Non requis
Pas obligatoire en l'état (volume < 250 users, pas de données sensibles RGPD strict art. 9). Recommandé au-delà de 250 utilisateurs ou en cas de saisine CNIL. Budget : 50-150 €/mois externalisé.
Procédure incident (notification 72h)
À faire P2
Pas de runbook formel pour notification CNIL en cas de violation. À documenter (modèle CNIL fourni).
Paiements & facturation
PCI DSS
✓ N/A direct
Aucune donnée carte ne transite chez DEZVOLTA. Stripe Payments Europe Ltd (Irlande, PCI DSS Level 1) gère intégralement la collecte et le stockage des moyens de paiement.
Webhook Stripe : signature
✓
Signature vérifiée sur chaque événement ; rejet immédiat si invalide. Un même paiement n'est jamais traité deux fois.
Customer Portal (annulation, MAJ CB)
✓
Géré 100% par Stripe (UI hosted). DEZVOLTA n'a jamais accès aux données carte.
Mode TEST séparé du LIVE
✓
Environnements isolés. Bascule LIVE = changement de variables d'env Vercel uniquement, pas de code.
BYO Stripe Payment Link : anti-phishing
✓
Les liens de paiement fournis par les cabinets sont validés au niveau de la base pour n'autoriser que des liens Stripe officiels : impossible d'injecter une URL de phishing dans les relances envoyées à leurs débiteurs.
Transparence débiteur
✓
Le débiteur paye sur buy.stripe.com avec le branding du créancier final. Zéro mention RECOVMAX ni du cabinet dans le parcours de paiement. L'argent va directement au compte Stripe du créancier : DEZVOLTA n'est pas intermédiaire de paiement (pas d'agrément PSP/ACPR requis).
Hard cap fondateurs : race-safe
✓
Le décompte des places fondateurs est protégé par un verrou transactionnel en base : deux paiements concurrents sur la dernière place ne peuvent pas dépasser la limite (bascule Standard + trace d'audit si la limite est atteinte).
Réconciliation Stripe native
✓
client_reference_id Stripe injecté automatiquement dans les Payment Links et QR codes (MED + LRAR PDF). Permet à terme une réconciliation automatique sans intermédiaire technique.
IA Recovo : assistant rédaction & synthèse
Recovo est l'assistant IA intégré au dashboard RECOVMAX : il informe sur l'état du portefeuille (score santé, dossiers prioritaires, échéances) et synthétise un dossier : un renfort d'organisation, jamais un rédacteur ni un décideur. Il ne rédige aucun email et ne contacte jamais les débiteurs. Propulsé par Anthropic Claude (sous-traitant documenté dans la liste publique sous-traitants).
Anthropic : non-entraînement (opt-out commercial)
✓
Aucun prompt utilisé pour entraîner les modèles (opt-out commercial Anthropic activé). Conservation limitée selon la politique d'Anthropic, puis suppression. Transfert encadré par les Clauses Contractuelles Types UE 2021/914.
Pseudonymisation avant appel IA
✓ Depuis le 09/09/2026
Les raisons sociales sont remplacées par des étiquettes (Client A, Débiteur 2) côté serveur, avant tout appel : sur les trois chemins : assistant du cockpit, assistant Solo, génération de texte de relance. Le modèle raisonne sur des montants, des retards et des statuts ; il ne reçoit ni raison sociale, ni SIRET, ni adresse e-mail. Les vrais noms sont rétablis dans la réponse avant affichage : l'utilisateur lit son dossier normalement. Limite assumée : un nom saisi librement dans une question et qui ne correspond à aucun dossier suivi ne peut pas être reconnu, donc pas substitué. Vérifié par un banc de contrôle (20 cas, dont son propre cas d'échec) et par une garde qui bloque le déploiement.
Disclaimer juridique systématique
✓
Chaque réponse Recovo rappelle son cadre : il informe et synthétise, sans rédiger ni envoyer à la place de l'utilisateur. Pour un conseil juridique : avocat ou commissaire de justice.
Sources internes figées
✓
Cadre français : L.441-10, loi 2026-307, Factur-X. Pas d'hallucination juridique sur réglementations étrangères.
Positionnement clair
✓
Recovo est un assistant d'orientation et de synthèse, pas un conseiller juridique automatisé. Le professionnel garde la responsabilité de chaque envoi.
Redaction des logs
✓
Stricte côté serveur : pas d'email débiteur, nom client, SIRET dans les traces de monitoring ou logs Vercel.
Journal de chaque appel
✓ Depuis le 03/10/2026
Chaque appel au modèle, abouti ou refusé, est journalisé : nature d'usage, modèle, volume, issue. Jamais le contenu de la question ni de la réponse ; l'adresse de l'appelant n'y figure que sous forme d'empreinte.
Anti prompt injection
✓ En place
Filtrage anti-injection côté serveur sur les entrées de l'assistant, en complément du cloisonnement des données (aucune PII débiteur dans les prompts) et du rôle strictement informatif de l'assistant. Les règles de détection ne sont pas détaillées et évoluent en continu.
Monitoring actif en production
Au-delà des contrôles statiques (architecture, headers), un middleware Vercel Edge tourne en permanence devant chaque requête. Il bloque les scrapers, AI bots non autorisés et outils offensifs avant même qu'ils n'atteignent l'application.
Couverture
Edge runtime
Latence ~ 0 ms · zero cold start
Modèles bloqués
30+
User-Agents + IPs + comportements
Crawlers légitimes
~ 15
Moteurs & réseaux légitimes
Dashboard live
interne
Admin SOC · accès restreint
Catégorie bloquée
Justification
Scripts d'extraction génériques
Aucun usage légitime : extraction massive de contenu.
Robots d'entraînement de modèles d'IA
Usage du contenu sans contrepartie. Les robots de citation qui alimentent les réponses des assistants IA restent autorisés, pour préserver la visibilité du site.
Robots d'indexation agressifs
Exploration à haute fréquence sans valeur pour les utilisateurs.
Outils offensifs
Leur présence signale une tentative active de cartographie ou d'exploitation.
Ce qui est observé en production (extrait anonymisé)
Statistiques sur les sept jours précédant le 5 septembre 2026 (relevé du journal de filtrage), accessibles en continu dans la console d'administration interne :
Métrique
Valeur observée 7j
Lecture
Requêtes bloquées
267
Tentatives de cartographie ou d'extraction rejetées avant traitement
Crawlers légitimes autorisés
1 379
Moteurs de recherche, aperçus de liens, assistants de citation : indexation normale
Motifs de rejet les plus fréquents
Sondes de fichiers de configuration, automates génériques
Jamais un utilisateur
Pays de provenance des requêtes rejetées
HU, US, CA, CH, SG, FR, BR, TW, DE, ES
Profil mondial typique des pools de proxies
Familles de signaux
plusieurs
Combinaison de signaux, chaque rejet journalisé ; détail en interne
Ce qui est tracé
Chaque requête rejetée et chaque action d'administration laissent une trace exploitable. C'est ce qui permet, en cas de doute, de répondre à la seule question qui compte : quelqu'un a-t-il obtenu un accès ?
Trace
Contenu
Conservation
Requêtes filtrées
Adresse IP, type de client, chemin demandé, pays, motif du rejet. Aucune donnée de dossier ni de débiteur.
Adresse IP effacée à 90 jours ; le reste, sans adresse, sert à la mesure du trafic
Actions d'administration
Nature de l'action, cible, résultat, horodatage. Journal append-only : les opérations de modification et de suppression sont refusées au niveau de la base, pas seulement de l'application. Chaînage cryptographique actif depuis le 13/05/2026 : chaque entrée dépend de la précédente, ce qui rend toute altération a posteriori détectable.
Durée légale d'archivage
Échecs d'authentification
Chaque tentative infructueuse sur l'administration est journalisée, puis agrégée dans une alerte quotidienne automatique. Des échecs répétés depuis une même adresse entraînent le blocage temporaire de l'accès d'administration ; le compteur est tenu en base, sur une empreinte d'adresse.
Durée légale d'archivage
Santé de la chaîne de relance
Chaque matin, une vingtaine de contrôles relisent le journal et l'état de la base (tâches planifiées exécutées, envois en file, affichage des pages du produit, respect du mode test, dossiers immobilisés, droits de la base comparés à la liste blanche) et n'alertent qu'au franchissement d'un seuil. L'utilisatrice voit le témoin de sa propre relance automatique dans le cockpit. Un contrôle qui ne peut pas s'exécuter est marqué non mesuré, jamais compté vert.
Journal d'audit, durée légale d'archivage
Adresses IP
Dans le journal d'audit, le journal des e-mails et celui de l'IA, les IP sont pseudonymisées : elles distinguent deux machines sans identifier une personne. Elles sont conservées en clair dans le journal de filtrage technique et, lors d'une inscription, d'une candidature ou d'une acceptation des conditions, comme preuve et pour lutter contre les abus.
–
Chemins de configuration : refusés à tous, sans exception. Les fichiers cachés et de configuration ne sont accessibles à personne, ni aux robots d'indexation autorisés, ni aux sessions authentifiées, ni depuis les adresses internes. Aucune liste d'exception ne peut outrepasser cette règle, et toute tentative est journalisée.
Trafic légitime préservé : l'indexation par les moteurs de recherche et le partage sur les réseaux sociaux fonctionnent normalement. Cette autorisation porte sur les pages publiques uniquement : elle ne donne accès à aucune ressource protégée. La liste des agents autorisés et des signaux de filtrage n'est pas publiée.
Blocage géographique : ciblé, pas massif. Les pages publiques restent accessibles depuis le monde entier (référencement, aperçus de liens, assistants de citation). Les espaces privés (cockpit, rapports client, console d'administration) ne s'ouvrent que depuis la France métropolitaine et l'Outre-mer, et la création de compte suit la même règle, le service étant conçu pour des créances de droit français. Un professionnel en déplacement peut demander une exception.
Secrets & gestion des clés
Variables d'environnement Vercel
✓
Tous les secrets stockés en env vars Vercel (chiffrement at-rest). Aucun secret en code (vérifié par grep + secrets scanning GitHub Push Protection).
Rotation des secrets
⚠ Automatisation en cours
Secrets chiffrés (variables d'environnement du fournisseur, jamais en code), couverts par une procédure de rotation déclenchée sur événement de sécurité et lors des évolutions d'équipe ou d'infrastructure. Automatisation en cours.
Anon key Supabase publique
✓
La clé anon est par design publique ; la protection des données repose sur les politiques RLS multi-tenant (testées), sur des droits fermés par défaut et sur le cloisonnement serveur. La clé de service reste strictement côté serveur.
Secrets des points d'administration
✓
Les secrets des points d'administration et des tâches planifiées sont comparés à temps constant ; chaque échec est journalisé et compte pour le blocage par adresse.
Jetons du portail partenaire
✓ Depuis le 04/10/2026
Conservés uniquement sous forme d'empreinte : un jeton n'est visible qu'à sa création, et une copie de la base ne livrerait aucun jeton utilisable. Un partenaire inconnu et un jeton faux reçoivent la même réponse. Vérifié chaque jour.
Roadmap sécurité 2026-2027
Priorisation transparente : voici ce qui est prévu et quand. Si un point est critique pour vous, contactez-nous : nous pouvons accélérer pour un client cabinet majeur.
Sprint
Action
Bénéfice
✓ Fait · 10 oct. 2026
SPF sur le domaine racine (depuis le 5 sept. 2026) et DMARC en rejet, rapports agrégés activés ; rejet appliqué après cinq semaines de rapports agrégés, où tous les envois du service sont alignés
Un e-mail usurpant l'adresse d'expédition du service est refusé par les messageries destinataires
✓ Fait · 4 oct. 2026
Droits de la base fermés par défaut ; accès sans connexion limité à une liste blanche ; contrôle quotidien automatique des droits
Une table ou une fonction ajoutée n'est jamais ouverte par mégarde ; un écart à la liste blanche est signalé le lendemain matin.
✓ Fait · 3 oct. 2026
Console d'administration : encodage des données externes, secrets comparés à temps constant, blocage par adresse après échecs répétés ; journal de chaque appel IA
Une donnée de formulaire public ne peut plus s'exécuter dans la console ; une attaque par essais successifs est bloquée et tracée.
✓ Fait · 9 sept. 2026
Chemin de résolution des noms figé sur l'ensemble des routines de la base : une routine privilégiée résout ses références dans le seul schéma applicatif, jamais dans un chemin fourni par l'appelant. Les routines d'accès au forfait ne répondent qu'au compte qui les interroge (le serveur excepté) et refusent par défaut un compte sans profil
Ferme le vecteur d'élévation de privilèges le plus courant sur ce moteur de base, et aligne le cloisonnement sur la métadonnée de forfait comme il l'était déjà sur les données. Comportement re-vérifié après application sur le parcours d'écriture complet d'un dossier : aucun écart.
✓ Fait · 6 sept. 2026
Revue fonctionnelle des tableaux de bord : les documents remis au client final (rapport client, chronologie PDF du dossier) sont générés à partir d'une liste blanche d'événements de recouvrement, comme le portail de suivi ; empreintes SRI étendues aux bibliothèques d'import chargées à la demande
Un document remis à un tiers ne contient que les actions de recouvrement ; une bibliothèque d'import substituée chez le CDN n'est plus exécutée.
✓ Fait · 5 sept. 2026
Revue de surface : intégrité des bibliothèques tierces (SRI), répertoires internes retirés du service, avis de l'analyseur de base passés en revue
Un fichier substitué chez un CDN n'est plus exécuté ; la carte des contrôles internes n'est plus lisible, voir section 13.
Conditionné · forfait fournisseur
Refus des mots de passe déjà compromis (inscription et changement)
Un mot de passe présent dans une fuite publique connue serait refusé. Vérifié le 5 septembre 2026 : l'option existe chez le fournisseur d'authentification mais n'est ouverte qu'à son forfait payant ; elle sera activée dès le passage à ce forfait, prévu avec les premiers abonnements.
Si vous êtes responsable sécurité d'un cabinet ou d'une entreprise et avez besoin d'un complément (audit indépendant, certification, contrat sur mesure), nous pouvons en discuter en visio.
Signaler une faille de sécurité
Si vous avez identifié une vulnérabilité dans RECOV ou RECOVMAX, merci de nous écrire à pedro.berbel@dezvolta.org avec l'objet [SECURITY].
Notre engagement
✓Accusé de réception sous 48 heures ouvrées
✓Diagnostic et calendrier de correction communiqué sous 5 jours ouvrés
✓Divulgation coordonnée (90 jours par défaut, ajustable selon criticité)
✓Pas de programme bug bounty rémunéré à ce stade, remerciements publics avec votre accord
Hors périmètre : DoS volumétrique, ingénierie sociale, accès physique, services tiers (Stripe, Supabase, Vercel, Resend, Anthropic, à signaler directement à leur équipe sécurité respective).
DEZVOLTA s'engage à rendre la suite RECOV / RECOVMAX accessible au plus grand nombre. L'audit professionnel d'accessibilité (RGAA 4.1) n'a pas encore été réalisé : nous publions ici une auto-déclaration partielle honnête, mise à jour au fil des améliorations.
Date de la déclaration : 11 mai 2026. Méthode : auto-évaluation interne (sans audit externe). Un audit professionnel sera réalisé dans les 12 mois.
Ce qui est déjà en place
Critère
Niveau
État
Hiérarchie de titres + langue de la page (lang="fr")
WCAG A · 1.3.1 / 3.1.1
✓ En place
Labels formulaires associés (label for=)
WCAG A · 3.3.2
✓ En place
Navigation 100 % au clavier (Tab, Enter, Espace, Échap)
WCAG A · 2.1.1
✓ En place
Skip link "Aller au contenu principal"
WCAG A · 2.4.1
✓ En place
Trap focus dans les drawers / modales
WCAG A · 2.4.3
✓ En place
Focus visible (outline lime)
WCAG AA · 2.4.7
✓ En place
aria-hidden sur emojis décoratifs
WCAG A · 1.1.1
✓ En place
aria-label enrichi sur composants drag
WCAG A · 4.1.2
✓ En place
Annonces lecteurs d'écran (aria-live)
WCAG AA · 4.1.3
✓ En place
Identification erreurs forms (aria-invalid, role="alert")
WCAG A · 3.3.1
✓ En place (login)
Alternative clavier au glisser-déposer Kanban (touche Espace)
WCAG AA · 2.5.7
✓ En place
prefers-reduced-motion respecté
WCAG AAA · 2.3.3
✓ En place
Tooltips dismissable par Échap
WCAG AA · 1.4.13
✓ En partie
Mode confort de lecture (zoom utilisateur, contraste renforcé, animations off)
Bonus utilisateur
✓ Disponible
Compatible NVDA, JAWS, VoiceOver, TalkBack
WCAG A · 4.1.2
⚠️ Théoriquement OK · tests utilisateurs réels à faire
Ce qui n'est pas encore en place ou non vérifié
Critère
Niveau
État
Audit professionnel externe (cabinet RGAA)
–
❌ Non réalisé · prévu dans les 12 mois
Contraste texte (4,5:1) audité partout
WCAG AA · 1.4.3
⚠️ Audit partiel · variable --lime-text introduite mais non auditée systématiquement
Contraste éléments non-texte (3:1)
WCAG AA · 1.4.11
⚠️ Non audité
Resize text 200 % sans perte de fonction
WCAG AA · 1.4.4
⚠️ Non testé sur l'ensemble des écrans
Reflow 320 px CSS sans scroll horizontal
WCAG AA · 1.4.10
⚠️ Partiellement testé · ajustements en cours
Suggestions structurées sur erreurs (au-delà du message texte)
WCAG AA · 3.3.3
❌ Non implémenté
Tests réels utilisateur avec lecteurs d'écran
–
❌ Non réalisés (programmés post-30 fondateurs)
Sous-titres / transcripts pour contenu vidéo
WCAG A · 1.2.x
⚠️ Pas de vidéo embarquée actuellement · sera fait si vidéo ajoutée
Comment nous signaler un problème
Si vous rencontrez un défaut d'accessibilité (élément non navigable au clavier, contraste insuffisant, contenu mal lu par un lecteur d'écran, etc.), écrivez-nous à pedro.berbel@dezvolta.org avec :
L'URL de la page concernée
Le navigateur / OS / lecteur d'écran utilisé (si applicable)
La description du problème ou de l'élément bloquant
Engagement de réponse : sous 5 jours ouvrés. Correction : selon la gravité, entre 1 jour (bloquant) et 30 jours (amélioration).
Voies de recours
Cette procédure est à utiliser dans le cas suivant : vous avez signalé au responsable du site un défaut d'accessibilité qui vous empêche d'accéder à un contenu ou à un service, et vous n'avez pas obtenu de réponse satisfaisante. Vous pouvez :
Contacter le délégué du Défenseur des droits dans votre région
Envoyer un courrier à : Défenseur des droits, Libre réponse 71120, 75342 Paris CEDEX 07
Durcissements appliqués, juin 2026
Journal de durcissement : correctifs de sécurité appliqués à la suite d'une revue de code interne (front, API serverless, middleware). Documentés ici par transparence, en complément de la roadmap.
Mesure
Statut
Vérification des paiements à temps constant
✓ Appliqué
Origines autorisées resserrées sur l'API publique
✓ Appliqué
Échappement des données dans les e-mails sortants
✓ Appliqué
Taille des requêtes conservées plafonnée
✓ Appliqué
Politique de sécurité du contenu renforcée
✓ Appliqué
Isolation du contexte de navigation
✓ Appliqué
Capteurs et API navigateur désactivés
✓ Appliqué
Colonnes sensibles hors de portée de la clé publique
✓ Appliqué
Tableau de bord masqué tant que la session n'est pas confirmée
✓ Appliqué
Journal des audits
Test d'intrusion interne (boîte blanche) mené le 23 août 2026 sur l'API, la base de données et la surface client. Les vulnérabilités critiques et hautes identifiées ont été corrigées et re-testées le jour même. Journal ci-dessous, par transparence.
Historique des évaluations
Date
Type
Auteur
Portée & résultat
18 octobre 2026
Revue externe en lecture seule & droits des vues de la base
Externe (lecture seule) et interne (DEZVOLTA)
En-têtes HTTP, TLS et DNS, code servi au navigateur, droits du catalogue de la base, avis de l'analyseur de sécurité. ✓ Aucune vue exécutée avec les droits de son propriétaire n'accepte d'écriture ; la seule lisible sans connexion est l'annuaire des alternants (initiale du nom, sans e-mail ni téléphone). Le contrôle quotidien vérifie désormais aussi, sur ces vues, les droits des comptes connectés. Les autres points relevés (politique de contenu sans script en ligne, droits de lecture par colonne, en-têtes complémentaires) sont planifiés.
10 octobre 2026
Revue de surface & politique e-mail
Interne (DEZVOLTA)
Avis de l'analyseur de sécurité de la base, routines privilégiées, en-têtes HTTP servis, répertoires internes, journal des accès d'administration ; lecture des 45 rapports agrégés DMARC reçus de deux messageries depuis le 6 septembre 2026. ✓ Tous les envois du service alignés, aucune source d'envoi inconnue ; politique DMARC passée en rejet.
4 octobre 2026
Revue des droits de la base de données
Interne (DEZVOLTA)
Politiques de cloisonnement, droits des rôles exposés, droits par défaut, routines appelables sans connexion, stockage. ✓ Cloisonnement des données métier confirmé. Droits fermés par défaut, accès sans connexion limité à une liste blanche, routines d'accès au forfait en refus par défaut, jetons du portail partenaire conservés sous forme d'empreinte avec une réponse unique à tout accès refusé. Un contrôle quotidien automatique vérifie ces points. Comportement re-vérifié sous le rôle anonyme et sous un compte réel, sans perte d'accès pour les utilisateurs.
3 octobre 2026
Revue de la console d'administration
Interne (DEZVOLTA)
Rendu des données externes, comparaison des secrets, blocage des essais répétés, journalisation des appels IA. ✓ Encodage systématique, comparaison à temps constant, blocage par empreinte d'adresse ; chaque point est tenu par une garde qui bloque le déploiement.
9 septembre 2026
Durcissement de la base : chemin de résolution des routines
Interne (DEZVOLTA)
Balayage complet des routines du schéma applicatif : chemin de résolution des noms, droits d'exécution, dépendances hors schéma. ✓ Chemin de résolution figé sur les routines privilégiées ; depuis le 4 octobre 2026, le contrôle quotidien vérifie qu'aucune n'en est dépourvue. Les routines d'assistance qui répondent sur un compte désigné (plafond de clients, appartenance à un cabinet, accès au forfait, droit d'écriture) ne renseignent que le compte qui les interroge. Comportement re-vérifié ensuite sous un compte utilisateur réel, sur le parcours d'écriture complet d'un dossier (création, mise en relance, encaissement) sans aucune écriture persistante.
5 septembre 2026
Revue de surface & balayage des avis de sécurité de la base
Interne (DEZVOLTA)
Avis de l'analyseur de sécurité de la base, fichiers réellement servis, en-têtes HTTP, chaîne de confiance des bibliothèques tierces, configuration e-mail (SPF, DKIM, DMARC). ✓ Durcissements appliqués.
25 août 2026
Contre-vérification des correctifs
Interne (DEZVOLTA)
Sondes directes en base sous le rôle anonyme et sous un compte authentifié : lecture, écriture, cloisonnement inter-comptes, portail partenaire. ✓ Cloisonnement confirmé.
23 août 2026
Test d'intrusion : boîte blanche
Interne (DEZVOLTA)
API serverless, base PostgreSQL / RLS, surface client. ✓ Failles critiques et hautes identifiées, corrigées et re-vérifiées.
Prochain jalon : pentest externe indépendant (feuille de route, section 9). Ce journal l'accueillera dès réalisation : date, cabinet auditeur et lien du rapport : au même format que les acteurs qui publient leurs audits.
Renforcements planifiés : plusieurs améliorations sont intégrées progressivement, en priorité sur les accès d'administration : durcissement de la politique de sécurité du contenu (CSP) vers un modèle à nonces, second facteur d'authentification, et contrôle des mots de passe compromis. L'accès d'administration fait déjà l'objet de contrôles restreints, d'une interface non indexée et d'une alerte sur les échecs de connexion.
Ce document reflète l'état de la sécurité à sa dernière révision (v2.2 · 18 octobre 2026), mis à jour à chaque évolution structurelle. Il n'engage pas DEZVOLTA sur des résultats ni sur l'absence de failles non identifiées. Pour toute observation ou signalement de faille de sécurité (responsible disclosure), écrire à pedro.berbel@dezvolta.org, réponse sous 48h ouvrées.
Des outils de mesure d'audience (Microsoft Clarity, Google Analytics) nous aident à comprendre l'usage de ces pages. Ils ne sont activés qu'avec votre accord. En savoir plus