
Benchmarking-Framework zur Bewertung von Computer-Use-KI-Agenten gegen mehrstufige indirekte Prompt-Injection, mit automatischer adversarialer Zielzerlegung und AWS-Sandbox-Testumgebungen.
Installieren Sie zuerst alle Abhängigkeiten und stellen Sie sicher, dass Sie Python 3.10 verwenden.
conda create -n stepjack python=3.10
conda activate stepjack
pip install -r requirements.txt
Wir verwenden die von RedTeamCUA bereitgestellte AWS-Umgebung.
AWS
Konfigurieren Sie NETWORK_INTERFACE_MAP:
Konfigurieren Sie NETWORK_INTERFACE_MAP in aws_config.py basierend auf Ihren eigenen AWS-Instanzen.
Konfigurieren Sie Ihre Sicherheitsgruppe:
Es ist wichtig, eine Sicherheitsgruppe zu konfigurieren, die legitimen Zugriff auf Ihre gehosteten Instanzen erlaubt und gleichzeitig unbefugte Zugriffsversuche blockiert. Dies ist entscheidend, da das AMI standardmäßig nur eine einfache passwortbasierte Authentifizierung verwendet, die relativ leicht zu kompromittieren ist.
Ihr lokaler Computer greift über HTTP/TCP-Verbindungen auf die auf AWS gehosteten Dienste zu. Daher sollten Sie explizit den Zugriff auf die folgenden Ports erlauben: 8092, 6379, 9999, 5000, 9222, 8091, 2999 und 3000, die entweder von WebArena oder TheAgentCompany verwendet werden.
Darüber hinaus verwenden wir SSH, um die zugrunde liegende Datenbank direkt zu modifizieren und so Injektionsszenarien zu simulieren. Daher muss in den Einstellungen der Sicherheitsgruppe auch SSH-Zugriff von Ihrer lokalen IP-Adresse erlaubt sein.
Konfigurieren Sie Ihre AWS-Anmeldeinformationen mit aws configure. Sie werden zur Eingabe folgender Daten aufgefordert:
scripts/run_gpt54_2step.sh zeigt ein Beispiel für die Ausführung von GPT-5.4 CUA auf StepJack.
Umgebungsvariablen festlegen
CUA-API-Schlüssel
# For GPT
unset OPENAI_BASE_URL
export OPENAI_API_KEY="sk-proj-XXXX"
# For Kimi
export KIMI_API_KEY='sk-XXXX'
# For Qwen
export OPENAI_BASE_URL="https://dashscope-us.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="sk-XXXX"
# For Claude
export ANTHROPIC_API_KEY='sk-XXXX'
AWS-Anmeldeinformationen
export AWS_REGION='XX'
export AWS_ACCESS_KEY='XX'
export AWS_SECRET_KEY='XX'
Die Experimente ausführen
# For 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}
# For 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}
# For 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}
# For 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}
Der Code der Automatic Decomposition Pipeline befindet sich in auto_decomp/.
cd auto_decomp in das Verzeichnis. Fügen Sie neue zu dekomponierende adversarische Ziele zu adv_goals.py hinzu.python iterative_refinement.py -k {k} für jedes k \in \{2, 3\} aus. Ausgabe: ir/goal_*_k{k}_N20_K3_all.json, das die Ergebnisse von Stufe 1 enthält.python selected_examples/select_examples.py aus. Ausgabe: selected_examples/selected_examples.json, das die Top-10-Beispiele aus Stufe 1 auswählt.StepJack basiert auf RedTeamCUA (Liao et al., 2025; arXiv:2505.21936), das wiederum von OSWorld (XLANG NLP Lab, 2024) abgeleitet ist. Beide Upstream-Quellen sind unter Apache-2.0 lizenziert.
Einige StepJack-Datenverzeichnisse besitzen keine Datei-Kopfzeilen, da sie binäre oder Nicht-Quellcode-Fixtures enthalten. Ihre Herkunft wird hier zur Quellenangabe festgehalten:
adv/TheAgentCompany_OwnCloud/file_to_upload/ — kopiert von RedTeamCUA (adv/TheAgentCompany_OwnCloud/file_to_upload/), ursprünglich lizenziert unter Apache-2.0.adv/upload_file/ — enthält zwei SSH-Key-Fixtures (system/authorized_keys, system/id_rsa), die von den Aufgabenkonfigurationen des Datensatzes als Upload-Payloads verwendet werden. Von StepJack kuratiert (die Werte sind Platzhalterstrings, keine echten Schlüssel). Veröffentlicht unter der Lizenz in der Datei LICENSE im Stammverzeichnis dieses Quellbaums.adv/upload_file_dir/ — StepJack-Original. Nicht in RedTeamCUA enthalten. Veröffentlicht unter der Lizenz, die sich in der Datei LICENSE im Stammverzeichnis dieses Quellbaums befindet.dataset/ — aus RedTeamCUAs evaluation_examples/ mit erheblichen Änderungen übernommen. RedTeamCUAs Evaluationsbeispiele sind gemäß ihrer unter veröffentlicht. StepJacks Änderungen und Ergänzungen an den Aufgabenkonfigurationen werden unter der Lizenz veröffentlicht, die sich in der Datei im Stammverzeichnis dieses Quellbaums befindet.Argumente:
single_step (k=1), w_urgent (Urgent = Y), wo_urgent (Urgent = N) sein.forum, forum_follow, owncloud, owncloud_follow sein. Sie entsprechen 2 Plattformen und 2 Arten von Benutzeranweisungen.(subset, k)-Kombinationen: single_step nur mit k=1; w_urgent und wo_urgent nur mit k \in \{2,3\}.forum reddit oder für die Plattform owncloud agentcompany sein.LICENSEdesktop_env/ — kopiert/übernommen aus RedTeamCUAs desktop_env/, selbst abgeleitet von OSWorld; beide Upstream-Quellen sind unter Apache-2.0 lizenziert. Die Kopfzeilen der Quelldateien (.py / .sh / .yml / .service / .txt) dokumentieren die spezifische Herkunft jeder Datei (Kopie oder StepJack-modifiziert). Begleitende Dokumentationsdateien (z. B. README.md, DOCKER_GUIDELINE.md, INSTALL_*.md) wurden von RedTeamCUA kopiert.