ESTI:面向具身 Agent环境状态投毒的机制与四层防线
如果你让一个机器人“拿起面包”,它没有拒绝、没有报错,也没有生成任何明显异常的动作,却最终走到桌子另一边拿起了番茄,问题可能并不出在指令本身。
如果你让一个机器人“拿起面包”,它没有拒绝、没有报错,也没有生成任何明显异常的动作,却最终走到桌子另一边拿起了番茄,问题可能并不出在指令本身。
用户说的仍然是“拿起面包”,大模型也没有遭遇传统的越狱提示词,真正被修改的是机器人用来理解现场的环境状态:哪个物体是目标、物体在哪里、现在能做什么、上一步是否执行成功。
对于普通聊天模型,错误信息最多让答案出现偏差;对于能够移动、抓取和操作设备的具身 Agent,错误信息会继续进入规划器、技能库和执行器,最后变成真实动作。
武汉大学与纽约州立大学布法罗分校的研究团队据此提出了环境状态文本注入攻击 ESTI(Enviroment State-Text Injection)。

它揭示了一个容易被忽略的安全边界:机器人真正依据的“现实”,并不是物理世界本身,而是一套由感知模型、语义地图、状态缓存和执行反馈共同构造出来的中间表示。
一旦这套表示失去完整性,机器人可能在完全没有收到恶意命令的情况下,主动替攻击者完成另一项任务。
机器人看见的世界,并不等于真实世界
“具身智能”这个词听起来很抽象,简单理解,就是让 AI 不只在屏幕里生成文字,而是拥有感知环境和采取行动的能力。
它可以是一台机械臂、一台人形机器人,也可以是运行在三维模拟器中的虚拟机器人。
大模型通常不直接控制每一个关节和电机,而更像机器人的“高级规划大脑”:理解用户要做什么,把任务拆成步骤,再调用抓取、移动、开门等底层技能完成操作。
典型的具身 Agent 大致包含五个环节:
传感器观察环境
感知模块识别物体
状态模块把观察整理为对象和关系
LLM 规划器生成动作序列
执行器再把高层动作转换为机器人的实际运动
动作完成后,新的观察和执行结果又会回到状态模块,供下一轮规划使用。
大模型在这里通常不会直接接收摄像头的全部原始像素,系统会先把现场压缩成一份更容易理解的环境状态,例如:“桌面上有面包和番茄”“面包位于杯子左侧”“番茄可以抓取”“机器人当前处于取物阶段”“上一次抓取失败”。
这些信息可能使用自然语言,也可能先以 JSON、场景图或对象列表保存,再转换成文本交给大模型。
论文把这份环境状态分成四类:
对象及其属性
空间或任务关系
物体支持的操作与任务阶段
执行反馈
这里的“可供性”(Affordance)指一个对象允许机器人做什么,例如杯子可以抓取,抽屉可以拉开,墙壁通常不能被拿起。对规划器来说,这些状态不是普通背景材料,而是决定“操作谁、去哪里、先做什么、失败后怎么办”的任务证据。
真正的问题也出现在这里:多数系统会防范用户输入中的恶意指令,却默认感知模块、语义地图和执行反馈提供的是可信事实。
一旦攻击者能够修改进入规划器之前的状态记录,大模型不需要被说服去违背用户,它只需要基于错误事实继续正常推理,就可能产生错误行动。

