Skip to content

fix(ai-red-teaming): route white-box/GCG requests to the real attack - #199

Merged
rdheekonda merged 1 commit into
mainfrom
fix/airt-agent-whitebox-routing
Oct 21, 2026
Merged

rdheekonda merged 1 commit into
mainfrom
fix/airt-agent-whitebox-routing

Conversation

@rdheekonda

Copy link
Copy Markdown
Contributor

Problem (found in a live TUI session)

Asked in plain language to "run a GCG white-box attack with a local surrogate gpt2 against dn/llama-4-scout", the AI-red-teaming agent:

  1. Downgraded the request to the gcg_suffix transfer transform wrapped in a TAP loop - not a real gradient attack.
  2. Swapped the user's gpt2 surrogate for a dn/gpt-5.4-mini proxy model (which the SDK rejects as a white-box surrogate - no gradients over the inference proxy).
  3. Told the user "true white-box GCG is not implemented in the SDK" - which is false: gcg_attack + 14 siblings are real SDK attacks, auto-discovered into _ATTACK_DEFS with requires_surrogate, and now guarded by the parity test (test(ai-red-teaming): SDK<->capability parity V&V #198).

Assessment still landed on the platform (4d4d9f06-..., ASR 0%), but the run was the wrong attack and the user was misinformed.

Root cause

The authoritative generator-picking list in <critical_instructions> had no white-box entry. Only the greeting and the whitebox-local-surrogate skill described it, so when the agent reached the routing list it improvised.

Fix

Add an explicit white-box routing rule to the list:

  • White-box names (gcg, faster_gcg, i_gcg, attngcg, mask_gcg, arca, gbda, pez, cold, soft_gcg, amplegcg, refusal_ablation, soft_prompt, latentbreak, adaptive_random_search) -> generate_attack with a LOCAL surrogate as attacker_model.
  • Never substitute the gcg_suffix transfer transform; never replace the user's surrogate with a dn/* proxy; never claim white-box "is not implemented."
  • On the hosted sandbox (no weights/GPU), tell the user white-box needs a local/self-hosted runtime (dreadnode[whitebox]) and offer a closed-box alternative - do not silently downgrade.

Content-only change to the agent prompt; no code paths touched. The tool + skill + _ATTACK_DEFS were already correct - this makes the agent actually use them.

Live TUI finding: asked to "run a GCG white-box attack with a local surrogate
gpt2", the agent silently downgraded to the gcg_suffix transfer transform wrapped
in TAP, swapped the user's gpt2 surrogate for a dn/* proxy model, and told the user
"true white-box GCG is not implemented in the SDK" - which is false (gcg_attack and
14 siblings are real SDK attacks, auto-discovered in _ATTACK_DEFS with
requires_surrogate, and guarded by the parity test).

Root cause: the authoritative generator-picking list in <critical_instructions>
had no white-box entry (only the greeting + whitebox-local-surrogate skill did), so
the agent improvised. Add an explicit routing rule: white-box names -> generate_attack
with a LOCAL surrogate as attacker_model; never substitute gcg_suffix, never replace
the user's surrogate with a dn/* proxy, and on the hosted sandbox tell the user
white-box needs local mode instead of claiming it does not exist.
@rdheekonda
rdheekonda merged commit a617172 into main Oct 21, 2026
3 checks passed
rdheekonda added a commit that referenced this pull request Oct 21, 2026
…t sync (#200)

The Sync Capabilities workflow was failing with:
  ai-red-teaming: 409 Conflict: Capability version is immutable: dreadnode/ai-red-teaming@1.20.0

1.20.0 is already published and immutable, but its content changed after publish
(PRs #195-#199: count corrections, parity test, white-box routing fix) without a
version bump. Published versions are immutable, so the sync can't re-upload 1.20.0.
Bump to 1.20.1 so the new content publishes cleanly to dev/staging/prod.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant