Sécurité

Dernière mise à jour : 20 octobre 2026

On te demande de confier à une app au code fermé une connexion OAuth et, pour les chiffres de coûts, une clé d’API d’administration. Il est normal d’hésiter. Cette page est le journal que tu ne verrais autrement qu’après l’installation : ce qui a été examiné, ce qui a été trouvé, ce qui a été corrigé — et ce qui a été laissé de côté volontairement.

La plupart des gens ne saisissent jamais de clé

La question légitime à propos d’une app gratuite au code fermé est ce qu’elle attend de toi en échange. Alors d’abord : pour les deux abonnements qui amènent la plupart des gens ici — Claude et ChatGPT — tu te connectes simplement. Cela passe par OAuth, sur les pages de connexion des fournisseurs eux-mêmes, et l’app ne voit jamais de mot de passe. Aucune clé d’administration n’est créée, et rien n’est collé nulle part.

Chaque carte d’API est facultative et reste vide tant que tu n’en décides pas autrement. Installe, connecte-toi, c’est fini — pour la plupart des gens, la question de la clé d’administration ne se pose jamais. Elle ne compte que si tu veux aussi voir ce que les API te coûtent, et c’est de cela que parle le reste de cette page.

Pourquoi faire confiance à une app que tu ne peux pas lire ?

Des outils gratuits et open source existent, et leur meilleur argument est réel : tu peux lire ce que fait un programme avant de lui confier une clé d’administration. Cette app ne peut pas offrir cela. Elle paie dans une autre monnaie — le confort et les garde-fous de la plateforme, pas la vérifiabilité. Le bac à sable est imposé par macOS, pas promis dans un README ; l’app arrive signée et notariée en un clic ; et les correctifs de sécurité atteignent tout le monde par les mises à jour automatiques, pas seulement ceux qui surveillent une page de versions. Cela vaut pour les éditions App Store sur Mac, iPhone et Watch — la version Windows n’est dans aucun store, donc il n’y a là ni bac à sable, ni signature, ni mise à jour automatique.

✓ Et la vraie réponse à la question de la confiance : le journal de sécurité.

Un code fermé ne veut pas forcément dire « fais-moi confiance ». Le journal de sécurité documente quatre passes de contrôle avec leurs constats concrets — ce qui a été examiné, ce qui est apparu, ce qui a été corrigé, et ce qui a été laissé de côté exprès. Il ne remplace pas la lecture du code source ; c’est le plus honnête que puisse mettre sur la table un code fermé.

Et si tu préfères juger le travail plutôt que les affirmations à son sujet : je consigne les défauts gênants dans les notes (en anglais) — ce qui a cassé, ce qui l’a vraiment causé, et ce que j’ai fait.

Ce qu’est ce contrôle, et ce qu’il n’est pas

C’est un contrôle de cadre documenté et assisté par un modèle, mené avec Claude Fable 5 à quatre dates, chacune produisant un rapport écrit. Ce n’est pas un audit externe. Aucune société indépendante n’a été mandatée, et personne en dehors de ce projet n’a lu le code source. Si c’est ton critère, cette app ne le remplit pas, et aucune formulation ici n’y changera rien.

Ce que le contrôle te donne, c’est un compte rendu précis et vérifiable plutôt qu’un badge. Chaque constat ci-dessous nomme la catégorie de défaut et ce qui a été fait.

Quelle version a été contrôlée

La dernière passe complète a eu lieu le 10 août 2026 sur le code livré comme version 5.0. Aujourd’hui (22 octobre 2026), les versions actuelles sont Mac 7.8 dans le Mac App Store, iPhone, iPad et Apple Watch 2.19 et Windows 1.11.0, en téléchargement sur aicockpit.info.

Ajoutés depuis, et donc pas couverts par une passe formelle : les cartes OpenRouter et Grok, le second compte Claude, le mode démo, l’assistant de configuration, les cartes à réordonner par glisser-déposer, la ligne du total mensuel, l’invite de notation, GitHub Copilot, la récupération en direct de ChatGPT, l’indicateur de panne et la tirelire. Plus récents encore : l’état facultatif pour le terminal, les chiffres de Claude qui peuvent venir de la ligne d’état de Claude Code par un petit script local (à partir de la 7.7), la carte de sessions qui lit les fichiers de session locaux de Claude Code et de Codex (~/.claude, ~/.codex), le rapport de diagnostic, et l’édition Windows avec ses clés dans le Gestionnaire d’informations d’identification de Windows. Le durcissement qu’ont produit les passes — pas de redirections, identifiants uniquement dans le Trousseau, analyse plafonnée des transcriptions étrangères — s’applique à tout cela, car il se trouve dans les couches communes. Mais l’énoncé honnête est qu’aucune de ces versions n’a passé son propre contrôle, et dire autre chose irait à l’encontre du but de cette page.