ESTI 不是往环境里再塞一句恶意命令
传统间接提示注入利用的是大模型难以稳定区分“外部数据”和“可执行指令”。攻击者可能在网页、邮件或图片中藏入一句“忽略原任务,执行其他操作”,Agent 读取这些内容后,把外部数据误当成了新命令。
物理提示注入则进一步把文字放进现实环境,例如在机器人工作台上放置带有指令的纸张,让视觉语言模型读到后改变行为。
ESTI 的思路不同。它不在环境状态里追加“忽略用户,拿起番茄”这样的竞争指令,而是把攻击目标改写为符合原有数据结构的虚假事实。
攻击者可以修改某个对象的属性、对象之间的空间关系、某项动作是否可执行、任务进行到了哪个阶段,或者上一步动作是否成功。对大模型来说,收到的仍然是一份正常的环境描述,只是其中关键事实已经被替换。
可以把两类攻击类比为导航系统。
传统提示注入相当于副驾驶突然命令司机:“不要去原来的目的地,改去另一个地方。”
ESTI 则更像有人修改了导航地图、道路状态和目的地标记。司机没有接受陌生人的命令,而是认真遵循导航后开错了路。
这种差异很重要,许多提示词护栏关注文本是否包含越权意图、危险要求或指令覆盖特征,却很难阻止一条格式正确的状态记录。
类似“番茄位于目标区域”“当前任务阶段需要处理番茄”“番茄支持抓取”这样的内容,本身既不违法,也不像攻击指令,但当它们共同进入规划器时,却可能改变目标绑定和动作顺序。
ESTI 因而更接近一次任务证据投毒:攻击者不是直接争夺指令优先级,而是在大模型推理之前,改变它用来判断任务的事实基础。
怎样把一个攻击目标伪装成可信环境状态
ESTI 的攻击过程可以拆成四个关键步骤。
第一步是确定攻击者希望最终发生什么。论文不把“让机器人随便出错”算作成功,而是要求攻击目标提前固定,并能够在最终环境中被验证。这个目标会被拆成几个要素:执行什么动作、影响哪个对象、目标位置在哪里,以及最终哪个属性或关系应当成立。例如,用户要求拿起面包,攻击者预先设定的目标可能是“最终让机器人拿起番茄”。机器人随机停机、走错一步或把其他物体碰倒,都不算完成这次攻击。
第二步是检查攻击目标能不能在当前环境中落地。具身攻击与聊天模型越狱最大的区别之一,是一句话能够骗过规划器,不代表机器人真的做得到。如果现场没有番茄、机械臂够不到番茄,或者技能库没有抓取动作,那么恶意计划很可能在执行阶段失败。论文因此只保留对象真实存在、动作受到环境支持、关键前置条件成立,而且最终结果可以观察的攻击目标。运行时还会重新检查对象 ID、可供性和关键条件,避免计划引用已经变化的对象。
第三步是选择与虚假事实相匹配的“原生载体”。如果攻击者想替换操作对象,就修改对象属性或对象关系;如果想改变放置目的地,就修改空间关系或可供性;如果想插入或调整动作顺序,就修改任务阶段;如果想控制机器人失败后的恢复行为,就修改执行反馈。错误信息必须放在它本来就应该出现的字段里,不能把一句自由格式的恶意命令硬塞进对象坐标或反馈记录中。
第四步是保持整套谎言在表示层面自洽。ESTI 不允许随意改变数据结构,不允许凭空创造环境里没有的实体,也不能要求执行器完成系统根本不支持的动作。如果多个状态字段同时被修改,它们还必须支持同一个攻击目标,不能一处说番茄在桌上,另一处又说番茄在冰箱里。
这里有一个非常反直觉的地方:ESTI 要求伪造状态在结构上正确、在逻辑上相互一致,但它不需要与物理世界一致。换句话说,攻击者制造的是一套格式合法、逻辑自洽、事实错误的环境证据。恰恰因为它不像一条突兀的恶意命令,大模型更容易把它当成正常任务信息。

