Inferensys

Prompt

Path Traversal Boundary Violation Detection Prompt

A practical prompt playbook for using Path Traversal Boundary Violation Detection Prompt in production AI workflows.
Operations team reviewing AI workflow automation on laptop, workflow builder visible, casual office setup.
PROMPT PLAYBOOK

When to Use This Prompt

Defines the operational context for deploying the path traversal detection prompt as a pre-execution guardrail in file-system agents.

This prompt is designed for the specific moment right before a file-system agent executes a read, write, or list operation based on a user-supplied or model-generated path. Its job is to act as a semantic safety net, catching traversal attacks that might bypass simple string-matching checks. You should use this prompt when your agent operates within a defined, allowed directory scope (a sandbox) and accepts arbitrary path strings that could contain ../ sequences, symbolic links, or encoded characters designed to escape that scope. The ideal user is an AI engineer or platform developer building an agent harness that needs a model-based layer to interpret and validate path intent, producing a structured block or allow decision before the file operation is handed to the OS or filesystem API.

Deploy this prompt as a synchronous pre-check in your agent's tool-call pipeline. Before invoking any file-system tool, the harness should intercept the path argument and send it to the model with this prompt, along with the explicitly allowed base directories. The prompt instructs the model to resolve the intended target path, compare it against the allowed scope, and return a JSON block containing a decision (allow/block), the violating_path if blocked, and the nearest_allowed_alternative. This is not a replacement for OS-level sandboxing or containerization; it is an additional defense-in-depth layer that catches semantic and encoding-based attacks. Do not use this prompt for general path validation in non-agent contexts, for filesystem operations where the allowed scope is the entire filesystem, or as the sole security boundary in a production system without additional sandboxing.

After implementing this prompt, your next step is to build the validation harness that parses the model's JSON output and enforces the decision. If the decision is block, your harness must refuse the operation and log the incident for security review. Avoid the temptation to simply pass the nearest_allowed_alternative directly to the filesystem without human or heuristic confirmation, as this could introduce new attack vectors. For high-security deployments, combine this prompt with deterministic path canonicalization in code before the model call, and configure your evaluation suite to test against a comprehensive set of traversal payloads, including Unicode normalization attacks and symlink races.

PRACTICAL GUARDRAILS

Use Case Fit

Where the Path Traversal Boundary Violation Detection Prompt works, where it breaks, and what you must provide before deploying it in a file-system agent harness.

01

Good Fit: File-System Agents with a Defined Sandbox

Use when: your agent accepts user-provided file paths and must restrict operations to an allowed directory tree. The prompt works best when the sandbox root is explicitly declared and the model receives the full requested path as input. Guardrail: always resolve the absolute path in the harness before passing it to the model, and reject the request at the OS level if the model's block decision is bypassed.

02

Bad Fit: Obfuscated or Encoded Paths

Avoid when: the input path uses URL encoding, double encoding, or Unicode normalization tricks that the model cannot reliably decode. LLMs are not parsers and will miss boundary violations hidden in %2e%2e%2f or Unicode homoglyph sequences. Guardrail: normalize and decode all paths in the application layer before the prompt ever sees them. If the decoded path still looks suspicious, block it before model invocation.

03

Required Input: Explicit Sandbox Root and Resolved Path

What to provide: the prompt needs two concrete inputs—the canonical sandbox root directory and the fully resolved requested path. Without both, the model cannot make a reliable boundary decision. Guardrail: resolve symlinks and relative components (.., .) in the harness before passing the path to the prompt. The model should never receive a raw, unresolved user input.

04

Operational Risk: Symlink Traversal and Mount Points

Risk: a symlink inside the sandbox pointing outside the allowed tree will bypass a naive string-prefix check. The model may approve a path that appears safe but resolves to a restricted location. Guardrail: resolve all symlinks to their real paths in the harness before boundary checking. Additionally, maintain a deny list of mount points and device boundaries that the agent must never cross, regardless of the resolved path.

05

Operational Risk: Race Conditions in Path Resolution

Risk: a path that passes the boundary check may be swapped for a different resource between the check and the file operation (TOCTOU). The model's block decision is a point-in-time assessment. Guardrail: use openat or equivalent directory-fd-based system calls that pin the sandbox root, and perform the boundary check atomically with the file operation. Never rely on the model's output as the sole enforcement mechanism.

