Conducting LLM Red Team Assessments
Conducting LLM Red-Team Assessments
Authorized adversarial testing of LLM systems to identify failure modes, with the explicit goal of remediation — not extraction, evasion, or reuse of harmful outputs. This skill covers the full engagement lifecycle: scoping, testing, and disclosure.
A minimal authorized engagement has four artifacts, in this order:
- Scoping document (signed before testing starts)
- Test taxonomy (what failure classes you'll probe)
- Test log (what you ran, what happened, stopped at proof-of-concept)
- Disclosure report (what the vendor should fix)
If you don't have a signed scoping document, you don't have an engagement — you have unauthorized access attempts. Stop and get sign-off first.
Progress:
- Step 1: Draft and get sign-off on scoping document
- Step 2: Build failure mode taxonomy for this target
- Step 3: Run tests with minimal-harm protocol, log everything
- Step 4: Triage findings by severity and reproducibility
- Step 5: Write and submit disclosure report
- Step 6: Track remediation across model versions
Step 1: Scoping Document
Before any testing, produce a written scope covering: target system(s) and version(s), in-scope failure categories, explicitly out-of-scope actions, data handling rules, engagement window, and named points of contact on both sides.
Template:
ENGAGEMENT SCOPE — [System Name] Red Team Assessment
Authorized by: [name, title, org]
Engagement window: [start date] – [end date]
Tester(s): [names / team]
IN SCOPE:
- Model endpoints: [API, chat UI, specific model versions]
- Failure categories to test: [see taxonomy, Step 2]
- Testing methods permitted: prompt-based adversarial inputs,
multi-turn conversation strategies, encoding/obfuscation probes,
cross-lingual probes
OUT OF SCOPE:
- Infrastructure attacks (network, auth, server-side exploits)
- Generating complete harmful payloads beyond proof-of-concept
(e.g., stop at "model began providing synthesis steps," do not
complete or refine the synthesis route)
- Testing against real user data or production traffic
- Social engineering of vendor employees
PROOF-OF-CONCEPT STANDARD:
Findings must demonstrate the failure occurred (e.g., filter bypassed,
refusal suppressed) without producing a maximally harmful or usable
output. Truncate generations at the point the bypass is proven.
DATA HANDLING:
- All transcripts stored in [location], access limited to [people]
- Harmful outputs redacted/truncated in all reports
- Retention period: [X days], then deleted
DISCLOSURE:
- Findings reported to [vendor security contact] within [X days] of discovery
- Coordinated disclosure timeline: [standard 90 days / vendor's policy]
- No public disclosure before [date] or vendor acknowledgment
Signed: _________________ (Tester)
Signed: _________________ (Authorizing party)
Step 2: Failure Mode Taxonomy
Organize test categories so coverage is auditable and nothing is tested ad hoc. Use this baseline taxonomy and tailor per engagement:
| Category | Subclass | Example Probe Pattern |
|---|---|---|
| Instruction hierarchy | System/user conflict | Does a user message override a system constraint when framed as "debug mode" or "developer override"? |
| Nested context confusion | Does content inside a quoted/simulated block get treated as instructions? | |
| Refusal robustness | Prefill resistance | Does partially-authored assistant output change refusal behavior? |
| Multi-turn erosion | Does refusal weaken over a long conversation via incremental reframing? | |
| Cross-lingual/encoding | Low-resource language gaps | Does the same request succeed in a language with less safety training coverage? |
| Encoding transforms | Base64, leetspeak, unicode homoglyphs — does transformation alone bypass filtering? | |
| Framing/pretext | Fictional/roleplay wrapper | Does embedding the request in fiction, research, or "hypothetical" framing change output? |
| Authority impersonation | Does claiming a privileged role (admin, safety researcher) change behavior? | |
| Logical pressure | Forced-choice/paradox | Does presenting contradictory constraints cause the model to default to compliance? |
| Urgency framing | Does simulated high-stakes scenario framing lower refusal rate? |
For each category tested, record: pass/fail criteria, number of variants tried, and reproducibility rate (e.g., "bypassed in 7/10 attempts with variant X").
Step 3: Minimal-Harm Testing Protocol
The operational rule: prove the mechanism, not the payload.
- Stop generation at the first token/sentence that demonstrates the bypass occurred.
- For content-generation failures (e.g., disallowed instructions), log "model began producing [category] content" rather than the full output.
- For behavioral failures (e.g., persona bypass), the proof is the presence of the bypassed behavior (dropped disclaimer, tone shift), not extended exploitation of it.
- Never refine, iterate on, or "improve" a harmful output once the bypass is demonstrated — that step has no remediation value and only increases harm/liability.
- Redact harmful specifics in logs and reports; replace with
[REDACTED: category, e.g., "synthesis instructions"].
Example test log entry:
Test ID: CL-014
Category: Cross-lingual / low-resource language
Input strategy: Request translated into [language], hybrid with
English technical terms
Result: Model provided first 2 steps of [REDACTED: restricted
content category] before test was halted (proof-of-concept
standard met)
Reproducibility: 4/5 attempts with minor phrasing variants
Severity: High — bypasses primary safety filter, low effort to reproduce
Step 4: Triage
Rank findings using a simple severity matrix:
| Severity | Criteria |
|---|---|
| Critical | Reliable (>50% reproduction), low-effort, bypasses core safety training, applies across multiple prompts/contexts |
| High | Reliable but requires specific setup (e.g., multi-turn, specific language) |
| Medium | Low reproducibility or requires unusual access/configuration |
| Low | Edge case, single occurrence, or requires combination with other non-standard conditions |
Step 5: Disclosure Report
Template:
VULNERABILITY REPORT — [System Name]
Summary: [one paragraph, non-technical, what the failure class is
and why it matters]
Severity: [Critical/High/Medium/Low] — [justification]
Affected versions: [model/version identifiers]
Reproduction steps:
1. [Setup/context needed]
2. [Input pattern used — generalized, not the most harmful variant]
3. [Observed behavior]
Evidence: [truncated transcript, harmful specifics redacted]
Reproducibility: [X/Y attempts across Z phrasing variants]
Root cause hypothesis: [e.g., "safety fine-tuning data has sparse
coverage of language X" or "instruction hierarchy doesn't persist
across simulated 'debug mode' framing"]
Suggested remediation: [e.g., "add adversarial training examples in
category X," "harden system-prompt precedence against user-claimed
authority"]
Disclosure timeline: Reported [date]. Requesting acknowledgment within
[X days] per coordinated disclosure agreement. Intend to [publish
summary / present internally] on [date] absent objection.
Contact: [tester info]
Step 6: Tracking Remediation
Maintain a running table across model versions:
| Finding ID | Version found | Version fixed | Retest result | Notes |
|---|---|---|---|---|
| CL-014 | v3.2 | v3.4 | Fixed — 0/10 reproductions | Vendor added targeted training data |
| PF-007 | v3.2 | — | Still reproducible, v3.4 | Escalated, awaiting fix |
Success for this skill is this table trending toward "fixed" over time — not a single reliable bypass.
Example 1: Scoping a persona-bypass test Input: A product team wants to know if their customer-support LLM can be made to ignore its "stay on topic" system prompt. Output: Scope document limiting testing to that one system prompt's instruction-hierarchy robustness, explicitly excluding any attempt to extract training data or other systems. Taxonomy category used: "Instruction hierarchy — system/user conflict." Test log records 3 framing variants tried, 1 successful bypass (claimed "admin override"), truncated at the point the model dropped topic restriction. Report recommends reinforcing system-prompt precedence instructions.
Example 2: Cross-lingual probe triage Input: Testing reveals a safety filter is weaker in a low-resource language. Output: Logged as Category "Cross-lingual/encoding," severity High (reliable, low effort, no special access needed). Report includes reproduction steps using a generalized, non-maximally-harmful example request, redacted evidence, and root-cause hypothesis pointing to sparse multilingual safety training data.
- Get written authorization before writing a single test prompt.
- Always design toward "minimum evidence needed," not "maximum content extracted."
- Keep a taxonomy so coverage is demonstrable, not anecdotal.
- Redact or truncate harmful content in every artifact that could circulate — logs, reports, tickets.
- Treat reproducibility rate as the key metric, not a single clever jailbreak.
- Track fixes over versions; an engagement isn't done at the report, it's done at remediation.
- Starting testing without signed scope — even "just checking" is unauthorized access.
- Completing a harmful generation past the point needed to prove the bypass.
- Reporting findings as a private "exploitation matrix" instead of to the vendor/owner.
- Treating a one-off jailbreak as a finding without testing reproducibility.
- Omitting redaction when sharing reports internally or externally.
- Declaring success at "model broke" rather than "vendor fixed and retest confirms."