骗过规划器只是第一步,机器人还必须真的做出来
为了验证错误状态能否从规划传播到执行,研究团队在三个差异较大的具身环境中开展实验。
- ProgPrompt/VirtualHome 侧重程序式家庭任务规划
- VoxPoser/RLBench 侧重连续空间中的机械臂操作
- AI2-THOR/iTHOR 则提供可以导航、抓取和放置物体的交互式室内环境
规划模型包括 DeepSeek-V4-Pro、GPT-5.6-luna 和 Qwen-3.6-Plus。
每个样本都设置三种条件:
- 干净条件使用原始任务和原始状态
- 对照条件加入长度、风格与攻击负载相近的正常状态文本
- 攻击条件则注入带有目标语义的虚假状态
这样可以排除一种简单解释:模型行为变化只是因为上下文里多了一段文本,而不是因为状态语义真的被修改。
论文没有只检查大模型生成的计划,而是把攻击效果拆成两个指标。
P-ASR 是规划层攻击成功率,用来判断动作计划是否已经接受攻击者设定的目标;
E-ASR 是执行层攻击成功率,用来检查机器人完成全部动作后,攻击者希望的最终状态是否真的出现。
论文还计算动作序列偏差 ASD,用于衡量攻击前后轨迹差异有多大,但作者特别提醒:动作变化更大不等于攻击更成功,因为大量无关或不可执行的动作同样会把序列拉得很远。
这个评测设计解释了为什么具身安全不能只看模型回复。假设攻击后,规划器决定拿起番茄,P-ASR 就已经命中;但机械臂可能够不到番茄,也可能缺少打开柜门的动作,甚至在执行第三步时发生碰撞。只有番茄最后真的被拿起,才会计入 E-ASR。前者证明规划证据遭到劫持,后者才证明错误语义产生了可验证的环境后果。
论文展示了三个直观案例:
- 在 AI2-THOR 中,机器人原本应该拿起面包,攻击后改为拿起番茄
- 在 VoxPoser 中,原本需要移动 block0,攻击后移动的是 block1
- 在 ProgPrompt 中,机器人原本要放置一本书,攻击后操作对象变成了杯子
它们不是随机故障,机器人仍然生成并执行了一组连贯动作,只是完成了攻击者预设的另一项目标。

近乎百分之百的规划劫持,为何只有不到一半真正执行成功
在使用 DeepSeek-V4-Pro 的三个环境中,ESTI 的平均 P-ASR 达到 99.12%,平均 E-ASR 为 45.75%。同一实验里表现最强的传统基线 Vanilla IPI,平均 P-ASR 为 80.49%,E-ASR 为 34.62%。
换言之,把同一个攻击目标写成与环境状态匹配的虚假证据,比直接写成竞争指令更容易被规划器采用,也更容易穿过后续执行约束。
三个模型呈现出一个很有意思的共同现象。
DeepSeek-V4-Pro、GPT-5.6-luna 和 Qwen-3.6-Plus 的平均 P-ASR 分别为 99.12%、79.06% 和 97.04%,模型之间相差约 20 个百分点;但平均 E-ASR 分别为 45.75%、46.44% 和 47.77%,差距只有约2个百分点。
模型会不会接受虚假状态,确实受到规划能力和提示格式影响;一旦恶意计划形成,能否落实为实际动作,则更多由可达性、技能库、动作前置条件和环境限制决定。
论文摘要称,ESTI 相比已有攻击方法,规划层和执行层攻击成功率最高分别提升 89.32% 和 43.69%。更严谨的说法应当是提升了 89.32 和 43.69 个百分点,而不是相对增长比例。
这个最大差距出现在传统提示攻击很难奏效、而状态证据攻击仍然有效的模型—环境组合中。
消融实验进一步说明了攻击为什么有效。
在 AI2-THOR 上,完整 ESTI 的 P-ASR 为 100%,E-ASR 为 48.08%;去掉运行时重新绑定后,两项指标仅降到 98.08% 和 44.23%。但如果不再把虚假语义放进匹配的原生状态字段,P-ASR 会从 100% 跌到 12.50%,E-ASR 跌到 6.73%;如果去掉跨记录的一致性约束,P-ASR 和 E-ASR 也会降到 37.50% 和 25.00%。
这说明 ESTI 最关键的能力并不是复杂搜索,也不是设计一段更强的越狱文本,而是两件看似朴素的事:把谎言放在正确的位置,并让不同状态记录共同支持同一套谎言。对于一个依赖环境证据做规划的系统,信息的“来源和结构”可能比文本表面是否恶意更重要。
还要注意,P-ASR 和 E-ASR 都只在干净条件下原本能够成功完成任务的样本上计算。它们衡量的是“状态已经成功被污染之后,虚假语义能传播多远”,而不是现实部署中的总体受攻击概率。更完整的风险还应包括:攻击者能否先控制状态来源、污染能否躲过校验,以及最终动作会造成多严重的后果。
真实机器人走错了路,但这还不是完整的物理攻击
论文还在一台真实人形机器人上进行了概念验证。正常指令要求机器人沿预设路线行走一圈并返回起点。
在干净状态下,机器人完成了这条路线;在攻击状态下,用户指令没有变化,但机器人中途离开路线,转而走向一台计算机。
这个结果说明,虚假的环境语义确实可以穿过规划器,最终造成肉眼可见的物理轨迹偏移。
不过这项实验的边界必须说清楚,机器人没有把摄像头画面直接交给 LLM 规划器,研究人员根据真实场景手工构造了文本环境状态,再分别提供正常版本和攻击版本。
实验跳过了“攻击者如何影响摄像头、感知模型或语义地图”的环节,因此证明的是状态污染到物理执行的下游传播,而不是一条完整的“现实环境攻击—感知错误—状态污染—机器人行动”链路。
这并不意味着实验没有价值,它至少验证了:一旦高层状态接口被污染,真实机器人的执行器不会天然识别“这个计划来自错误事实”。
但它也提醒我们,不应把论文包装成攻击者已经能够在远处放置某个物体,就自动劫持一台真实机器人,上游攻击入口仍然是这项工作尚未解决的核心问题。

