Aller au contenu principal

Architecture de sécurité

TrueSign est conçu fail-closed : en cas de doute, le système refuse plutôt que d'accepter. Cette page résume les garanties d'architecture — le détail d'implémentation fait partie du dossier de Security Review AppExchange.

Webhook authentifié, fermé par défaut​

Le point d'entrée des notifications Yousign est public par nécessité — il est donc traité comme hostile par défaut :

  • chaque notification doit porter une signature HMAC-SHA256 vérifiée en temps constant ;
  • pas de secret configuré = notification rejetée — le mode dégradé n'existe qu'en sandbox, jamais en production ;
  • une notification forgée ne peut ni changer un statut, ni déclencher un writeback ;
  • les réponses d'erreur ne révèlent jamais d'information interne.

Secrets protégés​

La clé API Yousign et le secret webhook sont stockés dans des métadonnées protégées du package : une fois installés, ils sont illisibles depuis le Setup, l'API ou tout code hors du package — y compris par les administrateurs de l'org.

L'écran de configuration ne renvoie jamais les secrets en clair : affichage masqué (•••••••• + 4 caractères), et la valeur stockée n'est réutilisée que côté serveur. L'accès à la configuration est réservé au permission set administrateur.

Droits d'accès (CRUD/FLS)​

  • En lecture comme en écriture, les opérations déclenchées depuis l'interface s'exécutent en mode utilisateur : c'est la plateforme Salesforce elle-même qui applique les droits réels de l'utilisateur — objet et champ par champ — pas une vérification maison. Un champ auquel un utilisateur n'a pas droit ne lui est ni montré, ni modifiable.
  • Les champs d'état (statut, compteurs, document signé) restent pilotés exclusivement par le package via le webhook authentifié : personne ne peut passer une demande à « Signé » à la main.
  • Le modèle de partage Salesforce s'applique partout : chacun ne voit que les demandes que le partage lui accorde.

Entrées validées​

Les paramètres de configuration susceptibles d'influencer des requêtes internes sont validés par liste blanche — la protection couvre les contextes où le simple échappement ne suffit pas.

Documents exportés​

Un fichier généré (CSV, HTML) est fait pour être distribué et ouvert ailleurs : c'est une surface d'attaque à part entière, distincte des pages du site. Deux protections, appliquées à toute génération :

  • Injection de formules CSV (CWE-1236) — une cellule qui commence par =, +, - ou @ est exécutée par Excel, LibreOffice et Google Sheets. Comme les valeurs viennent d'enregistrements, potentiellement d'un tiers, elles sont neutralisées (préfixe apostrophe, recommandation OWASP) — sans casser les montants négatifs légitimes.
  • Injection de balisage HTML — chaque valeur fusionnée est échappée. Le corps du modèle peut contenir du balisage (c'est l'admin qui l'écrit) ; les valeurs, jamais.

Un fichier généré n'est jamais rendu par une page du site public : il est stocké puis téléchargé.

Moindre privilège​

Dix permission sets graduent l'accès — quatre rôles exclusifs et des options cumulables, détaillés dans Gestion des utilisateurs. La surface publique (webhook, pages de signature weSign) a son propre permission set dédié, TES_Guest : uniquement les points d'entrée nécessaires, aucune suppression, journaux en ajout seul. Le kill-switch permet de couper l'intégration en un geste.

Traçabilité​

Tous les échanges avec Yousign sont journalisés (niveau, horodatage, code retour) avec rétention configurable, et chaque demande porte son audit trail horodaté — voir Logs & audit.

Security Review AppExchange

Ces mécanismes sont documentés en détail dans le dossier soumis au Security Review de Salesforce, avec les rapports d'analyse statique et dynamique.

Le parcours d'un signataire externe​

Le jeton est la seule créance : un signataire externe n'a pas de licence Salesforce, donc aucun droit ne peut lui être accordé au sens habituel. L'accès repose sur un jeton aléatoire à durée limitée, un code à usage unique dont les tentatives sont comptées, et — si le modèle l'exige — un code d'accès communiqué hors bande.

Le document n'est révélé qu'après authentification : tant que le code n'est pas validé, aucun lien vers le fichier n'est produit. Ce lien est lui-même à durée limitée, pour qu'une invitation transférée ne donne pas un accès perpétuel.