portswigger/http-terminator/vrt-validator

Claude Code and agent skill by portswigger/http-terminator

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Validate VRT runs independently - receives only run_id, judges success based on evidence

Install

npx vskill@latest install portswigger/http-terminator/vrt-validator

SKILL.md

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

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
125
Repository forks
12
7-day trend score
0

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/portswigger/http-terminator/vrt-validator/badge)](https://verified-skill.com/skills/portswigger/http-terminator/vrt-validator)

Something wrong with this skill or its page? Tell us.