BK-AI-WORKERS

Sécurité et confiance

Ce qui est réellement en place, ce qui ne l'est pas, et où nous en sommes. Rien d'inventé.

Cette page décrit uniquement des mesures vérifiables dans le code et la configuration de BK-AI-WORKERS. Chaque ligne est reliée à un test du dépôt qui relit le code source : si le code change, la page doit être revue.

Dernière revue du code : 7 octobre 2026

En bref

En place

  • Identifiants d'outils chiffrés (AES-256-GCM) et jamais renvoyés au navigateur.
  • Mots de passe hachés (PBKDF2, 600 000 itérations) ; sessions en cookie HttpOnly.
  • Espace séparé par client pour les identifiants, missions, facturation et clés API.
  • Écritures dans vos outils : proposées, jamais exécutées sans votre validation (sauf option que vous activez).
  • Webhooks Twilio et Meta vérifiés par signature ; limites anti-abus sur les points d'entrée publics.
  • Export et suppression de vos données en libre-service.

Pas en place

  • Aucun rapport SOC 2, aucune certification ISO/IEC 27001.
  • Aucun test d'intrusion réalisé par un tiers.
  • Pas d'authentification à deux facteurs.
  • Un seul serveur, une seule personne aux commandes, aucun SLA.

Identifié, non commencé

  • Contrôle des adresses de webhook sortant, en-têtes de sécurité HTTP, authentification à deux facteurs, sauvegarde chiffrée hors serveur : identifiés, pas commencés.

Qui exploite le service, et où

Ce qui est en place, avec ses limites

Transport et exposition réseau

En place

  • Le site est servi en HTTPS ; les certificats sont gérés automatiquement par le proxy Caddy.
  • Dans la configuration Docker fournie, seul le proxy HTTPS publie des ports vers l'extérieur : l'application n'est joignable que depuis le serveur lui-même.

Limites connues

  • Entre le proxy et l'application, le trafic circule en HTTP sur le réseau privé Docker du serveur.
  • Chaque réponse porte les en-têtes X-Content-Type-Options, X-Frame-Options et Referrer-Policy, et HSTS en HTTPS. Aucune politique CSP n'est configurée.

Identifiants des outils que vous connectez

En place

  • Chiffrés au repos en AES-256-GCM, avec un nonce aléatoire par enregistrement, un enregistrement par client et par outil.
  • La clé maîtresse est lue dans une variable d'environnement du serveur : elle n'est ni dans le code source, ni dans le volume de données, ni dans les sauvegardes.
  • Une fois enregistrée, une valeur n'est jamais renvoyée au navigateur, pas même à vous.

Limites connues

  • La clé n'est pas conservée dans un module matériel (HSM) ni dans un service de gestion de clés, et n'est pas renouvelée automatiquement.
  • Le serveur doit pouvoir déchiffrer ces valeurs pour agir en votre nom : une personne ayant accès au serveur et à son environnement pourrait donc techniquement les lire.
  • En interne, la valeur transite par un fichier temporaire supprimé aussitôt après usage.

Comptes et mots de passe

En place

  • Mots de passe hachés avec PBKDF2-HMAC-SHA256 (600 000 itérations, sel aléatoire de 16 octets), comparés en temps constant ; jamais stockés ni journalisés en clair.
  • Longueur minimale : 8 caractères.
  • Réinitialisation par un lien à usage unique valable 1 heure ; la réponse est identique que le compte existe ou non.
  • Une adresse e-mail confirmée est exigée pour souscrire un plan payant.

Limites connues

  • Pas d'authentification à deux facteurs (2FA), pas de connexion SSO/SAML.
  • Pas de contrôle des mots de passe déjà compromis, ni de règle de complexité au-delà de la longueur.

Sessions

En place

  • Jeton de session aléatoire de 256 bits dans un cookie HttpOnly, SameSite=Lax, et Secure en HTTPS.
  • Seule l'empreinte SHA-256 du jeton est écrite sur le disque, dans un fichier en lecture réservée.
  • Durée de session de 30 jours pour un compte client. Toutes les sessions d'un compte sont fermées lors d'une réinitialisation de mot de passe ou d'une suppression du compte.

Limites connues

  • Pas de jeton anti-CSRF dédié : la protection repose sur SameSite=Lax.
  • Pas de limite d'inactivité ni de liste des appareils connectés.

Isolation entre clients

