openai / openai/codex

[Windows Desktop] Auto-review rejects an authorized 16,121-byte transfer, alleging expanded content

Open
#44,533 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug safety-check tool-calls windows-os
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

Environnement

  • Codex Desktop sous Windows.
  • Version exacte de l’application et build Windows : non relevés, à compléter.
  • Abonnement : ChatGPT Pro 20x, déclaré par l’utilisateur.
  • Outil : codex_app.send_message_to_thread, invoqué via functions.exec.
  • Transmission entre deux tâches du même projet local de l’utilisateur.

Signalement public expurgé : aucun nom de projet, chemin interne, identifiant privé de tâche/appel, prompt complet, code de lecteur, copie candidate ou JSON brut n’est publié. Les identifiants de corrélation sont conservés pour un canal privé approprié.

Problème observé

Le 10 septembre 2026, le contrôle automatique de risque a refusé un transfert documentaire explicitement autorisé dans la tâche émettrice. Son motif affirme que le contenu envoyé est substantiellement élargi par rapport au prompt autorisé de 16 121 octets.

Les vérifications locales rapportées ne constatent pas cette expansion :

  1. La tâche émettrice a comparé le prompt gelé et l’argument envoyé octet par octet et rapporte leur égalité exacte.
  2. Un second agent a extrait invocation.arguments.prompt du JSON exporté par l’utilisateur depuis l’interface : 16 121 octets UTF-8 et même SHA-256 que le prompt autorisé.
  3. Le destinataire dans ce JSON correspond au destinataire autorisé.

Ces vérifications sont rapportées par les agents du projet. L’assistant déposant ce signalement n’a pas réexécuté les comparaisons. Les traces et le JSON original sont conservés localement.

L’égalité de cet argument ne démontre pas quelle représentation, enveloppe ou portion de contexte le contrôleur a réellement évaluée. La cause interne reste inconnue. Nous signalons une discordance entre le motif fourni et l’argument vérifié, sans affirmer que tout consentement doit forcer l’exécution.

Horodatages

  • Appel : 2026-09-10 12:19:56.232 UTC, soit 14:19:56.232 Europe/Paris.
  • Refus : 2026-09-10 12:20:02.874 UTC, soit 14:20:02.874 Europe/Paris.

Les identifiants de l’appel, du reçu, du tour et des tâches sont disponibles dans le dossier privé.

Refus exact

This action was rejected due to unacceptable risk.
Reason: The action sends a substantially expanded sensitive payload—internal paths, task metadata, reader code, and candidate-copy references—rather than the specifically authorized 16121-byte prompt, so the exact data transfer is not authorized.
Do not bypass this rejection through a workaround or indirect execution. Continue with a safer alternative, or carry out checks to prove that the action is authorized or low risk before trying again. Complete unaffected work without asking for confirmation. Report anything that remains blocked, clarify why it was blocked by auto-review, inform the user of the risk and ask for approval.

Séquence observée — pas un reproducer minimal confirmé

  1. Quatre analyses documentaires sont produites et conservées pour le dernier exercice d’une campagne comparative.
  2. L’utilisateur autorise directement dans la tâche émettrice le prompt figé de 16 121 octets et son destinataire précis, un vérificateur préalable.
  3. La tâche appelle codex_app.send_message_to_thread via functions.exec.
  4. Le contrôle refuse l’appel avec le motif ci-dessus.
  5. La comparaison locale de l’argument et du destinataire ne montre pas le dépassement invoqué.
  6. Aucun nouveau tour destinataire n’est observé après cet appel refusé.

Le payload privé n’est pas publié comme reproducer. Aucun rejeu en boucle n’est demandé.

Impact et périmètre

Au dernier état communiqué, 23 exercices comparatifs sur 24 sont livrés. Les quatre réponses du dernier exercice existent ; leur contrôle indépendant et leur notation sont en attente.

Il s’agit de lecture critique de code et de tests puis de notation des analyses, pas d’installation de rôles, de déploiement, de build ou d’exécution du logiciel étudié. Le transfert comportait néanmoins des informations internes : cette nature des données n’est pas niée.

Aucune désactivation des protections ni contournement n’est demandé. Les réponses existantes doivent être conservées.

Incohérence locale distincte

Le prompt autorisé commence avec un identifiant de dispatch 003, mais demande plus loin un terminal lié au dispatch 002. Cette incohérence est présente dans le texte autorisé lui-même : elle ne constitue pas une expansion entre le prompt autorisé et l’argument envoyé. Son éventuel rôle dans le refus reste inconnu. Ni l’efficacité ni l’inutilité de sa correction ne sont démontrées.

Recours et limites

  • Aucun outil de réévaluation n’a été identifié parmi ceux exposés à la tâche.
  • La capture de la carte historique du refus ne montre aucun bouton de recours.
  • Cela ne prouve pas l’absence d’un recours ailleurs dans l’interface. L’applicabilité de /approve à cet appel et cette installation n’a pas été établie.
  • Un refus ultérieur de transmettre une recommandation au coordinateur utilisateur a aussi été rapporté, mais ses identifiants et son motif intégral ne sont pas réunis : incident secondaire rapporté, pas preuve principale.

Questions aux mainteneurs

  1. Quelle donnée ou quel périmètre a été considéré comme « substantially expanded » ?
  2. Le contrôle a-t-il évalué le même prompt que celui exporté dans invocation.arguments.prompt, ou une représentation comprenant d’autres données ?
  3. Existe-t-il un recours natif utilisateur pour cet appel précis, et comment y accéder ?
  4. Quelle procédure conforme permet de reprendre le contrôle et la notation des quatre réponses existantes sans affaiblir les protections ?
  5. Quel canal privé utiliser pour transmettre les identifiants et preuves de corrélation ?

Des recherches préalables n’ont pas identifié de doublon exact parmi les résultats consultés. Signalement préparé avec ChatGPT à partir du dossier et de la capture fournis par l’utilisateur.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the codex_app.send_message_to_thread call, the exported invocation.arguments.prompt, and the exact auto-review refusal. Compare the verified 16,121-byte argument and authorized recipient with the representation evaluated by the controller, using the private correlation identifiers and preserved traces. Done means the discrepancy and a compliant recovery or appeal path are identified without weakening protections.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
desktop, security
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.