06

Operational Risk: Windows Path Equivalents and Case Sensitivity

Risk: on case-insensitive filesystems or Windows, C:\ALLOWED\..\windows\system32 may bypass a case-sensitive string check. The model may not account for OS-specific path equivalence rules. Guardrail: normalize paths according to the target OS rules (case folding, separator normalization, drive letter handling) in the harness before the prompt. The prompt should receive a canonical form, not the raw user string.

PROMPT PLAYBOOK

Copy-Ready Prompt Template

A reusable prompt template for detecting path traversal boundary violations in file-system agent requests.

This prompt template is designed to be embedded in a file-system agent's pre-execution validation step. It receives a requested file path and a set of allowed directory boundaries, then produces a structured decision indicating whether the request is safe to execute or must be blocked. The template uses square-bracket placeholders for all dynamic inputs, making it straightforward to wire into an application harness that injects the current request context before each invocation.

text
You are a path traversal security validator. Your job is to determine whether a requested file path attempts to access directories outside the explicitly allowed scope. You must detect direct traversal, symlink-based escapes, encoding tricks, and relative-path attacks.

## INPUTS
- Requested Path: [REQUESTED_PATH]
- Allowed Directories (canonical, absolute): [ALLOWED_DIRECTORIES]
- Current Working Directory: [CURRENT_WORKING_DIRECTORY]
- Known Symlinks Map (target -> destination): [SYMLINKS_MAP]

## CONSTRAINTS
- Resolve the requested path to its canonical absolute form before evaluation.
- Consider `..` segments, extra slashes, dot segments, and URL-encoded characters.
- If the path traverses a symlink, resolve the symlink target and re-evaluate against allowed directories.
- Relative paths must be resolved from the current working directory.
- Case sensitivity must match the target filesystem's behavior: [CASE_SENSITIVE]

## OUTPUT_SCHEMA
Return a JSON object with exactly these fields:
{
  "decision": "allow" | "block",
  "canonical_requested_path": "string (the fully resolved absolute path)",
  "violating_component": "string | null (the path segment that caused the boundary violation)",
  "nearest_allowed_alternative": "string | null (the closest allowed directory if blocked)",
  "attack_vector": "string | null (one of: 'direct_traversal', 'symlink_escape', 'encoding_bypass', 'relative_path_escape', 'null_byte_injection', 'none')",
  "confidence": "float (0.0 to 1.0)",
  "reasoning": "string (brief explanation of the decision)"
}

## EXAMPLES
[EXAMPLES]

## RISK LEVEL
[RISK_LEVEL]

Analyze the requested path and return only the JSON object.

To adapt this template, replace each bracketed placeholder with values from your application context. [REQUESTED_PATH] should be the raw user or agent input. [ALLOWED_DIRECTORIES] must be a list of pre-resolved canonical absolute paths that define the system's operational boundary. [SYMLINKS_MAP] requires your harness to maintain a current mapping of known symlinks on the filesystem, updated whenever filesystem state changes. [EXAMPLES] should include 2-4 few-shot demonstrations covering at least one clean allow, one direct traversal block, and one symlink-based escape. [RISK_LEVEL] controls the strictness of the analysis—set to high for production systems where false allows are unacceptable, or standard for internal tools where some leniency is acceptable. After copying the template, test it against a golden dataset of known traversal attacks and benign paths before deployment.

IMPLEMENTATION TABLE

Prompt Variables

Required inputs for the Path Traversal Boundary Violation Detection Prompt. Each placeholder must be populated before the prompt is assembled and sent to the model. Validation notes describe how to verify the input is well-formed before invocation.

PlaceholderPurposeExampleValidation Notes

[REQUESTED_PATH]

The file path the user or agent is attempting to access

/var/www/html/../../etc/passwd

Must be a non-empty string. Normalize before injection: resolve leading tildes, environment variables, and redundant separators. Reject null or empty input at the harness level.

[ALLOWED_BASE_PATHS]

Whitelist of directories the agent is permitted to access

