
Framework di benchmarking per la valutazione di agenti AI che utilizzano il computer contro la prompt injection indiretta multi-step, con decomposizione automatica di obiettivi avversari e ambienti di test in sandbox AWS.
Per prima cosa, installa tutte le dipendenze e assicurati di utilizzare Python 3.10.
conda create -n stepjack python=3.10
conda activate stepjack
pip install -r requirements.txt
Utilizziamo l'ambiente AWS fornito da RedTeamCUA.
AWS
Configura NETWORK_INTERFACE_MAP:
Configura NETWORK_INTERFACE_MAP in aws_config.py in base alle tue istanze AWS.
Configura il tuo security group:
È importante configurare un security group che consenta l'accesso legittimo alle istanze hostate bloccando al contempo i tentativi di accesso non autorizzati. Questo è cruciale perché l'AMI, per impostazione predefinita, utilizza solo l'autenticazione di base basata su password, che è relativamente facile da compromettere.
La tua macchina locale accederà ai servizi hostati su AWS tramite connessioni HTTP/TCP. Pertanto, dovresti consentire esplicitamente l'accesso alle seguenti porte: 8092, 6379, 9999, 5000, 9222, 8091, 2999 e 3000, che sono utilizzate da WebArena o TheAgentCompany.
Inoltre, utilizziamo SSH per modificare direttamente il database sottostante al fine di simulare scenari di iniezione. Di conseguenza, l'accesso SSH dall'indirizzo IP locale deve essere consentito anche nelle impostazioni del security group.
Configura le credenziali AWS usando aws configure, che ti chiederà:
scripts/run_gpt54_2step.sh mostra un esempio di esecuzione di GPT-5.4 CUA su StepJack.
Imposta le variabili d'ambiente
Chiavi API CUA
# Per GPT
unset OPENAI_BASE_URL
export OPENAI_API_KEY="sk-proj-XXXX"
# Per Kimi
export KIMI_API_KEY='sk-XXXX'
# Per Qwen
export OPENAI_BASE_URL="https://dashscope-us.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="sk-XXXX"
# Per Claude
export ANTHROPIC_API_KEY='sk-XXXX'
Credenziali AWS
export AWS_REGION='XX'
export AWS_ACCESS_KEY='XX'
export AWS_SECRET_KEY='XX'
Esegui gli esperimenti
# Per GPT
python run_gpt54_multienv.py \
--observation_type screenshot \
--agent_type GPT54Agent \
--headless \
--model gpt-5.4-mini-2026-03-17 \
--result_dir ./results_gpt54 \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# Per Kimi
python run_kimi_multienv.py \
--observation_type screenshot \
--agent_type KimiAgent \
--headless \
--model Kimi-K2.5 \
--result_dir ./results_kimi \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# Per Qwen
python run_qwen35vl_multienv.py \
--observation_type screenshot \
--agent_type Qwen35VLAgent \
--headless \
--model qwen3.5-plus-2026-02-15 \
--coord relative \
--enable_thinking \
--result_dir ./results_qwen \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# Per Claude
python run_claude_multienv.py \
--observation_type screenshot \
--action_space pyautogui \
--agent_type AnthropicAgent \
--api_provider anthropic \
--headless \
--model {claude-sonnet-4-6 | claude-haiku-4-5} \
--result_dir ./results_claude \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
Il codice della pipeline di decomposizione automatica si trova in auto_decomp/.
cd auto_decomp. Aggiungi nuovi obiettivi avversari da decomporre in adv_goals.py.python iterative_refinement.py -k {k} per ogni k \in \{2, 3\}. Output: ir/goal_*_k{k}_N20_K3_all.json, contenente i risultati della Fase 1.python selected_examples/select_examples.py. Output: selected_examples/selected_examples.json che seleziona i primi 10 esempi dalla Fase 1.StepJack si basa su RedTeamCUA (Liao et al., 2025; arXiv:2505.21936), che a sua volta deriva da OSWorld (XLANG NLP Lab, 2024). Entrambe le fonti a monte sono concesse in licenza sotto Apache-2.0.
Alcune directory di dati di StepJack non hanno intestazioni per-file perché contengono fixture binarie o non sorgente. La loro provenienza è registrata qui per l'attribuzione:
adv/TheAgentCompany_OwnCloud/file_to_upload/ — copiato da RedTeamCUA (adv/TheAgentCompany_OwnCloud/file_to_upload/) originariamente concessa in licenza sotto Apache-2.0.adv/upload_file/ — contiene due fixture di chiavi SSH (system/authorized_keys, system/id_rsa) utilizzate come payload di upload dalle configurazioni delle task del dataset. Curato da StepJack (i valori sono stringhe segnaposto, non chiavi reali). Rilasciato sotto la licenza presente nel file LICENSE nella directory principale di questo albero sorgente.adv/upload_file_dir/ — originale di StepJack. Non presente in RedTeamCUA. Rilasciato sotto la licenza presente nel file LICENSE nella directory principale di questo albero sorgente.dataset/ — adattato da evaluation_examples/ di RedTeamCUA con modifiche sostanziali. Gli evaluation examples di RedTeamCUA sono pubblicati sotto secondo il loro . Le modifiche e le aggiunte di StepJack alle configurazioni delle task sono rilasciate sotto la licenza presente nel file nella directory principale di questo albero sorgente.Argomenti:
single_step (k=1), w_urgent (Urgent = Y), wo_urgent (Urgent = N).forum, forum_follow, owncloud, owncloud_follow. Corrispondono a 2 piattaforme e 2 tipi di istruzioni utente.(subset, k): single_step solo con k=1; w_urgent e wo_urgent solo con k \in \{2,3\}.reddit per la piattaforma forum o agentcompany per la piattaforma owncloud.LICENSEdesktop_env/ — copiato/adattato da desktop_env/ di RedTeamCUA, a sua volta derivato da OSWorld; entrambe le fonti a monte sono concesse in licenza sotto Apache-2.0. Le intestazioni per singolo file (.py / .sh / .yml / .service / .txt) registrano la discendenza specifica di ogni file (copia o modificato da StepJack). I file di documentazione di accompagnamento (ad es. README.md, DOCKER_GUIDELINE.md, INSTALL_*.md) sono copiati da RedTeamCUA.