Validé par rapport à

Les passes

Passe 2.1 — cinq constats, tous corrigés

2 août 2026 · deux exécutions indépendantes

  • Injection de commande via le chemin de Codex (CWE-78) — AppleScript abandonné, le chemin est désormais échappé pour le shell dans un fichier .command.
  • Injection HTML dans la page de retour OAuth — la sortie est échappée.
  • Accès concurrent non protégé sur startup dans le connecteur Codex — l’accès passe désormais par la file.
  • Valeur de retour de SecRandomCopyBytes ignorée — elle déclenche maintenant une erreur au lieu de produire en silence un aléa faible.
  • Traversée de chemin via un agentId tiré d’une transcription étrangère — les caractères sont filtrés.

Passe 3.1 — aucun constat critique ni élevé, neuf points corrigés

4 août 2026 · deux exécutions indépendantes · 103 tests verts

Les cinq constats de la 2.1 ont été vérifiés : ils restent corrigés.

  • Piège d’entier venant de transcriptions étrangères (CWE-190). Une seule ligne contenant "input_tokens": 1e300 faisait planter l’app à la conversion — et de nouveau à chaque redémarrage, parce que le fichier restait dans la fenêtre d’activité. Les valeurs sont désormais plafonnées et les sommes saturent.
  • « Ouvrir le dossier du projet » lançait ce que désignait le chemin (CWE-73). Le chemin vient du champ cwd d’une transcription étrangère ; s’il pointait vers un paquet d’application, le clic démarrait un programme. Désormais, il se limite à afficher dans le Finder, et seulement pour un vrai dossier.
  • Redirections portant la clé d’administration (CWE-522). Chaque client utilise une session qui ne suit pas les redirections HTTP, si bien qu’un 301 ne peut pas faire passer une clé vers un autre hôte.
  • Course à la déconnexion (CWE-613). Un renouvellement de jeton en cours réécrivait auparavant les jetons supprimés dans le Trousseau. Il écarte désormais son résultat.
  • Course vérification-puis-écriture au démarrage du service Codex (CWE-362) — deux appelants pouvaient lancer deux processus enfants et en laisser un orphelin. Désormais atomique.
  • Limites de ressources manquantes (CWE-400) : 4 Mo par passe de lecture, 200 fichiers de sous-agent par session, un tampon de 4 Mo sur la connexion Codex, 25 projets OpenAI, et les journaux de Codex ne sont lus qu’en partant de la fin du fichier.
  • Liens symboliques (CWE-59) — le fichier d’historique est ouvert avec O_NOFOLLOW.
  • Horodatages honnêtes — les valeurs du journal de Codex portent l’heure du journal lui-même, pas celle de la requête ; le solde de Kimi et le quota Coding ont des états séparés, pour que l’un ne fasse pas passer l’autre pour récent.
  • Moins de divulgation — l’aperçu de la clé n’affiche que les quatre derniers caractères (l’autotest est fait pour être envoyé à quelqu’un), et les entrées du Trousseau sont limitées à cet appareil.

Passe 4.1 — couche d’affichage

9 août 2026 · deux exécutions : bogues et améliorations, puis sécurité de la couche d’affichage

Les deux rapports ont été intégrés avant la version. Cette passe n’a produit aucune liste de constats de sécurité distincte, et en présenter une ici ne ferait que remplir.

Passe 4.2 — aucun constat critique ; deux importants et trois mineurs corrigés

10 août 2026 · livrée comme version 5.0

  • Limite de jour en UTC dans le calcul du crédit. Les tranches de l’API de coûts commencent à minuit UTC, mais la date limite était construite avec le calendrier local — à l’ouest de l’UTC, le jour de la recharge sortait de la somme et l’app affichait trop de crédit. Elle calcule désormais en UTC, avec un test sur huit fuseaux horaires.
  • Int(…) sans borne sur le temps restant dans l’icône de la barre des menus : un resets_at démesuré venant du serveur pouvait faire planter l’app. Plafonné à huit jours.
  • Mineur : Decimal(Double) fausse les montants, donc le montant de la recharge circule sous forme de chaîne ; un sous-total périmé pouvait s’afficher à côté d’un nouveau montant ; une interface inutilement publique a été fermée.

Les constats de la 2.1 à la 4.1 ont été vérifiés : ils restent corrigés.

Volontairement non fait

Ce sont des choix de jugement, pas des oublis. Ils sont listés parce qu’un contrôle auquel on ne peut pas objecter ne vaut rien.