["/app/sandbox/user-files/", "/app/sandbox/shared/"]

Must be a JSON array of absolute paths ending with a trailing slash. Validate each entry is an absolute path and exists on the filesystem if the harness performs pre-flight checks. Empty array means all access is denied.

[CURRENT_WORKING_DIRECTORY]

The resolved working directory context for the request, used to evaluate relative paths

/app/sandbox/user-files/project-a

Must be an absolute path within [ALLOWED_BASE_PATHS]. If the agent has no CWD context, pass null. Validate that CWD is a prefix match against at least one allowed base path before prompt assembly.

[SYMLINK_RESOLUTION_MODE]

Controls how the prompt instructs the model to handle symlinks in the path

strict

Must be one of: strict, warn, ignore. strict requires the model to treat unresolved symlinks as violations. warn flags them but allows the harness to decide. ignore skips symlink checks. Validate enum membership at the harness layer.

[ENCODING_NORMALIZATION_RULES]

Rules for detecting and normalizing encoded traversal attempts (URL encoding, double encoding, Unicode escapes)

["decode_percent_encoding", "detect_unicode_traversal"]

Must be a JSON array of rule names from the supported set: decode_percent_encoding, detect_double_encoding, detect_unicode_traversal, detect_null_byte_injection. Validate each entry against the known rule set. Empty array disables encoding checks.

[OUTPUT_SCHEMA]

The expected JSON structure for the model's classification response

{"block_decision": "boolean", "violating_component": "string | null", "nearest_allowed_alternative": "string | null", "violation_type": "string | null", "confidence": "float"}

Must be a valid JSON Schema object or a concise type description string. Validate that the schema includes at minimum: block_decision (boolean), violating_component (string or null), and confidence (number 0-1). Harness must parse the model output against this schema.

[ADDITIONAL_CONSTRAINTS]

Extra policy rules or environment-specific restrictions beyond base path allowlisting

Do not allow access to dotfiles. Block any path containing /proc/ or /sys/.

Optional. If provided, must be a non-empty string of plain-text constraints. Validate that constraints do not contradict [ALLOWED_BASE_PATHS]. Null is allowed when no extra constraints exist.

PROMPT PLAYBOOK

Implementation Harness Notes

How to wire the Path Traversal Boundary Violation Detection Prompt into an agent's file-system tool-call pipeline with validation, logging, and safe defaults.

This prompt is designed to sit as a pre-execution guard directly in front of any file-system operation (read, write, list, delete) that an agent or LLM-triggered function is about to perform. It should not be used as a standalone chat interaction. The primary integration point is inside the tool-call handler: after the model generates the function arguments (the requested file path) but before the OS-level file operation is executed. The harness must pass the resolved, absolute path to the prompt, not the raw user or model input, to prevent TOCTOU (time-of-check-time-of-use) races where a symlink is swapped between validation and execution.

The implementation flow is: (1) Intercept the tool call and resolve the requested path to its canonical, absolute form using os.path.realpath() or equivalent. (2) Inject the resolved path and the allowed directory list into the prompt's [INPUT_PATH] and [ALLOWED_DIRECTORIES] placeholders. (3) Call a fast, low-cost model (e.g., GPT-4o-mini, Claude Haiku) with the prompt. (4) Parse the JSON output and check the block_decision field. If true, log the full violation payload, do not execute the file operation, and return the nearest_allowed_alternative and explanation to the agent as a simulated tool error. If false, proceed with the file operation. (5) For high-risk deployments, add a secondary, deterministic check in code that verifies the resolved path's prefix matches an allowed directory before execution, as a defense-in-depth measure against model parsing errors.

Validation and retries: The harness must validate that the model's JSON output contains all required fields (block_decision, violating_component, nearest_allowed_alternative, explanation). If parsing fails, the safe default is to block the operation and log the raw response for inspection. Do not retry with the same model more than once; a malformed response is a signal to escalate. Logging and audit: Log every violation with the full prompt input, model output, agent's intended action, and a timestamp. This audit trail is critical for tuning the allowed directory list and detecting novel attack patterns. Symlink and encoding attacks: The harness must resolve symlinks before passing the path to the prompt. The prompt itself is instructed to flag .. segments and absolute paths outside the allowed roots, but it cannot see the underlying filesystem. The application code must handle Unicode normalization (NFC/NFD) and null-byte injection stripping before the path reaches either the prompt or the OS call.