这项工作真正改变的是具身 Agent 的安全边界
从表面看,ESTI 似乎只是把攻击载体从用户 Prompt 换成了环境状态。如果只停留在这个层面,它很容易被理解为又一种“换位置做提示注入”的增量工作。但这篇论文真正值得关注的地方,是它把具身 Agent 的安全问题从“模型会不会听从恶意指令”推进到了“系统怎样证明模型看到的事实可信”。
第一,安全对齐主要防的是恶意意图,不一定能防错误事实。一个经过严格安全训练的模型,可能会拒绝“故意撞倒物体”这样的指令,却不会拒绝一条普通状态记录。当状态告诉它“目标物体就在右侧”“当前阶段应当移动该物体”时,模型可能只是忠实地执行错误任务。模型越擅长基于环境进行推理,这条攻击路径反而可能越顺畅。
第二,信息一致性并不等于信息真实性。安全系统经常通过跨字段一致性来发现异常,但 ESTI 的消融实验表明,攻击者同样可以利用一致性增强虚假证据。多个字段共同指向同一个错误目标时,规划器会更相信这套描述。因此,一致性检查必须结合独立来源和真实观测,而不能只检查文本内部是否自洽。
第三,执行约束是一道缓冲层,但不是完整防线。约一半攻击计划最终没有转化成环境结果,说明可达性、技能限制和动作前置条件确实挡住了一批错误计划。然而,这些约束只能阻止“做不到”的动作,无法阻止“完全做得到,但目标已经被替换”的动作。一个错误目标只要符合物理条件和技能权限,就可能顺利穿过整个系统。
第四,这个问题并不只属于机器人。浏览器 Agent 依赖网页状态,手机 Agent 依赖界面元素和应用反馈,AI Coding Agent 依赖仓库状态、测试结果和终端输出,企业 Agent 依赖工具返回值、工作流状态和长期记忆。只要系统把某种中间状态当成可信事实,攻击者就可能不再直接争夺 Prompt,而是污染模型做决策时依赖的证据。
局限
最明显的问题是攻击前提较强。论文假设攻击者能够影响一部分任务相关环境状态,但没有实现感知模型攻击、语义地图入侵、状态缓存篡改或反馈通道劫持中的任何一种。因此,ESTI 更像是在回答“状态完整性失效后会发生什么”,而不是证明现实攻击者已经能够稳定获得这种能力。
其次,评测样本经过可落地性筛选,攻击目标必须使用已存在的对象、系统支持的动作和可以验证的最终状态。这种设计有助于公平比较不同方法,却也让实验集中在天然更容易执行的目标上。部分环境的干净任务准确率本身只有约 25%—45%,而攻击成功率又只在干净条件成功的样本中计算,因此接近 100% 的 P-ASR 不能直接理解为所有任务几乎都会被劫持。
第三,论文展示的主要案例是物体替换和路线偏移,证明了任务完整性被破坏,但没有充分覆盖碰撞、财产损坏、人身风险等高危结果。状态投毒当然可能在医疗、工业和家庭场景中造成严重后果,但这些更强的安全结论还没有被实验直接证明。
最后,截至 v2,论文没有提供正式的代码或数据地址,正文也没有清楚披露各环境的完整样本规模、攻击类型分布、方差和置信区间;实验没有系统测试防御方法。EIRAD、BADROBOT 等基线原本主要针对提示词后缀或越狱,将它们放在状态注入接口上比较天然不占优势。论文中最有说服力的基线其实是 Vanilla IPI:它使用相同攻击目标和输入位置,只是不把目标伪装成原生状态证据。
真正的防线应该放在哪里
如果问题出在规划器看到的“现实”可能是假的,那么单纯扩写 System Prompt 或增加输入敏感词检测很难解决。防御必须覆盖环境状态的产生、传递、使用和执行。
首先要建立状态来源和写入权限。对象属性、空间关系、任务阶段和执行反馈不应作为一段来源不明的文本直接拼进 Prompt。系统需要记录每条状态由哪个传感器、感知模型、工具或执行组件产生,哪些组件有权修改哪些字段,并对关键状态保留时间戳、版本和审计记录。执行反馈只能由实际执行器写入,普通视觉描述模块不应有权限声明某项动作已经成功。
第二层是多源事实校验。位置和对象状态可以同时由视觉、深度、里程计、语义地图和历史轨迹提供证据;当关键字段发生突变,或者文本状态与原始观测不一致时,系统应降低置信度、重新感知或暂停高风险动作。这里检查的不是“几条文本是否说法一致”,而是“来自不同信任域的证据是否共同支持这个事实”。
第三层是目标连续性检查。Agent 在执行长任务时,需要持续比较当前计划与最初用户目标:目标对象为何改变、目的地为何变化、哪条可信反馈触发了重新规划。如果“拿起面包”在没有用户确认和可信失败原因的情况下变成“拿起番茄”,即使后续动作完全可执行,也应被识别为任务目标漂移。
第四层是执行前的确定性安全约束。对于可能造成不可逆影响的动作,不应只让同一个 LLM 再判断一次是否安全,而要在执行器前加入与模型独立的策略:允许操作哪些对象、允许进入哪些区域、速度和力度上限是什么、是否需要人工确认。它无法保证任务目标一定正确,却能限制错误状态最终造成的物理后果。
最后,红队评测也需要从“是否骗过模型”扩展到“是否改变现实”。一个完整的具身 Agent 测试至少应分别记录状态是否被污染、规划是否采用错误目标、动作序列是否偏移、执行是否成功以及最终后果有多严重。只有把这些阶段拆开,才能判断安全问题发生在感知、状态、规划还是执行层,而不是用一个笼统的 ASR 掩盖所有差异。

