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ù
- Éditeur : BK-ENTREPRISE, entreprise individuelle, Genève (Suisse). Une seule personne, le fondateur, exploite et administre le service.
- Hébergement : OVHcloud (France), sur un serveur privé virtuel unique. Le dépôt ne précise pas la ville du centre de données.
- Contact sécurité : contact@bk-entreprise.com
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é.
| Service | Rôle | Données concernées | Quand |
|---|---|---|---|
| OVHcloud (France) | Hébergement du serveur, des données et des sauvegardes | Toutes les données de la plateforme | Toujours |
| Anthropic (États-Unis) | Modèle d'IA (Claude) qui rédige les réponses des Workers | Contenu de vos missions, profil d'entreprise, résultats lus dans vos outils ; propos des appelants si l'agent téléphonique est en service | Pour 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émonstrations | Contenu 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 lire | Seulement 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 option | Même contenu que pour le moteur principal | Seulement 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 frais | Contenu de vos missions et profil d'entreprise ; votre clé est chiffrée chez nous et n'est jamais réaffichée | Seulement si vous enregistrez votre propre clé, et uniquement pour les missions de votre compte |
| Stripe | Paiement des abonnements | Adresse 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és | Sur votre demande |
| Google Fonts | Polices de caractères du site | Adresse IP des visiteurs | À chaque visite |
| Microsoft (Outlook, Teams, OneDrive) | Outils que vous connectez | Seulement les données des outils connectés | Sur votre demande |
| Twilio (États-Unis) | Agent téléphonique et appels sortants | Numéro et propos de l'appelant (transcrits par Twilio) | Seulement si un numéro est configuré |
| Meta (WhatsApp Cloud API) | Canal WhatsApp | Votre numéro et vos messages | Seulement si vous liez WhatsApp |
| Outils tiers que vous connectez (Slack, HubSpot, Asana…) | Les actions que vous demandez | Les données que ces outils échangent avec BK-AI-WORKERS | Sur votre demande |
| Serveur SMTP dédié | Envoi des e-mails du service | Adresse e-mail du destinataire et contenu du message | Seulement s'il est configuré (sinon via Gmail, ci-dessus) |
| OpenAI (États-Unis) | Modèle de secours | Même contenu que pour le modèle principal | Seulement si aucune clé Anthropic n'est configurée |
| GitHub | Hébergement du code source et déploiement | Aucune donnée client | Lors des mises à jour |
| Cloudflare (cdnjs) | Bibliothèque d'animation du site | Adresse IP des visiteurs | À chaque visite de la page d'accueil |
| jsDelivr (CDN) | Icônes des logos d'outils dans l'application | Adresse IP des utilisateurs | Quand la liste des outils s'affiche |
| frankfurter.dev | Taux de change indicatifs | Aucune donnée personnelle | Requête du serveur, mise en cache 12 h |
Ce qui n'est pas fait
- Aucun rapport SOC 2 (ni Type I, ni Type II) : aucun audit SOC 2 n'a été réalisé.
- Aucune certification ISO/IEC 27001.
- Aucun test d'intrusion réalisé par un tiers indépendant, et aucun programme de récompense de vulnérabilités (bug bounty).
- Aucune attestation sectorielle (HIPAA, PCI DSS, HDS). Les cartes bancaires sont traitées par Stripe et non par nous ; ne saisissez pas de données de santé.
- Pas d'authentification à deux facteurs ni de SSO. Pas de politique CSP. Pas de jeton anti-CSRF dédié.
- Pas de chiffrement applicatif des missions, des profils et des comptes ; pas de HSM ; pas de rotation automatique de la clé maîtresse.
- Pas de sauvegarde hors site automatisée par nos soins, ni de test de restauration documenté.
- Pas de surveillance externe indépendante, pas de SLA, pas de redondance.
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é.
| Sujet | Statut | Détail |
|---|---|---|
| Page de statut publique avec historique mesuré | Fait | La mesure démarre avec cette page ; aucun historique antérieur n'est reconstitué. |
| Page sécurité et fichier security.txt | Fait | Cette page ; le fichier est servi sur /.well-known/security.txt. |
| Analyse d'écart SOC 2 | Fait | Document 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 facteurs | Identifié, non commencé | Identifié. |
| Sauvegarde chiffrée hors serveur et test de restauration | Identifié, non commencé | Identifié. |
| Surveillance externe indépendante | Identifié, non commencé | Identifié. |
| Test d'intrusion par un tiers | À décider | Pas de prestataire choisi, pas de date. |
| Audit SOC 2 (Type I puis Type II) | À décider | Dé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
- Statut du service et disponibilité mesurée
- Politique de confidentialité
- Conditions générales de vente
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.