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.