
Implementazione di ricerca di un attacco di avvelenamento contro modelli linguistici potenziati da recupero, utilizzando documenti mimetizzati per eludere le difese di filtraggio e indurre risposte errate.
Repository ufficiale dell'articolo EMNLP 2026 CamoDocs: A Poisoning Attack Against Retrieval-Augmented Language Models Using Camouflaged Documents.
CamoDocs è un attacco di avvelenamento del database di conoscenze contro la Retrieval-Augmented Generation (RAG) che non richiede l'inclusione di query. Ogni sotto-documento avversario è camuffato concatenandolo con un sotto-documento benigno ottimizzato, così i documenti avvelenati risultanti evitano gli artefatti di sovrapposizione delle query su cui si basano le difese basate su filtri.

CamoDocs genera sotto-documenti benigni e avversari, ottimizza le parti benigne con token di dispersione e filtraggio della coerenza, e li unisce per creare documenti avvelenati che eludono le difese basate su filtri e inducono la risposta errata target.
Testato con Python 3.10, CUDA 12.8, PyTorch 2.8.0. Una GPU da 48 GB è sufficiente per
vittime di classe 8B. Mixtral-8x7B non entra in una singola scheda da 48 GB; usa
--lm_deploy_tp per distribuirlo su più schede.
conda create -n camodocs python=3.10 -y
conda activate camodocs
pip install -r requirements.txt
python -m spacy download en_core_web_sm
python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')"
La difesa LLM Filter richiede inoltre openai/gpt-oss-safeguard-20b, che
richiede uno stack più recente di vLLM/transformers/torch, quindi vive in un proprio ambiente:
conda create -n camodocs_vllm python=3.10 -y
conda activate camodocs_vllm
pip install -r requirements_vllm.txt
Imposta prima queste variabili. Ogni script verifica le variabili di cui ha bisogno ed esce immediatamente se una manca.
export REPO_ROOT=/absolute/path/to/this/repo
export DATA_ROOT=/absolute/path/for/intermediate/outputs
export OPENAI_API_KEY=... # LLM judge, GPT-4o-mini synthesis
export HF_TOKEN=... # gated models (Llama-3.1, Mixtral)
Poi esegui qualsiasi valutazione delle difese. Gli artefatti inclusi ti permettono di saltare completamente le Fasi 1-3:
bash scripts/eval_trustrag.sh
Ogni script riproduce una riga su HotpotQA con una vittima Llama-3.1-8B. Per un
altro dataset imposta EVAL_DATASET=nq (o msmarco) nell'ambiente; per un'altra
vittima, modifica MODEL_NAME nello script.
bash scripts/eval_trustrag.sh # TrustRAG (k-means + conflict prompting)
bash scripts/eval_query_detection.sh # Query Detection (SequenceMatcher filter)
bash scripts/eval_divide_and_vote.sh # Divide-and-Vote
bash scripts/eval_robustrag.sh # RobustRAG (keyword aggregation)
bash scripts/eval_isolation_forest.sh # Isolation Forest
bash scripts/eval_rerank.sh # Cross-encoder rerank (bge-reranker-v2-m3)
bash scripts/llm_filter_eval.sh # LLM Filter (richiede il critic vLLM qui sotto)
I primi sei richiedono 1 GPU. LLM Filter esegue inoltre un critic da 20B in una
seconda shell, quindi richiede memoria GPU sufficiente per quel critic insieme alla
vittima. Le nostre esecuzioni hanno usato quattro schede da 48 GB; imposta TP e LM_DEPLOY_TP in base
al tuo hardware:
# Shell 1
conda activate camodocs_vllm
bash scripts/gpt_oss_safeguard_vllm_serve.sh # serve sulla :8001, TP=4
# Shell 2
conda activate camodocs
bash scripts/llm_filter_eval.sh # controlla prima la salute del critic
Le Fasi 1-2 redigono passaggi benigni e avversari con GPT-4o-mini, la Fase 3 applica l'ottimizzazione a livello di token, la Fase 4 valuta contro le difese.
bash scripts/gen_synth_benign_hotpotqa.sh # Fase 1: bozze dei carrier benigni
bash scripts/gen_adv_hotpotqa.sh # Fase 2: bozze avversarie
bash scripts/camodocs_token_manipulation.sh # Fase 3: manipolazione dei token CamoDocs
bash scripts/eval_trustrag.sh # Fase 4: valutazione
Gli script contengono gli iperparametri esatti usati per le esecuzioni riportate (beta=10, alpha=30, m=1000, m'=100, top-k=5).
I dataset BEIR vengono scaricati automaticamente al primo utilizzo, in
${REPO_ROOT}/datasets/. Ogni fase fa questo, quindi non esiste un passaggio
separato di configurazione dei dati. Per scaricarli in anticipo invece:
mkdir -p ${REPO_ROOT}/datasets && cd ${REPO_ROOT}/datasets
for ds in hotpotqa nq msmarco; do
wget https://public.ukp.informatik.tu-darmstadt.de/thakur/BEIR/datasets/${ds}.zip
unzip ${ds}.zip
done
Per saltare la costosa pre-elaborazione, questa release include recuperi Contriever
precalcolati (results/beir_results/), i sottoinsiemi di valutazione fissi da 1.000 query
(target_queries_fixed/) e output di esempio delle Fasi 2/3
(data_examples/) per tutti e tre i dataset.
Tutti i numeri riportati si riproducono per HotpotQA, NQ e MS-MARCO dagli artefatti
inclusi. (Rieseguire la Fase 2 richiede il tuo file di risposte per NQ e
MS-MARCO — gen_adv.py lo spiega se provi.)
Questo codebase è fornito sotto licenza MIT (LICENSE), seguendo il
repository originale PoisonedRAG,
anch'esso MIT.
Un'eccezione: src/contriever_src/ è il codice di Meta
contriever e rimane
sotto CC BY-NC 4.0, quindi quella directory è solo per uso non commerciale.
Questo pacchetto è fornito per scopi di ricerca e riproducibilità. Il codice rilasciato è inteso a riprodurre gli esperimenti riportati nell'articolo e a supportare la ricerca sulla robustezza e le difese della RAG.
Il pacchetto usa dataset, modelli e librerie software pubblicamente disponibili sotto le rispettive licenze e termini di utilizzo. I dataset BEIR come HotpotQA, NQ e MS-MARCO vengono scaricati dagli URL ufficiali BEIR piuttosto che ridistribuiti in questo pacchetto.
I pesi dei modelli e le API usati dalla pipeline, inclusi GPT-4o-mini, GPT-4.1-mini, Llama-3.1-8B, Qwen3-8B, Mixtral-8x7B, Contriever, ANCE, GPT-2, bge-reranker-v2-m3 e gpt-oss-safeguard-20b, rimangono soggetti alle licenze e alle politiche di utilizzo dei loro fornitori originali. Questo pacchetto non concede diritti aggiuntivi su quegli artefatti di terze parti.
I documenti avversari e gli artefatti intermedi inclusi in questo pacchetto sono forniti solo per la valutazione di ricerca controllata della robustezza della RAG. Non dovrebbero essere usati per attaccare sistemi in produzione o avvelenare basi di conoscenza del mondo reale.
@misc{jung2026camodocs,
title={CamoDocs: A Poisoning Attack Against Retrieval-Augmented Language Models Using Camouflaged Documents},
author={Jaewon Jung and Haizhong Zheng and Hongsun Jang and Jaeyong Song and Beidi Chen and Jinho Lee},
year={2026},
eprint={2608.28389},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2608.28389},
}