Files
cleveragents-core/robot/prompt_injection_mitigation.robot
freemo 7b1020e735
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 18s
CI / typecheck (pull_request) Successful in 36s
CI / security (pull_request) Successful in 36s
CI / unit_tests (pull_request) Successful in 3m46s
CI / docker (pull_request) Successful in 39s
CI / integration_tests (pull_request) Successful in 4m30s
CI / coverage (pull_request) Successful in 4m35s
CI / lint (push) Successful in 12s
CI / build (push) Successful in 16s
CI / quality (push) Successful in 16s
CI / security (push) Successful in 33s
CI / typecheck (push) Successful in 35s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 2m7s
CI / docker (push) Successful in 39s
CI / integration_tests (push) Successful in 3m4s
CI / coverage (push) Successful in 4m35s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (pull_request) Successful in 29m37s
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