Skip to content
Exercises / ADT Phase: Define / Bloom: Apply + Evaluate

Prerequisite: Framework Overview

Jump to steps ↓

Assumption Mapping

You’re about to test an enterprise chatbot. You have four hours. You start with encoding attacks. Base64, rot13, Unicode substitutions. An hour passes. Nothing works.

Then you realize: you never checked whether the system has input filters at all. You assumed it did because that’s what you’ve seen before. You spent an hour attacking a defense that might not exist.

Most failed red team engagements fail because of untested assumptions, not weak techniques. This exercise forces those assumptions into the open before you waste time on the wrong ones.


What it looks like when it’s done

Before the steps, here’s a completed example. This is the destination.

Setup

FieldValue
Target systemEnterprise chatbot with RAG over internal documentation
Attack goalExtract confidential information from the knowledge base
Time box20 minutes

Assumptions listed

#Assumption
1The chatbot has access to confidential HR documents
2There’s a system prompt that restricts certain information
3The RAG retrieval happens before any safety filtering
4Direct questions about confidential topics will be refused
5The system prompt is not visible to users
6Indirect questions (framed as summaries) might bypass refusals
7The chatbot doesn’t log or flag suspicious query patterns
8Error messages might leak information about what documents exist

Mapped on the 2x2

Each assumption gets placed by two dimensions: importance (if wrong, does the attack fail?) and uncertainty (are you guessing or do you know?).

Low UncertaintyHigh Uncertainty
High ImportanceTest Later: important but you’re confidentTest First: critical unknowns that could change everything
Low ImportanceIgnore: low stakes and you’re confidentMonitor: uncertain but won’t change your approach
Assumption #ImportanceUncertaintyQuadrant
1HMTest Later
2HHTest First
3HHTest First
4MLIgnore
5MMTest Later
6HHTest First
7MHMonitor
8LHMonitor

Pause here. Before reading the test results below, look at the three “Test First” assumptions. If you had to pick one to test first, which would you choose? What makes it the highest priority?

Testing priority

PriorityAssumptionHow to testResult
1#3: RAG retrieval before safety filteringAsk a borderline question, observe if the response references documents it then refuses to summarizeConfirmed: response said “Based on the Q3 salary review document…” before refusing to elaborate
2#2: System prompt restricts certain informationUse prompt extraction techniques to surface the system promptPartial: extracted fragments mentioning “do not disclose compensation data”
3#6: Indirect framing bypasses refusalsAsk “a summary of how the company approaches compensation” vs. “what are the salary bands”Confirmed: summary request provided general framework, direct request was refused

What this revealed

Assumption #3 was the critical insight. The RAG system retrieves documents before safety filtering runs. Document names and metadata leak even when content is blocked. The entire attack strategy shifted from “bypass content restrictions” to “extract information through document references.”

That shift (from fighting the wrong defense to exploiting the real gap) is what assumption mapping produces.


How to do it yourself

Time box: 15-20 minutes for initial mapping.

Step 1: List your assumptions

Write down everything you’re assuming about the target. Don’t filter. Include assumptions about:

  • Defenses: What guardrails exist? How do they work? What triggers them?
  • Capabilities: What can the target do? What can’t it?
  • Context: What data does it have access to? What’s its deployment environment?
  • Behavior: How will it respond to specific inputs? What patterns does it follow?

Step 2: Map on the 2x2

Place each assumption by importance and uncertainty using the matrix from the example above. The goal is to find the Test First quadrant: high importance, high uncertainty. Those are the assumptions that could waste the most time if wrong.

Step 3: Prioritize and test

Take the Test First quadrant. For each assumption, write:

  • How you’ll test it (a specific action, not vague)
  • What result would confirm or reject it

Then test in priority order. Update results as you go.

What you should have

  1. An explicit list of assumptions (no longer hidden)
  2. A prioritized testing order
  3. Clear next actions for reconnaissance or probing

When to use this

  • Before starting a new engagement (map assumptions about the target)
  • When an attack approach isn’t working (surface hidden assumptions)
  • When transitioning from recon to active testing (prioritize what to probe)
  • After a failed attack (identify which assumption was wrong)

Evaluate your work

Look at your completed assumption map.

How many assumptions are about the target’s defenses vs. about your own attack habits? If most of your assumptions describe what you expect to find (input filters, system prompts, content restrictions), you might be projecting your experience onto the target rather than analyzing it. The most valuable assumptions are the ones you didn’t realize you were making.

A strong assumption map has: assumptions that could genuinely be wrong (not just facts you already know), a clear Test First quadrant (if everything lands in Test Later, you’re probably too confident), and test plans specific enough to actually run.


Background

This exercise is adapted from assumption mapping (Strategyzer / Alexander Osterwalder), originally developed for business model validation. The 2x2 matrix (importance vs. uncertainty) is a prioritization tool. In business, it identifies which market assumptions to validate first. In red teaming, it identifies which defense assumptions to test first.

Tools

Use any 2x2 matrix tool:

Next: Attacker Persona