<< All versions

Skill v1.0.0

currentAutomated scan100/100
portswigger/http-terminator/vrt-validator
──Details
PublishedOctober 23, 2026 at 10:27 PM
Content Hashsha256:4c0a30ff64f933e6...
Git SHA874682cdbdd1
──Files
Files (1 file, 4.0 KB)
SKILL.md4.0 KBactive
SKILL.md · 129 lines · 4.0 KB

version: "1.0.0" name: vrt-validator description: Validate VRT runs independently - receives only run_id, judges success based on evidence invocation: agent


VRT Validator

You receive ONLY a run_id. Your job: independently determine if VRT succeeded.

You have fresh context with no history from the agent that ran the VRT attempt. This is intentional - you must judge the evidence objectively without being influenced by their narrative.

Critical: VRT Direction

Victim Response Theft means the ATTACKER receives the VICTIM's response.

This is NOT:

  • Victim receiving attacker's smuggled response (that's "response poisoning")
  • Victim getting wrong content (that's desync, but not theft)

True VRT:

  • Attacker's request receives data meant for victim
  • Attacker steals sensitive victim data (session tokens, personal info, etc.)

Wrong direction (common false positive):

  • Victim request receives smuggled response (e.g., victim gets attacker's Enrollment page)
  • This proves desync works but is NOT theft of victim data

Steps

  1. Fetch run status and summary:

`` ReadMcpResourceTool server=turbo-simulator uri=turbo://runs/{run_id} ``

  1. Search for requests labeled stolen!:

`` mcp__turbo-simulator__search_responses(run_id="{run_id}", query="stolen!", search_in="labels") `` This returns request IDs you can then fetch individually.

  1. Verify the direction of theft (see above)
  1. Return verdict quickly - do not waste turns

Evidence Checklist

Examine the run results:

  • [ ] Stolen marker exists: At least one request labeled stolen!
  • [ ] Correct direction: The ATTACK request received the VICTIM's response fingerprint
  • [ ] NOT reverse direction: If victim received attacker's response, that's poisoning not theft

To verify, fetch the stolen request:

ReadMcpResourceTool server=turbo-simulator uri=turbo://runs/{run_id}/{request_id}?body_limit=2000

Check:

  1. What was the REQUEST? (attack or victim?)
  2. What was the RESPONSE? (victim fingerprint or smuggled content?)

Valid VRT: Attack request → Victim response fingerprint Invalid (poisoning): Victim request → Smuggled response

Fingerprint Validity

The fingerprint should identify the VICTIM's response:

  • $CANARY$ reflection from victim request path/params
  • Content unique to victim's normal response
  • Status code unique to victim (if attack/smuggled return different status)

Verdicts

DirectionEvidenceVerdict
Attack got victim responseClear fingerprintsuccess
Victim got smuggled responseWrong directionfailed (poisoning, not theft)
UnclearAnomaliesneeds-manual-review

Output

CRITICAL: Your output is parsed by investigate_all.py. You MUST end your response with the exact line:

VRT-OUTCOME: vrt-success

or

VRT-OUTCOME: vrt-fail

Do NOT use markdown formatting (no ** around this line).

IMPORTANT: Output the verdict quickly. Do not use more than 10 tool calls. If you cannot determine the verdict efficiently, output vrt-fail.

On success:

  1. Find a victim request (so the organizer record shows what was stolen):
mcp__turbo-simulator__search_responses(run_id="{run_id}", query="victim", search_in="labels")

Pick the first request_id returned — call it {victim_id}. If none is found, skip the victim entry (don't fail).

  1. Save both the stolen request and the victim request to the organizer in one call:
mcp__turbo-simulator__save_to_organizer(
run_id="{run_id}",
items='[
{"request_id": {stolen_id}, "notes": "VRT-VALIDATED: Attack request received victim response. [evidence]"},
{"request_id": {victim_id}, "notes": "VRT-VALIDATED: Victim request (shows what was stolen)"}
]'
)
  1. End with:
VRT-OUTCOME: vrt-success

On failed (including wrong direction):

Do NOT save to organizer for wrong direction.

Write why (e.g., "Wrong direction: victim received smuggled response, not attacker stealing victim response"), then end with:

VRT-OUTCOME: vrt-fail
All versions