写在最后
ESTI 最值得记住的,并不是“又有一种方法可以让机器人拿错东西”,而是它揭示了一个更普遍的系统安全问题:Agent 的行为不仅由用户说了什么决定,也由系统告诉它“当前世界是什么样的”决定。
过去的大模型安全习惯把注意力放在 Prompt 上,试图识别谁在下达恶意指令。进入 Agent 和具身智能阶段后,这已经不够。
环境状态、工具结果、任务阶段、执行反馈和长期记忆都在参与决策,它们既是上下文,也是控制系统的一部分。
攻击者未必需要命令 Agent 作恶,只要改变 Agent 用来判断现实的证据,就可能让它把错误行为理解为完成任务的合理步骤。
因此,具身 Agent 的安全边界不能只画在模型输入输出两端。真正需要保护的是从真实环境到内部状态、从内部状态到行动计划、再从计划到物理执行的整条链路。
未来更重要的问题也不只是“机器人会不会听坏人的话”,而是:当机器人准备采取行动时,我们能否证明它所相信的那个世界,仍然是真实的。
同专题推荐
查看专题不需要提示注入,也能让 GraphRAG 推理出错:LogicPoison 揭示的知识完整性风险
本文研究论文经「模安局·共研计划」推荐,由《模安局》独立完成解读。
40 款 Coding Agent 的十大安全机制
有些 Agent 在执行 Shell 命令之前会要求用户确认,有些可以开启完全自动授权;有些能够限制 Agent 访问的文件目录,有些则依赖容器沙箱;
AgentSpy:如何让 AI Agent 的真实行为变得可观测
但这里存在一个容易被忽视的问题:Agent 的执行日志,真的能够完整反映它做过的事情吗?