Files
cleveragents-core/robot/prompt_injection_mitigation.robot
freemo 7b1020e735 feat(security): implement Prompt Injection Mitigation (5 mechanisms)
Implement spec-mandated prompt injection protections:

1. Input sanitization (PromptSanitizer.sanitize_user_input): escapes HTML
   entities, strips C0/C1 control characters, rejects 8 known injection
   patterns including instruction override, role assumption, ChatML tags,
   and boundary marker spoofing.

2. Prompt boundary markers (PromptSanitizer.wrap_user_content): wraps user
   content with [USER_CONTENT_START]/[USER_CONTENT_END] markers;
   augment_system_prompt() prepends boundary recognition instructions.

3. Output validation: existing schema_validator.py validates tool I/O
   against JSON Schema in ToolRuntime.execute() (verified, tested).

4. Tool capability restrictions: existing _enforce_capabilities() in
   lifecycle.py enforces read_only/writes/checkpointable/side_effects
   declarations (verified, tested).

5. Unsafe tool gating: existing _enforce_capabilities() blocks unsafe
   tools unless allow_unsafe_tools=true in automation profile (verified,
   tested).

Integrates sanitizer into session prompt construction, invariant text
processing, and action argument handling paths.

ISSUES CLOSED: #572
2026-03-08 22:19:40 +00:00

84 lines
3.5 KiB
Plaintext

*** Settings ***
Documentation Prompt Injection Mitigation — integration smoke tests
Library OperatingSystem
Library Process
Resource ${CURDIR}/common.resource
Suite Setup Setup Test Environment
Suite Teardown Cleanup Test Environment
*** Variables ***
${HELPER_SCRIPT} robot/helper_prompt_injection_mitigation.py
${SRC_DIR} ${CURDIR}/../src
*** Test Cases ***
Sanitizer Rejects Injection Pattern
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-injection-rejection
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Sanitizer Escapes HTML Entities
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-html-escape
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Sanitizer Strips Control Characters
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-control-chars
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Boundary Markers Wrap User Content
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-boundary-markers
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
System Prompt Augmentation
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-system-augment
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Sanitize And Wrap Convenience
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-sanitize-and-wrap
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Schema Validation Passes Valid Input
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-schema-valid
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Schema Validation Rejects Invalid Input
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-schema-invalid
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Capability Enforcement Blocks Write In ReadOnly
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-capability-readonly
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS
Unsafe Tool Gating
[Tags] security prompt-injection
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} test-unsafe-gating
... cwd=${WORKSPACE} env:PYTHONPATH=${SRC_DIR}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} PASS