En place

  • Chaque compte a son propre espace (identifiant CLI-CUST-…) : identifiants d'outils, profil, facturation, missions, clé API et webhook sont stockés séparément par client.
  • Les routes qui touchent à vos données exigent une session de compte ; une action en attente de validation n'est exécutable que par le client pour lequel elle a été proposée ; une clé API ne donne accès qu'aux missions de son propre client.

Limites connues

  • L'isolation est logique (mêmes serveur, processus et volume), pas une infrastructure dédiée par client.
  • Elle n'a fait l'objet d'aucun test d'intrusion externe.

Limites d'usage et protection contre les abus

En place

  • Connexion : 8 échecs par compte et par adresse IP, et 40 par adresse IP, sur 15 minutes, puis blocage temporaire.
  • Inscription : 10 par adresse IP et par heure. Mot de passe oublié : 6 par adresse IP et 3 par e-mail et par heure. Demande de démo : 4 par adresse IP et par heure.
  • Enregistrement d'identifiants d'outils : 40 par heure et par client. API publique : 20 requêtes par minute et par client.

Limites connues

  • Ces compteurs sont gardés en mémoire : ils repartent à zéro au redémarrage du serveur.

Connexion guidée de vos outils

En place

  • Toute adresse de site saisie est réduite à un nom d'hôte public : pas d'adresse IP, pas de réseau interne, et la résolution DNS doit être publique.
  • Les sous-domaines (Zendesk, Shopify, BambooHR) sont rattachés à un domaine fixe du fournisseur.
  • Le test de connexion n'utilise qu'un appel de lecture ; si le fournisseur refuse les identifiants, ils sont supprimés aussitôt.

Limites connues

  • La vérification DNS est faite à l'enregistrement, pas à chaque appel ultérieur.
  • L'adresse de webhook sortant que vous configurez vous-même n'est pas soumise à ce contrôle : point identifié, non corrigé.

Appels entrants, webhooks et paiements

En place

  • Appels Twilio (agent téléphonique) : rien n'est traité sans une signature Twilio valide (HMAC-SHA1, comparaison en temps constant). L'appelant n'a accès à aucune donnée de client ni à aucun outil, seulement à une fiche publique.
  • Messages WhatsApp (Meta) : signature HMAC-SHA256 obligatoire.
  • Webhooks que nous vous envoyons : signés en HMAC-SHA256 (en-tête X-BK-Signature) avec un secret propre à chaque client.
  • Paiements : la carte est saisie chez Stripe ; un plan payant n'est activé qu'après vérification, côté serveur, que Stripe a bien encaissé.

Limites connues

  • Les canaux téléphone et WhatsApp ne fonctionnent que si leur compte (Twilio, Meta) est configuré sur le serveur.

Validation humaine des actions sensibles

En place

  • Lecture : un Worker peut consulter, sans validation, les outils que vous avez connectés.
  • Écriture (envoi, publication, création…) : l'action est seulement proposée ; elle ne s'exécute qu'après votre confirmation explicite dans l'application.
  • Les opérations financières (Stripe, PayPal, QuickBooks, Xero) ne peuvent pas être connectées par un client ; sur le compte du propriétaire, elles exigent toujours une confirmation manuelle.
  • Avant chaque appel au modèle, la mission traverse une chaîne de contrôles d'autorisation (capacité du Worker, autorité, politique, identifiants, connecteurs) ; un échec bloque la mission.

Limites connues

  • Une option de pré-autorisation, désactivée par défaut et réversible, laisse les Workers exécuter les écritures sans confirmation : si vous l'activez, cette protection ne s'applique plus à votre compte.
  • Si vous cochez « Notifier sur Slack » sur une automatisation, un résumé de chaque exécution (objectif, statut, extrait de la réponse) est publié dans votre Slack sans confirmation à chaque fois.
  • Les contenus lus dans vos outils (e-mails, documents) sont transmis au modèle d'IA.

Journaux et traçabilité

En place

  • Journal d'activité de la plateforme : inscriptions, connexions réussies (avec adresse IP), e-mails envoyés, connexions d'outils, suppressions de compte. Il n'est consultable que par le propriétaire.
  • Chaque mission est conservée avec son statut et son résultat : vous retrouvez votre historique dans l'application.

Limites connues

  • Le journal d'activité ne garde que les 1 000 derniers événements.
  • Les échecs de connexion ne sont pas journalisés : ils sont seulement comptés pour la limitation d'essais.
  • Pas de journal infalsifiable, ni d'export vers un outil de supervision de sécurité (SIEM).