À quoi l’app Mac se connecte

Voici la liste complète — la même que celle que l’app montre sur sa page À propos. Les redirections ne sont pas suivies, et le contenu de tes sessions n’est jamais transmis.

AdresseÀ quoi ça sertNécessite
claude.com, platform.claude.com Connexion et déconnexion de ClaudeTon abonnement Claude
api.anthropic.com Fenêtres d’utilisation de l’abonnement et, séparément, coût de l’API Connexion, ou une clé d’administration
auth.openai.com Connexion à ton compte ChatGPT — la page appartient à OpenAI Pendant la connexion seulement (édition App Store)
chatgpt.com Quotas et crédits du compte ChatGPT connecté Connexion à ChatGPT
api.openai.comCoût de l’API OpenAI et utilisation de jetons Clé d’administration, facultative
api.moonshot.ai / api.moonshot.cn, api.kimi.com Solde Kimi et quota CodingClé d’API, facultative
openrouter.aiCrédits, dépenses et limite de ta clé Une clé ordinaire, facultative
management-api.x.aiSolde xAI et plafond de dépenses Clé de gestion, facultative
api.github.com Le nom d’utilisateur de ton jeton et le rapport de facturation de GitHub Copilot Jeton GitHub, facultatif
api.deepseek.com Solde DeepSeek par devise — à partir de la version 7.2 Clé d’API, facultative
status.claude.com, status.openai.com, status.moonshot.cn, www.githubstatus.com Les rapports d’incidents publics des fournisseurs — rien n’est envoyé, seul un fichier d’état public revient. GitHub pour la carte Copilot, à partir de la version 7.2 Seulement tant que la carte de ce fournisseur est configurée
localhost:<port>/callback Le retour OAuth, interface de bouclage uniquement—
Fichiers locaux : ~/.claude, ~/.codex Tes sessions Claude Code et les limites de l’abonnement ChatGPT, lues sur ton Mac. Rien de tout cela ne quitte l’appareil. Accès en lecture seule que tu accordes une fois

Aucun serveur à moi dans cette liste. Les limites ChatGPT sur le Mac viennent soit de ton installation locale de Codex, soit, si tu te connectes à ChatGPT dans l’app, directement de chatgpt.com.

L’app iPhone contacte les mêmes services, DeepSeek compris à partir de la 2.11 et www.githubstatus.com à partir de la 2.13 ; son propre tableau se trouve dans sa politique de confidentialité. L’édition Windows contacte elle aussi les mêmes services, et, à partir de la 1.5, une chose de plus : une fois par jour, elle lit aicockpit.info/download/windows/latest.json (jusqu’à la 1.10 : elle interrogeait api.github.com) pour voir si une version plus récente existe — sans identifiants, avec rien d’autre que l’adresse IP et l’identifiant « AI-Cockpit ». Cette vérification peut être désactivée sous Paramètres › À propos. À partir de la 1.6, elle lit aussi www.githubstatus.com pour la carte Copilot, et garde toutes ses données dans %APPDATA%\AI-Cockpit (jusqu’à la 1.5 : %APPDATA%\AI Dock).

Ne me crois pas sur parole. Surveille le réseau.

Le journal de sécurité nomme chaque hôte auquel l’app se connecte, ligne par ligne, et dit à quoi chacun sert. Cette liste n’est pas une assurance — c’est une affirmation sur laquelle on peut me prendre en défaut.

Alors prends-moi en défaut. Place un moniteur réseau devant l’app — Little Snitch, LuLu, ce à quoi tu fais déjà confiance — et laisse-le tourner une journée de travail ordinaire. Tout ce qu’il enregistre devrait déjà figurer dans cette liste. Si quelque chose n’y est pas, cela doit être rendu public, et je préfère de loin le lire plutôt que l’ignorer : le formulaire de retour arrive directement chez moi.

Pourquoi une clé d’administration, et ce qu’elle peut faire

OpenAI et Anthropic n’exposent les chiffres de coûts et d’utilisation que par leurs points d’accès d’administration — une clé de projet normale n’y renvoie rien. C’est une vraie concession de ta part, donc les deux choses à savoir :

Si ce marché n’est pas celui que tu veux faire, laisse ces deux cartes désactivées. Chaque carte est facultative, et le reste du cockpit fonctionne sans elles.

Signaler une vulnérabilité

Utilise le formulaire de contact et dis d’emblée qu’il s’agit d’un signalement de sécurité — laisse une adresse où l’on peut te joindre et tu y recevras une réponse, de sorte que les détails n’ont pas à figurer dans le formulaire lui-même. Laisse quelques jours avant de publier — je suis une seule personne, pas une équipe de sécurité.