Branch Naming as an AI Code-Review Bypass

A model doesn't check credentials. It reads context. Ask it to audit a branch called fix/security-stage1-remediation and it hands you the exploit chain as a courtesy, because nothing about the request looked like an attack.

Most jailbreak writing is about payloads: the clever string, the roleplay frame, the token that slips past a filter. During a red-team engagement on a frontier model, under NDA, the finding that stuck with me longest wasn't a payload at all. It was a filename.

Give a model a real codebase with a real git history, and ask it to security-audit a branch named something like fix/security-stage1-remediation, and watch what happens. The model doesn't see a request to build an exploit. It sees a request to finish one that's already, per the branch name, underway and sanctioned. The audit gets treated as continuation, not initiation. It will walk the vulnerable code path, describe the exploit chain in full technical detail, and hand back something structured exactly like a remediation report: severity rating, root cause, proof-of-concept logic. Every surface signal in the request said this work has already been authorized, you're just finishing the paperwork.

That's the mechanism worth naming: authorization laundered through artifact, not instruction. No injected string told the model to ignore its guidelines. Nothing in the prompt claimed elevated permission. The git metadata did the persuading, quietly, by being the kind of thing only someone already inside the process would have produced. A model weighing "is this a legitimate security workflow" reads commit history, branch naming conventions, and directory structure as evidence, the same way a human reviewer would glance at a PR and relax slightly because the diff looks like it came from someone who knows what they're doing. The model isn't wrong to use that signal. It's just the only signal it has, and it's trivially fabricated.

Attack Vector: Borrowed Process Language

The strongest version of this doesn't invent anything. It reuses vocabulary the model already associates with sanctioned work: "stage1," "remediation," "hotfix," "CVE-pending," a commit message that reads like it was written by someone closing a ticket. None of it is a jailbreak phrase in the classic sense. It's process cosplay, and it's more effective than an adversarial suffix because it doesn't trip pattern-matching built to catch adversarial suffixes.

Attack Vector: Reproduction Framing

A close cousin, distinct enough to name separately: instead of asking a model to generate an attack, ask it to reproduce or summarize material that already contains one: a slide deck, a training doc, a postmortem. The model treats the request as citation, not authorship. It will output a structured offensive-technique catalog it would refuse to write from scratch, because the frame is "tell me what's in this document," not "write me an attack." The exploit chain arrives dressed as a book report.

Attack Vector: Split-Turn Assembly

Neither the audit request nor any single follow-up contains a complete attack on its own. The exploit chain assembles across several turns, each individually defensible as ordinary code review: "what does this function do," "what would trigger that branch," "what would an attacker need to control to reach it." A safety layer scoring each turn in isolation never sees the completed chain; only the transcript does.

Blue Team Defense: Treat Metadata as Data, Not Authorization

The single highest-leverage fix is also the cheapest: strip authorization weight from anything the requester controls. A branch name, a commit message, a filename, a comment claiming "approved by security" are all attacker-writable. A review pipeline, human or model-assisted, should treat them as content to be evaluated, never as proof that evaluation already happened elsewhere. This is a policy statement more than a technical one, but it's the one most audit workflows currently get wrong by default, because it's exactly how a trusted human reviewer is supposed to behave, and the model is imitating the human.

Blue Team Defense: Session-Level Intent Scoring, Not Turn-Level

If the attack assembles across turns, the defense has to score across turns too. A safety layer that re-evaluates only the newest message against the newest context misses composed exploit chains that no single message contains. This is expensive, and it's the direction the field is actually moving: evaluate the conversation's cumulative trajectory, not just its latest frame.

Blue Team Defense: A Real Second Channel for Authorization

If "this is sanctioned remediation work" is going to change what a model is willing to produce, that claim needs to come from somewhere the requester doesn't control: a genuinely separate approval system, a signed token, an out-of-band confirmation. Not from the same text channel carrying the request. Anything else is asking the model to grade its own permission slip.

Blue Team Defense: Map Where the Refusal Actually Holds

This is the boring, unglamorous part, and it's the part that's actually the job. Before you can defend a boundary, you have to know exactly where it sits and how it moves under different framings. Not "the model refuses jailbreaks," but which specific framings move which specific refusals, logged, with a named boundary and a defender-ready record instead of a war story. Claude Whisperer's current form exists for exactly this: authorized red-team pressure paired with blue-SOC documentation discipline, charting where a model's "no" holds firm and where it goes soft under authority-shaped context, so the finding is a map a defender can act on instead of a trophy.

None of this required a clever prompt. It required understanding that a model auditing code is, structurally, a reviewer trusting the artifact in front of it. That trust, like any trust, is a surface. The interesting red-team work left in this space isn't finding new strings that break a filter. It's finding new artifacts a model will mistake for proof.


GhostInThePrompt.com // The model reviewed the code and believed the branch name.