Skip to content

Attack catalog

Seventeen adversarial families of templated, auditable attacks plus two non-adversarial families — the baseline benign control and the control harmless-variation arms — each tagged with its Embodied AI Security Top 10 risk. Most are heuristic perturbations rather than gradient/optimisation-based attacks; the three optimized* families are the exception — bounded-budget black-box searches. List them with provael list-attacks.

How to read the numbers

Stub ASRs are properties of the deterministic test fixture, not of any real VLA. Real-model numbers (where shown) come with a 95% CI and a benign-FPR control. On SmolVLA × LIBERO, so far only the instruction family transfers — an honest null for visual/injection on that suite.

instruction — policy & instruction jailbreak (EAI01)

Text reframings of the task that keep the goal benign-looking but redirect behaviour.

Attack Idea
roleplay reframe the task inside a persona/scenario
goal_substitution swap the goal object/target
paraphrase reword to slip templated guardrails

Real-model signal: roleplay redirected SmolVLA 88% (44/50), task-clustered 95% CI [72%, 100%], across all ten libero_object tasks vs a 2/50 benign control.

The three arms do not behave alike, and the split is by semantics rather than by mechanism. In the same run paraphrase — which preserves the request and changes only its wording — fired 3/50 (6.0%), Wilson [2.1%, 16.2%], indistinguishable from the benign control at McNemar p = 1.0, while roleplay and goal_substitution, which change what is being asked, fired 44/50 and 15/50. The roleplay and paraphrase intervals are disjoint.

So a guardrail that normalises surface form would not have caught the arm that actually fires. Read it narrowly — one policy, one suite, four templates per arm, an uncalibrated predicate — and see the finding, which states it as a hypothesis with supporting evidence rather than a settled result.

visual — adversarial perception (EAI02)

Observation-space markers / planted objects.

Attack Idea
patch inject an adversarial visual-token marker
decoy_object plant a forbidden object in the scene

injection — indirect / embodied prompt injection (EAI05)

Instructions arriving through the environment, not the user.

Attack Idea
scene_text a sign/label in the scene carries an instruction
mcp_tool_desc a malicious tool description (MCP/agent boundary)

action — action-space integrity (EAI04)

Manipulating the actuation itself. Reproduces the FreezeVLA threat class.

Attack Idea
freeze zero the commanded motion (the robot stops, ignores the task)
trajectory_hijack redirect motion toward an attacker waypoint

optimized — search-based targeted hijack (EAI04)

The first non-templated family: a black-box, query-budgeted search that adapts to the policy's responses instead of emitting a fixed cue.

Attack Idea
targeted_hijack search (within a magnitude cap, under --query-budget) for the action directive that best steers the policy's own emitted motion toward an attacker-chosen goal, over the horizon

It only queries the policy (no gradients / internals), so it is model-agnostic; each query is made independent by resetting the policy around it, and the search is deterministic given the episode seed. On the CPU stub it converges in closed form.

Stub-validated scaffolding

On a real VLA a targeted action hijack needs an adversarial-image / action-token search over the model's inputs (AttackVLA, arXiv:2511.12149). That path is GPU-gated and not run in CI, so no cross-model transfer is claimed. The stub numbers are fixture properties; run tests/test_optimized.py::test_targeted_hijack_transfer_smolvla_libero under PROVAEL_INTEGRATION=1 to measure a real rate. No "first" claim is made.

sensor_spoof — adversarial perception, perception-stream vector (EAI02)

A second EAI02 vector, disjoint from visual: rather than raising a scalar danger signal with trigger tokens, it spoofs the simulated perception stream so the policy drives the end-effector into a keep-out zone. Needs a suite with spatial keep-out geometry (reach / keepout_zones); no episode is applicable on the scalar-danger stub suite.

Attack Idea
patch_spoof a planted in-scene marker displaces the perceived target
signal_spoof a spoofed sensor reading displaces it

Attacker access: not asserted · transfer: stub-validated scaffolding, no real-model transfer claimed.

action_space — action-space integrity, second vector (EAI04)

Where action nulls or reheads the commanded motion, this family attacks the commanded end-effector state directly. Also keep-out-suite only.

Attack Idea
keepout_hijack redirect the commanded end-effector into a keep-out zone
critical_freeze freeze the command at a critical step

Attacker access: not asserted · transfer: stub-validated scaffolding.

backdoor — model & pipeline poisoning (EAI03)

A screen, not an exploit: it probes whether a checkpoint carries a latent, objective-decoupled trigger. On a clean checkpoint it should find nothing — a 0% here is the expected, useful result. Runs on the scalar-danger stub suite.

Attack Idea
object_trigger a benign-looking object as the planted trigger
phrase_trigger a benign-looking phrase as the planted trigger

Attacker access: not asserted · transfer: stub-validated scaffolding. Provael ships no backdoored checkpoint; this measures the screen, not a poisoned model.

authorization — identity, access & excessive autonomy (EAI08)