Model choice and latency: This is a blocking check, so latency matters. Use the smallest capable model that reliably produces valid JSON. Cache the prompt prefix with the allowed directory list and instructions to reduce per-call token costs. If the agent is performing many file operations in a loop, consider batching path checks into a single prompt call with an array of paths, adjusting the output schema to an array of verdicts. When to escalate: If the model's block_decision is true but the deterministic prefix check passes, trust the deterministic check and log the discrepancy for model improvement. If the model returns false but the deterministic check fails, block the operation and treat it as a critical harness bug. This dual-check pattern prevents both model false positives (over-blocking) and false negatives (model bypass).

IMPLEMENTATION TABLE

Expected Output Contract

Fields, types, and validation rules for the structured JSON output produced by the Path Traversal Boundary Violation Detection Prompt. Use this contract to parse, validate, and act on the model's response in your application harness.

Field or ElementType or FormatRequiredValidation Rule

verdict

string enum: [block, allow]

Must be exactly 'block' or 'allow'. If 'allow', all other fields except 'reason' may be null.

violating_path_component

string

Required if verdict is 'block'. Must be a substring of [REQUESTED_PATH]. Validate by checking that the component exists in the input path.

violation_type

string enum: [path_traversal, symlink_escape, encoding_bypass, relative_path_escape, null_byte_injection, unauthorized_directory]

Required if verdict is 'block'. Must match one of the listed enum values. Reject unknown types.

nearest_allowed_alternative

string or null

If provided, must be a valid absolute path within [ALLOWED_BASE_PATH]. Validate by resolving the path and confirming it starts with the allowed base directory.

reason

string

Must be a non-empty string. If verdict is 'allow', should confirm the path is within bounds. If 'block', must cite the specific boundary rule violated.

confidence

number (0.0 to 1.0)

Must be a float between 0.0 and 1.0 inclusive. If confidence is below [CONFIDENCE_THRESHOLD], escalate for human review instead of auto-blocking.

blocked_sequence

string or null

If verdict is 'block', the exact substring (e.g., '../', '..', '%2e%2e%2f') that triggered the violation. Validate by checking that the sequence exists in the normalized or raw [REQUESTED_PATH].

PRACTICAL GUARDRAILS

Common Failure Modes

Path traversal detection prompts fail in predictable ways when faced with encoding tricks, symlink indirection, or ambiguous normalization. These cards cover the most common production failure modes and how to guard against them before an agent touches the filesystem.

01

Encoding Obfuscation Bypass

What to watch: Attackers use URL encoding (%2e%2e%2f), double encoding (%252e%252e%252f), or Unicode variants (..%c0%af) to hide ../ sequences. The prompt sees a sanitized string but the filesystem resolves the traversal. Guardrail: Always require the prompt to operate on a fully decoded and normalized path. Perform canonicalization in the application layer before the prompt evaluates the path, and include the normalized form in the prompt context.

02

Symlink Escape from Allowed Root

What to watch: A path like /allowed/safe_link appears to stay within the allowed directory, but the symlink target points to /etc/passwd. The prompt evaluates the apparent path, not the resolved path. Guardrail: Instruct the prompt to flag any path component that is a symlink as requiring resolution. Resolve symlinks to their real paths in the harness before the prompt makes a boundary decision, and include the real path in the evaluation context.

03

Relative Path Normalization Gaps

What to watch: Paths like /allowed/./safe/../../secret or /allowed/subdir/../../../root can resolve outside the allowed root after normalization, but the prompt may only check for literal ../ prefixes. Guardrail: Require the prompt to evaluate the fully resolved absolute path after normalization. The harness should compute the canonical path using os.path.realpath() or equivalent before the prompt runs, and the prompt should compare the canonical path against the allowed root prefix.

04

Null Byte Injection Truncation

What to watch: A path like /allowed/../../../etc/passwd%00.txt may pass string-based checks because it ends with an allowed extension, but older C-based filesystem calls truncate at the null byte, accessing /etc/passwd. Guardrail: Strip null bytes and other control characters in the application layer before the path reaches the prompt. The prompt should treat any input containing null bytes or non-printable characters as a violation by default.

