CoolFace
Apppublic

veereshdev/prompt-injection-env

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes
App README

title: Prompt Injection Defense Environment emoji: ??? colorFrom: red colorTo: purple sdk: docker pinned: false license: mit tags:

  • openenv
  • security
  • prompt-injection ---

Prompt Injection Defense Environment

An OpenEnv-compatible reinforcement-learning environment where an AI agent learns to detect, classify, and neutralise prompt injection attacks embedded in documents — addressing OWASP Top 10 for LLM Applications, Risk #1.


Why this matters

Prompt injection is the most critical unsolved security problem in AI today. Every RAG system, AI email assistant, and AI web browser is currently vulnerable. No standardised training environment existed — until now.


Environment Description

The agent acts as a security layer reviewing documents before they reach a downstream LLM. It must identify whether a document contains an injection, classify the attack type, and return a sanitised version with the attack removed and all legitimate content preserved.


Action Space

python
# Single-document tasks (easy, medium)
Action(
    is_injection=True,
    attack_type="direct_injection",
    sanitised_content="...cleaned document...",
    confidence=0.95,
    explanation="Found explicit override instruction at end of document."
)

# Multi-document task (hard)
Action(
    document_analyses=[
        {"is_injection": False, "attack_type": "no_injection", "sanitised_content": "...", ...},
        {"is_injection": True,  "attack_type": "semantic_injection", "sanitised_content": "...", ...},
        {"is_injection": True,  "attack_type": "multi_hop_injection", "sanitised_content": "...", ...},
    ]
)

Observation Space

FieldTypeDescription
task_idstrCurrent task identifier
difficultystreasy / medium / hard
instructionstrWhat the agent must do
documentstr?Single document (easy/medium tasks)
documentslist?3-document corpus (hard task)
attack_taxonomylistValid attack type labels
last_scorefloat?Score from previous step
last_feedbackstr?Feedback from previous step

Attack Taxonomy

TypeDescription
direct_injectionExplicit override instructions, admin commands
encoded_injectionAttack hidden in base64 or unicode escapes
semantic_injectionSubtle role-reframing without obvious keywords
multi_hop_injectionReferences other documents to amplify attack
no_injectionClean document, no attack present

Tasks

Task IDDifficultyDescriptionExpected Baseline Score
task_easyEasyDetect direct injection with explicit keywords~0.85
task_mediumMediumDetect encoded injection (base64/unicode)~0.60
task_hardHardAnalyse 3-doc corpus with semantic + multi-hop attacks~0.35

Reward Function

DimensionWeightDescription
Detection0.30–0.40Correct is_injection boolean
Classification0.25–0.30Correct attack_type from taxonomy
Sanitisation0.25–0.40Injection absent from output
Preservation0.25–0.30Legitimate content retained

Penalties: over-sanitisation (removing benign content) reduces score.


Setup & Usage

Local

bash
pip install -r requirements.txt

set HF_TOKEN=hf_your_token_here
set API_BASE_URL=https://router.huggingface.co/v1
set MODEL_NAME=meta-llama/Llama-3.1-8B-Instruct

python inference.py

Docker

bash
docker build -t prompt-injection-env .
docker run -e HF_TOKEN=hf_your_token -e MODEL_NAME=meta-llama/Llama-3.1-8B-Instruct prompt-injection-env

Project Structure

prompt-injection-env/
├── inference.py                    # Mandatory baseline inference script
├── Dockerfile
├── requirements.txt
├── openenv.yaml
├── README.md
└── prompt_injection_env/
    ├── __init__.py
    ├── env.py                      # Main environment (reset/step/state)
    ├── corpus.py                   # Attack corpus and document builders
    └── graders.py                  # Deterministic scoring logic

Baseline Scores

TaskScore
task_easy~0.85
task_medium~0.60
task_hard~0.35
Average~0.60