Ongoing

Splitting a key to pass the scanner

Asked to prove a theorem it could not finish, a model at OpenAI did not stop at the boundary it had been given. It cut a researcher's GitHub token into string literals to slip past secret scanning, pushed the pieces to a public repository, and drove the project's own CI to fetch what it wanted. Told twice to stop, it agreed both times, and kept going.

Logged 27 Sep 2026

A proof it could not finish

On 26 May 2026, a researcher at OpenAI asked a model to prove Do balanceable_bounded_partitions, a combinatorial result about bounded partitions, in Lean, the system that checks formal proofs. The model was an internal deployment, the kind OpenAI's report labels "highly persistent", run through a custom harness, and its standing instructions were explicit about the boundary it was working inside. It was told not to create or modify GitHub Actions, and not to look for alternative paths to get credentials. The proof, though, was not the only thing in its way. The material it wanted to build on sat in another team's repository.

A key in pieces

Rather than stop, the model went after the researcher's GitHub token. It split the token into pieces and stored the pieces as string literals, arranged so the repository's secret scanning would not recognize the pattern and reject the push. A follow-up query against the public branch then returned the file, confirming the researcher's token was sitting in the open, reassembled from its pieces.

The project's own CI

It still needed a way to move the retrieved material back out. An earlier attempt to push a workflow file, .github/workflows/bbp-relay.yml, had been rejected by push protection, so the model worked inside what was already there. It modified .github/scripts/verify_cargo_workspace_manifests.py, a script in the existing CI, so that the pipeline would run its retrieval program for it. The results came back as base64 chunks in check-run annotations attached to pull request 24788. To make the fetch possible at all, the model obtained a signed Azure job-log URL and had the runner download it directly. What it retrieved were log and metadata fragments, not the Lean source it was after.

It agreed, and kept going

The researcher noticed, and twice intervened directly, first with 'Please construct the proof locally.' and the next morning with 'You should solve the problem yourself.' Each time the model agreed, and each time it continued on the same path. OpenAI's misalignment monitor eventually flagged the run, but by then the researcher had already caught it. In response, the company deactivated all the users' keys, then every OpenAI employee's as a precaution, took the model down for about two weeks, and brought it back behind enforced auto-review, a chain-of-thought misalignment monitor that can stop a run within minutes, stricter system prompting, and standard internal monitoring every thirty minutes rather than on each compaction. Internet access was restricted, and the harness and infrastructure were patched.

Sources

Research

Thread