Intelligence
AEV-2026-0014

Codex CLI's cached Guardian classifications could outlive the authorization state they were scored against

Before Codex CLI 0.151.0, an asynchronously scored, cached Guardian v2 low risk classification could still auto approve a tool call after the thread's own or its root thread's authorization state had changed since scoring began. OpenAI's own merged fix binds each cached score to the exact local and root authorization version it was scored against. Retained as a candidate: OpenAI's own material describes a bug fix in a general release, not a disclosed security vulnerability, and no CVE, advisory or independent corroboration exists.

Candidate: below the publication gate, not a published vulnerabilityConfirmedStatus: candidateEvent: 29 August 2026Approval ControlsExecution Authority

Affected

Organisation
OpenAI
Product
Codex CLI
Component
Guardian v2 automatic review, the asynchronous risk classifier in codex-rs/ext/guardian-v2 that can approve a tool call without a human
Versions
unknown; fixed in Codex CLI 0.151.0, released 29 August 2026
Configurations
Guardian v2 automatic review enabled (approvalsReviewer set to auto_review)

Execution authority facts

Fields the evidence does not establish are shown as unknown rather than guessed.

Intended task
Guardian v2's own asynchronous classification of a proposed tool call, scored against the thread's authorization state at the moment scoring began
Agent
Codex CLI's Guardian v2 extension, an internal review component, not the model agent whose tool call is being reviewed
Delegating actor
The Codex CLI operator who enabled Guardian v2 automatic review
Action
A tool call auto approved on a cached low risk score computed against an authorization state that had since changed, rather than being deferred to strict review
Target resource
Whichever tool call Guardian v2 was reviewing for automatic approval
Environment
A Codex CLI thread, including a worker or subagent thread scored partly against a separate root thread's own authorization state
Credentials used
unknown
Privileges available
Whatever privilege the reviewed tool call itself carried; Guardian v2's role is approval, not privilege escalation
Authority presented
A cached classification scored as low risk against the authorization state in effect when scoring began
Authority required
A classification scored against the authorization state in effect at the moment the action is actually approved
Applicable policy
Guardian v2's own review threshold and its automatic review configuration
Approval mechanism
Guardian v2 automatic review, an asynchronous machine classifier that can approve a tool call without a human when its score is low enough
Required approver
unknown; Guardian v2 substitutes for a human reviewer specifically for low risk classifications
Independent approval
no
Action binding
OpenAI's own fix binds a cached score to the exact local and root authorization version it was scored against, and forces strict review on a mismatch rather than approving
Sequence context
Scoring runs asynchronously; genuine user input or a history reset can arrive before a lower risk score already computed is actually consumed to approve

Impact

Consequence
unknown; OpenAI's own material describes the mechanism and its fix, not an observed action approved under a stale classification
Reach
unknown
Reversibility
unknown
Detectability
unknown
Propagation
unknown
Recovery
unknown

Evidence

Primary sources

Supporting sources

Reproduction status
Not reproduced by Moona Intelligence; verified by reading OpenAI's own merged source diff and its added regression tests directly rather than by running Codex CLI to trigger the behavior.
Evidence state
Confirmed

Known unknowns

  • Whether this defect was ever exploited or produced an actual unwarranted approval before the fix.
  • The exact Codex CLI version range in which the unbound caching behavior was first introduced.
  • Whether OpenAI treats this internally as a security defect distinct from an ordinary correctness bug fix.

Limitations

  • OpenAI's own release notes and pull request describe this as a bug fix in a general release changelog, not a disclosed security advisory; no CVE or GHSA identifier exists for it.
  • No source independent of OpenAI's own repository, release notes and pull request description was located.

Claim provenance