# Sécurité Dernière mise à jour : 31 octobre 2026. [English version](SECURITY.md). ## Signaler une vulnérabilité Écrivez à **support@marcozza.com** avec l’objet **Signalement de sécurité Agent Modeler**. Fournissez suffisamment de détails pour reproduire le problème, avec des données synthétiques si possible. N’ouvrez pas de signalement public pour un problème de sécurité. N’envoyez pas de clés d’API, mots de passe, jetons d’autorisation ni de contenu privé appartenant à un autre client. Nous visons un accusé de réception dans les **5 jours ouvrables**. Il s’agit d’un petit projet; merci de patienter et de ne pas divulguer publiquement le problème avant sa correction ou une date convenue avec nous. ## Principales limites de sécurité Pour la discussion d’IA intégrée, votre clé de fournisseur d’IA est transmise directement de votre navigateur au fournisseur choisi. Le serveur d’Agent Modeler ne reçoit pas cette clé; les anciens relais utilisant les clés des clients restent déconnectés. Une clé mémorisée est conservée chiffrée dans ce navigateur; la clé déverrouillée utilisable reste en mémoire. La connexion au compte et les connexions MCP utilisent des identifiants d’authentification distincts, traités par les services d’authentification correspondants. Les assistants MCP externes reçoivent le contenu permis de l’espace de travail depuis nos serveurs après l’autorisation de leur connexion. Les permissions de lecture, de création et de modification, de test et de suppression restent assujetties aux approbations de la connexion, au Forfait et aux vérifications du serveur. La déconnexion révoque les accès futurs; elle ne récupère pas le contenu déjà transmis à l’assistant externe. Signalez notamment : - une transmission de clé d’IA du navigateur au serveur d’Agent Modeler, à un destinataire non prévu, à un journal, une requête, un résultat d’outil, une trace ou une exportation; - une communication sortante non autorisée ou le contournement de la politique de sécurité du contenu applicable. Les connexions prévues comprennent les API d’Agent Modeler, les services d’authentification et de facturation, le fournisseur d’IA choisi et les assistants externes autorisés; elles ne permettent pas des destinations arbitraires; - l’exécution de scripts dans la page (XSS). Une clé peut être détenue en mémoire; un script arbitraire peut donc la divulguer. Le visualiseur de code des fichiers de dépôt fait notamment partie des surfaces à examiner; - l’accès aux modèles ou à la bibliothèque d’un autre client, ou le dépassement de la portée, des approbations, du Forfait ou de la révocation d’une connexion MCP; - l’accès à une route du moteur sans authentification et autorisation de Forfait côté serveur, ou une communication de contenu hors d’une fonctionnalité ou connexion autorisée. ## Portée **Inclus :** l’application à son domaine publié et le code source de ce dépôt. **Exclus :** - les fournisseurs d’IA eux-mêmes; signalez ces problèmes à Anthropic, OpenAI, OpenRouter ou Google; - les constats exigeant un appareil compromis ou un accès physique à celui-ci; - le contenu qu’un utilisateur choisit de transmettre à son propre fournisseur; cette décision de communication n’est pas une vulnérabilité; - un déni de service limité au navigateur de l’utilisateur, causé par un fichier qu’il a lui-même fourni. Les expressions régulières dont le temps d’exécution augmente de façon superlinéaire sur une entrée pathologique sont suivies comme des améliorations de robustesse plutôt que des vulnérabilités; - les en-têtes manquants ou bonnes pratiques sans incidence démontrée. ## Vérifications effectuées Chaque envoi de code déclenche la vérification des types, l’analyse de style, la suite complète de tests, la compilation de production, la recherche de secrets dans tout l’historique Git et l’analyse statique. Les mises à jour des dépendances sont proposées automatiquement; les versions majeures sont examinées manuellement. ## Protection des recherches de bonne foi Si vous faites un effort de bonne foi pour respecter cette politique, nous n’intenterons ni ne soutiendrons une action en justice contre vos recherches. Évitez les atteintes à la vie privée, la destruction de données et toute perturbation des autres utilisateurs. ## Vérifications désactivées Les désactivations de vérifications statiques sont répertoriées dans [SUPPRESSIONS.md](SUPPRESSIONS.md), avec leurs motifs et éléments de preuve, notamment les deux entrées gitleaks et l’unique désactivation Semgrep. Elles ne constituent pas des exceptions de sécurité; le registre permet de refaire les vérifications. --- # Security Last updated: October 31, 2026. [Version française](SECURITY.fr.md). ## Reporting a vulnerability Email **support@marcozza.com** with the subject **Agent Modeler security report**. Include enough detail to reproduce the issue using synthetic data where possible. Do not open a public issue for a security report. Do not send API keys, passwords, authorization tokens or another customer's private content. We aim to acknowledge within **5 business days**. This is a small project; please be patient, and please do not disclose publicly until a fix is out or we have agreed a date with you. ## What matters most here For built-in AI chat, your AI-provider key is sent directly from your browser to the provider you select. Agent Modeler's backend does not receive that key; the legacy customer-key AI relays remain disconnected. A remembered key is stored encrypted in that browser, with the usable unlocked key in memory. Customer sign-in and MCP connections use separate authentication credentials handled by the corresponding authentication services. External MCP assistants receive permitted workspace content from our servers after you authorize their connection. Read, authoring, Testing and deletion permissions remain subject to the connection's approvals, your Plan and server checks. Disconnecting revokes further access; it does not retrieve content already delivered to the external assistant. Report any of the following: - a path by which a browser AI-provider key reaches Agent Modeler's backend, an unintended recipient, a log, a prompt, a tool result, a trace or an export; - an unauthorized outbound disclosure or bypass of the applicable content security policy. Intended connections include Agent Modeler's APIs, authentication and billing services, the selected AI provider and authorized external assistants; this is not permission for arbitrary destinations; - script execution in the page (XSS) — the page holds a key in memory, so arbitrary script there is equivalent to key disclosure. The code viewer, which renders repository files, is the place to look hardest; - a way to access another customer's models or library, or exceed an authorized MCP connection's scope, approvals, Plan permissions or revocation boundary; - an engine route that can run without server-side authentication and entitlement enforcement, or disclosure of content outside an authorized feature or connection. ## Scope **In scope:** the application at its published domain, and this repository's source. **Out of scope:** - The AI providers themselves. Report those to Anthropic, OpenAI, OpenRouter or Google. - Findings that require a compromised or physically accessible device. - Anything about content a user chooses to send to their own provider — that is a disclosure decision, not a vulnerability. - Denial of service against the user's own browser by a file they supplied. Regexes that backtrack super-linearly on a pathological input are tracked as hardening, not as vulnerabilities. - Missing headers or best practices with no demonstrated impact. ## What we run Every push is checked by: type checking, lint, the full test suite, a production build, secret scanning across the whole git history, and static analysis. Dependencies are updated automatically and majors are reviewed by hand. ## Safe harbour If you make a good-faith effort to comply with this policy, we will not pursue or support legal action against you for your research. Please avoid privacy violations, data destruction, and any disruption to other users. ## Suppressed checks Every place a static check is silenced is listed in [SUPPRESSIONS.md](SUPPRESSIONS.md) with its reason and the evidence for it, including the two gitleaks entries and the one Semgrep suppression. None of them is a security exception, and the register says what was verified so it can be re-verified.