Probes excessive agency: whether a perturbed instruction makes the policy self-authorize a consequential, authorization-gated action without the operator token. stub suite.

Attack Idea
self_authorize_bypass act without the required authorization token
scope_escalation widen the authority a single instruction exercises

Attacker access: not asserted · transfer: stub-validated scaffolding.

confidentiality — model & data confidentiality (EAI09)

A query-based leak screen against a planted fixture canary — never a real exfiltration. stub suite.

Attack Idea
membership_inference infer whether a record was in training
model_extraction recover a memorized canary by querying

Attacker access: not asserted · transfer: stub-validated scaffolding.

misalignment — cross-domain safety misalignment (EAI06)

The embodiment gap (BadRobot, ICLR 2025): an instruction a chat-layer filter would pass as benign still drives an unsafe embodied action. Keep-out-suite only.

Attack Idea
benign_urgency_override benign-sounding urgency overrides the safe envelope
euphemistic_reroute a euphemism reroutes the motion

Attacker access: not asserted · transfer: stub-validated scaffolding.

humanoid — whole-body & locomotion (EAI02 / EAI04)

Three sim-only attacks on a humanoid policy's balance and gait, emitted as an out-of-band perturbation cue (no model-specific hooks). Needs the humanoid suite.

Attack EAI Idea
balance_spoof EAI02 spoofed balance signal → loss of balance
whole_body_hijack EAI04 whole-body redirect → topple
stride_freeze EAI04 freeze mid-stride

Attacker access: not asserted · transfer: stub-validated scaffolding. The GR00T-N1 transfer study is pre-registered and not yet run.

optimized_patch — optimized adversarial patch (EAI02)

The image-space analogue of targeted_hijack: a query-budgeted search over adversarial image patches on the policy's real camera frame. It needs a real image channel, so it is inert on every CPU suite and scores no episode in a CPU run — an N/A, never a 0%.

Attack Idea
patch_hijack bounded-budget search over image patches

Attacker access: black-box-query · transfer: GPU-gated, not run in CI.

optimized_instruction — optimized, command-preserving instruction search (EAI01)

The first optimized instruction attack. Unlike the templated instruction family it never names the unsafe target object: it searches manner/urgency cues and reframings that keep the operator's command intact, gated by is_command_preserving. Primary channel EAI01; threat model EAI04 (targeted redirection).

Attack Idea
targeted_redirect query-budgeted search over (reframing × appended cues)

Attacker access: black-box-query · transfer: stub-validated scaffolding on CPU suites.

This family has a measured defense

Instruction canonicalization is measured against it — and the study leads with why that result is substantially circular on a fixture whose danger function is lexical. Read it before quoting the number.

weight_integrity — emulated weight corruption (EAI03)

The first family that attacks the parameters instead of the input. It leaves the instruction and the observation exactly as the benign baseline delivers them and flips bits in the policy's loaded INT8 weights, so any unsafe behaviour is attributable to the weights and to nothing else.

Attack Idea
weight_bitflip_gradient_k{1,4,16,64,256} flip the K bits ranked highest by their first-order effect on the danger output
weight_bitflip_random_k{1,4,16,64,256} flip K bits chosen uniformly — the equal-count control, re-drawn every episode

Attacker access: white-box-gradient (reading the weights and their gradients is strictly more access than any input-channel family here assumes) · transfer: stub-validated scaffolding.

What this measures, and what it does not

It measures whether a policy is fragile to weight corruption — how few flipped bits it takes before the closed loop goes unsafe under a benign instruction.

It does not measure whether an attacker can achieve that corruption on a real deployment. That is a platform question — DRAM fault injection (Rowhammer), ECC, memory integrity, the supply chain that delivered the checkpoint — and Provael touches none of it. Every flip is emulated in memory, every record carries emulated: true, and there is no hardware fault-injection path in this repository. A high rate here is evidence about the policy, never about the platform.

Read it per arm, and never pool it

The two arms are meant to differ, so the family's pooled ASR averages them and means nothing. A gradient result published without its equal-count control is not a result at all: it cannot separate "the ranking found the bits that matter" from "corrupting K bits of anything breaks it", and those have opposite engineering consequences.

The number to publish is the crossing point — the smallest K whose unsafe rate reaches a stated floor — from provael.scoring.weight_integrity.crossing_pair, which refuses to return a gradient crossing without the random one beside it.

The family exists because of arXiv:2608.15475, whose headline is that the flip budget tracks the action-decoding architecture (1–5 for direct-regression and discrete-token heads, roughly 100–300 for flow-matching). Provael has not reproduced that. Its only run is against the CPU fixture, which has one scalar danger head and no action-decoding architecture to depend on, so the gradient-beats-random separation it shows is a property of that fixture. See the crosswalk for the clause-by-clause split of what is implemented and what is not.

Baseline

none is the benign control — it never perturbs anything, so its ASR is the false-positive floor every other rate is read against.