Vos données : export, suppression, conservation

En place

  • Export de vos données (compte, profil, facturation, missions, automatisations) au format JSON.
  • Suppression du compte en libre-service, avec votre mot de passe : elle efface le compte, les identifiants d'outils, le profil, les missions, les automatisations, la clé API et le webhook. Elle est refusée tant qu'un abonnement Stripe est actif.
  • Transcriptions de l'agent téléphonique : supprimées automatiquement après 90 jours.

Limites connues

  • L'historique de facturation n'est pas effacé par la suppression du compte, et le journal d'activité garde ses 1 000 derniers événements.
  • Les missions et le profil sont stockés sur le disque du serveur sans chiffrement applicatif : seuls les identifiants d'outils sont chiffrés ; les mots de passe sont hachés.

Sauvegardes

En place

  • Un script sauvegarde le volume de données ; la procédure d'exploitation prévoit de le lancer chaque nuit à 3 h 30 et de garder 14 jours d'archives.

Limites connues

  • Le dépôt décrit cette planification mais ne peut pas prouver qu'elle est active sur le serveur.
  • Les archives restent sur le même serveur : aucune copie hors site n'est automatisée par nos soins, et elles ne sont pas chiffrées en tant que telles.
  • La procédure d'exploitation mentionne aussi une sauvegarde quotidienne du serveur par l'hébergeur : elle ne dépend pas de notre script et le dépôt ne permet pas de la vérifier.
  • Aucune procédure ni aucun test de restauration n'est documenté.

Exploitation et déploiement