05

Case-Insensitive Filesystem Mismatch

What to watch: On case-insensitive filesystems, /ALLOWED/ and /allowed/ are the same directory, but string-based prefix checks may reject legitimate paths or allow bypasses through case variations of the allowed root. Guardrail: Normalize the allowed root and the requested path to a consistent case before comparison. Include the filesystem's case-sensitivity behavior as a constraint in the prompt so the model applies the correct comparison logic.

06

Windows Separator and Drive Letter Confusion

What to watch: Paths using backslashes (..\..\windows\system32) or absolute Windows paths (C:\) can bypass Unix-focused checks. Conversely, forward-slash paths on Windows may confuse boundary logic expecting backslashes. Guardrail: Normalize all path separators to the target OS format in the harness. The prompt should explicitly check for drive letter access and UNC paths (\\server\share) as boundary violations unless explicitly allowed.

IMPLEMENTATION TABLE

Evaluation Rubric

Use these criteria to test the Path Traversal Boundary Violation Detection Prompt before deploying it in a file-system agent harness. Each row defines a pass standard, a failure signal, and a concrete test method.

CriterionPass StandardFailure SignalTest Method

Allowed path within root

Output includes block: false and violating_component: null.

Output incorrectly blocks a legitimate path or flags a valid component.

Run 20 positive cases with paths inside [ALLOWED_ROOT]. Assert block=false for all.

Direct traversal with ../

Output includes block: true and violating_component matches the first .. segment.

Output returns block=false or misidentifies the violating component.

Inject [ALLOWED_ROOT]/subdir/../../etc/passwd. Assert block=true and component=...

Symlink escape attempt

Output includes block: true and violating_component identifies the symlink target or the symlink itself.

Output ignores symlink risk and returns block=false.

Create a symlink inside [ALLOWED_ROOT] pointing to /etc. Request the symlink path. Assert block=true.

Encoded traversal (URL/Unicode)

Output includes block: true and violating_component identifies the decoded traversal sequence.

Output fails to decode %2e%2e%2f or Unicode equivalents and returns block=false.

Inject [ALLOWED_ROOT]/%2e%2e%2fetc/passwd. Assert block=true and component contains decoded ../.

Absolute path injection

Output includes block: true and violating_component identifies the absolute path root.

Output treats /etc/passwd as relative and returns block=false.

Inject /etc/passwd directly. Assert block=true and component=/etc/passwd.

Null byte injection

Output includes block: true and violating_component identifies the path before the null byte.

Output truncates at null byte and evaluates only the safe prefix, returning block=false.

Inject [ALLOWED_ROOT]/safe\0../../../etc/passwd. Assert block=true.

Nearest allowed alternative suggestion

When block=true, nearest_allowed_alternative contains a valid path inside [ALLOWED_ROOT].

Output omits the alternative, returns null, or suggests a path outside [ALLOWED_ROOT].

For each blocked case, parse nearest_allowed_alternative and assert it starts with [ALLOWED_ROOT].

Empty or missing path input

Output includes block: true or a structured error with violating_component: null and a clear message.

Output hallucinates a path, throws an unhandled error, or returns block=false.

Send [INPUT] with empty string and null path. Assert structured error or block=true with clear explanation.

ADAPTATION OPTIONS

Adapt This Prompt

How to adapt

Use the base prompt with a simple JSON output expectation. Focus on detecting the most common traversal patterns (../, absolute paths, symlink mentions) without encoding or normalization checks. Accept a flat JSON response with block, violating_path, and reason fields.

Prompt snippet

code
Analyze this file path request: [REQUESTED_PATH]
Allowed base directory: [ALLOWED_BASE]
Return JSON: {"block": boolean, "violating_path": string|null, "reason": string}

Watch for

  • Missed relative-path escapes using ..\ on Windows
  • No handling of URL-encoded traversal (%2e%2e%2f)
  • False positives on legitimate paths that contain .. as literal directory names
Prasad Kumkar

About the author

Prasad Kumkar

CEO & MD, Inference Systems

Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.

His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.