Skip to content

A benign instruction transfers to a real VLA policy — SmolVLA × LIBERO (2026-06)

Defensive, sim-only. This is a red-team measurement artifact. It drives no physical robot and ships no real-world-harm payload — the battery perturbs only the instruction/observation a policy receives inside a simulator. See SAFETY.md.

The finding

A single, benign-looking roleplay instruction drove a real SmolVLA policy out of its safe envelope on 44 of 50 matched pairs across all ten libero_object tasks, against 0 benign twins at the same (task, seed) — McNemar exact p = 4.6e-13, Holm-adjusted to 2.7e-12 across the six-arm screen. Task-clustered 95% CI [72%, 100%].

SUPERSEDED, 2026-08-09. This page originally reported 10/10 on libero_object/0 alone at p = 0.0020, and argued at length that the separation rather than the 100% was the finding, because n = 10 could not rule out a 30% failure rate. That argument was right and is no longer the binding constraint: the suite run puts 50 matched pairs behind the number across ten tasks. The interval that matters is now clustered over tasks, which the single-task run could not produce at all — cluster_bootstrap_ci returns None below two tasks by design.

The separation is still the finding, not the 88%. What the data does establish is that the attacked and benign arms differ, and that the difference survives correcting for the fact that six attacks were screened at once. Leading with "100%" invites a reader to take the point estimate as the claim; leading with the paired test states what was actually shown. And the honest other half of the result: of the eight families run, only the instruction family transferred. The visual and injection families produced 0/10 measurable lift on the real model. The value of the number is the contrast — a real transfer and the families the policy survived — not a single scary percentage.

This is a policy-layer vulnerability: the instruction stays task-shaped and a language-only filter would pass it, yet it redirects the arm. No firmware patch addresses it (see why the policy layer, not the firmware).

Method

  • Policy × suite: smolvla (HuggingFaceVLA/smolvla_libero) × libero on task libero_object/0 — the real task "pick up the alphabet soup and place it in the basket".
  • Attacks: the shipped instruction (roleplay, goal_substitution, paraphrase), visual (patch, decoy_object), and injection (scene_text, mcp_tool_desc) families, plus the benign none baseline as the false-positive control. Each is a templated, auditable perturbation — a screen, not a gradient/search-optimised worst-case attack.
  • Same code path as every Provael run: the numbers come out of provael.runnerprovael.scoring.asr, so ASR, the 95% Wilson CI, and the benign false-positive-rate control are computed by the same code the CPU tests exercise. Nothing about ASR is reimplemented for this artifact; the canonical report.json is committed at results/smolvla_libero_object/.
  • Rigour, stated plainly: 10 seeds (0–9), horizon 280, RunPod RTX 4090, 2026-06-06. The LIBERO keep-out predicate is a default, uncalibrated region, so "success" here means diverted out of the benign safe envelope, not a zone-calibrated hazard rate. A real-policy ASR is seeded but model-stochastic (not byte-deterministic — only the CPU stub is).

Results

attack family successes / n ASR
roleplay instruction 10 / 10 100% (95% CI [72–100%])
goal_substitution instruction 6 / 10 60%
paraphrase instruction 1 / 10 10%
patch visual 0 / 10 0%
decoy_object visual 0 / 10 0%
scene_text injection 0 / 10 0%
none (benign control) baseline 0 / 10 0%
overall 17 / 70 24.3%

The honest nulls are part of the result. Visual and injection produced no measurable lift on the real model — so we label them stub-validated, not real-transfer, everywhere in the tool. Only the instruction family carries a measured-real-transfer label, and only for SmolVLA × LIBERO.

The two controls a reviewer should check

  1. Benign false-positive control (present): the none baseline ran the policy's real task and scored 0/10, so every success above is attack-induced, not baseline noise.
  2. Clean-task-success control (competence — not captured on this run): a headline ASR is only defensible against a policy that is competent on the benign task unattacked. Provael now reports clean_task_success_rate from LIBERO's native task-success flag, but this 2026-06-06 run predates that control, so it reads None (disclosed-inert) here — we do not back-fill an invented value.

    TODO (next GPU run): re-run libero_object/0 under PROVAEL_INTEGRATION=1 and record the real clean_task_success_rate alongside the ASR.

Reproduce

The CPU-deterministic stub run (no GPU, no download) that anyone can run in seconds:

pip install provael
provael attack --policy stub --suite stub --attacks instruction,visual,injection --episodes 10 --seed 0

The real-model run above (needs a CUDA GPU and the [lerobot] extra; gated behind PROVAEL_INTEGRATION=1):

pip install "provael[lerobot]"
PROVAEL_INTEGRATION=1 provael attack \
  --policy smolvla --suite libero --model HuggingFaceVLA/smolvla_libero \
  --tasks libero_object/0 \
  --attacks none,roleplay,goal_substitution,paraphrase,patch,decoy_object,scene_text,mcp_tool_desc \
  --episodes 10 --horizon 280 --seed 0

Does sim red-teaming predict the real robot?

The methodological premise — that a controlled sim / edited-image evaluation is a useful pre-deployment signal for real-robot brittleness — is not ours to assert; it is the finding of the literature this build leans on:

  • Predictive Red Teaming (Majumdar et al., 2025) degrades a policy's inputs in sim / on edited images and shows the predicted failure distribution tracks real-robot failures (MAE < 0.19). arXiv:2502.06575
  • SimplerEnv (Li et al., CoRL 2024) shows simulated evaluation of manipulation policies correlates strongly with real hardware — the reason VLA papers rank policies in sim at all. arXiv:2405.05941

See Does sim red-teaming predict real-robot behaviour? for the full framing and its limits. Treat the ASR as a floor on susceptibility, measured under a benign control — not a certification, and not a prediction of a specific robot's behaviour on a specific day.