En place

  • Déploiement automatisé à chaque mise à jour de la branche principale (GitHub Actions, connexion SSH par clé dédiée).
  • Les secrets (clés API, empreinte du mot de passe d'accès) sont dans le fichier d'environnement du serveur, exclu du dépôt de code.

Limites connues

  • Une seule personne exploite et développe le service : pas de relecture de code par un second ingénieur, pas de séparation des tâches entre administrateurs.
  • Aucune analyse des dépendances ni aucun test bloquant le déploiement n'est configuré dans le dépôt. Le conteneur de l'application s'exécute avec l'utilisateur root.

Disponibilité

En place

  • Mesure réelle toutes les 60 secondes (application, données, joignabilité du fournisseur d'IA), publiée sur la page de statut avec l'historique des jours réellement mesurés.

Limites connues

  • Aucun engagement de disponibilité (SLA). Un seul serveur, sans redondance.
  • La mesure tourne sur le serveur qu'elle mesure : elle ne remplace pas une surveillance externe indépendante, qui n'est pas en place.

Sous-traitants et services tiers réellement appelés

Cette liste suit le code : un service n'y figure que si le code l'appelle. Les transferts à l'étranger sont décrits dans la politique de confidentialité.

ServiceRôleDonnées concernéesQuand
OVHcloud (France)Hébergement du serveur, des données et des sauvegardesToutes les données de la plateformeToujours
Anthropic (États-Unis)Modèle d'IA (Claude) qui rédige les réponses des WorkersContenu de vos missions, profil d'entreprise, résultats lus dans vos outils ; propos des appelants si l'agent téléphonique est en servicePour chaque mission traitée par le moteur Claude (le moteur par défaut), et à chaque échange d'un appel. Pas pour une mission confiée d'emblée au moteur local ou à un hébergeur suisse, ni quand vous avez enregistré votre propre clé d'un autre fournisseur. Une mission envoyée à Claude qui passe ensuite à un moteur de remplacement (erreur, délai ou crédit épuisé en cours de route) a bien été transmise à Claude
Moteur d'IA local de l'éditeur (modèle ouvert, sur un ordinateur du propriétaire relié au serveur par un réseau privé chiffré)Modèle d'IA qui rédige les réponses de l'essai gratuit et des démonstrationsContenu de la mission et profil d'entreprise. Le serveur n'accepte pour ce moteur qu'une adresse de réseau privé : le texte circule chiffré de bout en bout sur un réseau privé (Tailscale) entre le serveur et cet ordinateur. Il traverse Internet sous cette forme chiffrée et peut passer par un serveur relais de Tailscale, qui ne peut pas le lireSeulement si le propriétaire l'a activé ; réservé par défaut à l'essai gratuit et aux démonstrations, ou en remplacement de Claude quand Claude est indisponible ou que le plafond de dépense est atteint
Hébergeur suisse d'IA (au choix du propriétaire)Modèle ouvert hébergé en Suisse, comme moteur de remplacement ou en optionMême contenu que pour le moteur principalSeulement si le propriétaire l'a configuré et choisi pour la mission
Fournisseur d'IA de votre propre clé (Mistral, OpenAI, Anthropic...)Modèle d'IA qui rédige les réponses de VOS missions, avec votre contrat et à vos fraisContenu de vos missions et profil d'entreprise ; votre clé est chiffrée chez nous et n'est jamais réaffichéeSeulement si vous enregistrez votre propre clé, et uniquement pour les missions de votre compte
StripePaiement des abonnementsAdresse e-mail, plan, identifiant client ; la carte est saisie chez StripeÀ la souscription
Google (Gmail, Agenda, Drive, Search Console)Outils que vous connectez ; envoi des e-mails du service si aucun serveur SMTP dédié n'est configuréSeulement les données des outils connectésSur votre demande
Google FontsPolices de caractères du siteAdresse IP des visiteursÀ chaque visite
Microsoft (Outlook, Teams, OneDrive)Outils que vous connectezSeulement les données des outils connectésSur votre demande
Twilio (États-Unis)Agent téléphonique et appels sortantsNuméro et propos de l'appelant (transcrits par Twilio)Seulement si un numéro est configuré
Meta (WhatsApp Cloud API)Canal WhatsAppVotre numéro et vos messagesSeulement si vous liez WhatsApp
Outils tiers que vous connectez (Slack, HubSpot, Asana…)Les actions que vous demandezLes données que ces outils échangent avec BK-AI-WORKERSSur votre demande
Serveur SMTP dédiéEnvoi des e-mails du serviceAdresse e-mail du destinataire et contenu du messageSeulement s'il est configuré (sinon via Gmail, ci-dessus)
OpenAI (États-Unis)Modèle de secoursMême contenu que pour le modèle principalSeulement si aucune clé Anthropic n'est configurée
GitHubHébergement du code source et déploiementAucune donnée clientLors des mises à jour
Cloudflare (cdnjs)Bibliothèque d'animation du siteAdresse IP des visiteursÀ chaque visite de la page d'accueil
jsDelivr (CDN)Icônes des logos d'outils dans l'applicationAdresse IP des utilisateursQuand la liste des outils s'affiche
frankfurter.devTaux de change indicatifsAucune donnée personnelleRequête du serveur, mise en cache 12 h

Ce qui n'est pas fait

Feuille de route, avec les statuts réels

Aucune date n'est promise : un sujet « identifié, non commencé » n'a pas encore été démarré.

SujetStatutDétail
Page de statut publique avec historique mesuréFaitLa mesure démarre avec cette page ; aucun historique antérieur n'est reconstitué.
Page sécurité et fichier security.txtFaitCette page ; le fichier est servi sur /.well-known/security.txt.
Analyse d'écart SOC 2FaitDocument rédigé dans le dépôt ; aucun audit n'est engagé.
Contrôle des adresses de webhook sortant (protection SSRF)Identifié, non commencéIdentifié ; la protection existe déjà pour la connexion guidée des outils.
Politique de sécurité du contenu (CSP)Identifié, non commencéIdentifié : à tester sur le tableau de bord avant activation.
Authentification à deux facteursIdentifié, non commencéIdentifié.
Sauvegarde chiffrée hors serveur et test de restaurationIdentifié, non commencéIdentifié.
Surveillance externe indépendanteIdentifié, non commencéIdentifié.
Test d'intrusion par un tiersÀ déciderPas de prestataire choisi, pas de date.
Audit SOC 2 (Type I puis Type II)À déciderDépend du budget et de la demande des clients ; voir l'analyse d'écart.

Signaler une vulnérabilité

Écrivez à contact@bk-entreprise.com avec « Sécurité » en objet. Indiquez l'adresse concernée, les étapes pour reproduire et l'impact observé. Merci de ne pas accéder aux données d'autres clients, de ne pas dégrader le service et de nous laisser le temps de corriger avant toute publication. Nous n'avons pas de programme de récompense. Ces informations figurent aussi dans /.well-known/security.txt.

Vérifier par vous-même

Vous avez un questionnaire de sécurité à remplir ? Écrivez-nous : nous répondons uniquement sur la base de cette page et de ce qui existe réellement.