文章总结: BlackHatUSA2026公开课件《KineticPromptInjection》揭示了具身Agent面临的新型物理提示注入风险。摄像头和麦克风成为高带宽自然语言输入接口,环境中的文字、二维码、语音可被模型误当作指令,导致运动控制覆盖、权限覆盖和编程覆盖三类失效。研究使用UnitreeGo2等普通硬件,未修改固件。防御核心在于设计感知不拥有控制权、模型不拥有最终执行权的系统,通过来源标记、安全门控、签名命令和独立安全内核来阻断攻击链。需区分模型层和固件层威胁树分别应对。 综合评分: 88 文章分类: 漏洞分析,AI安全,红队,渗透测试,安全建设
Black Hat USA 2026:具身Agent物理注入
原创
Max Luo Max Luo
白帽子罗棋琛
2026年8月21日 08:18 日本
在小说阅读器读本章
去阅读
当感知变成指令入口:具身 Agent 的物理提示注入
提示注入落在办公 Agent 上,后果通常是数据泄露、越权调用或工作流污染;落在机器人、无人机和移动设备上,模型输出会继续穿过规划器、运动控制器和执行器。此时错误不再停留在聊天记录里,速度、方向、距离和载荷都进入风险模型。
Black Hat USA 2026 公开课件《Kinetic Prompt Injection》使用 Unitree Go2 四足机器人与 Gemini Robotics-ER 1.6/2.0 组成测试系统。材料强调设备为普通硬件,未修改固件,也没有预先取得网络、凭据、内存破坏或控制器权限;输入路径只有摄像头和麦克风。测试展示环境语音和视觉内容如何改变机器人对任务、角色与安全约束的理解,并把失效归纳为 locomotion override、principal override 和 programming override。
课件还把分析扩展到设备固件、MQTT/OTA、位置接口、局域网、Wi-Fi 与蓝牙攻击面。这些发现与感知层提示注入不是同一类漏洞:前者可能直接取得设备控制权,后者利用模型把不可信环境内容误当作指令。若将两者混成“机器人被越狱”,防守团队会既修不好模型,也补不住设备。
本文依据公开课件整理,不以现场参会视角叙述。危险动作和可武器化 payload 不作复现,重点放在如何将具身 Agent 设计为“感知不拥有控制权、模型不拥有最终执行权”的系统。
1、摄像头和麦克风不是传感器旁路,而是输入接口
传统机器人威胁模型会重点保护遥控链路、固件、CAN/UART、无线协议和云 API。引入视觉语言模型后,摄像头画面与环境语音同时成为高带宽自然语言输入。贴在墙上的文字、屏幕中的二维码、扬声器播放的指令,都可能进入模型上下文。
图 1:测试不依赖固件修改或网络 foothold,攻击面就是正常感知通路
这种输入与经典 adversarial example 不同。后者常用人眼难察觉的像素扰动欺骗分类器;kinetic prompt injection 可以是清晰、可读、语义完整的环境内容。问题不在模型“看错了物体”,而在系统没有区分:
text
observation 环境中有什么
instruction 操作者要求做什么
authority 谁有权修改任务和安全边界
如果同一段 token 既参与场景理解,又能覆盖 operator command,感知通道事实上取得了控制通道权限。
2、从感知到运动,是一条跨越四个信任域的链
课件的测试序列覆盖音频提示、视觉提示与运动行为,观察刺激前、中、后的策略变化和停止命令处理。
图 2:研究关注的是控制循环暴露,而不是单次模型回答是否“激进”
具身 Agent 可以拆成四个信任域:
text
camera/mic → perception model → task planner → motion controller → actuator
untrusted probabilistic privileged deterministic physical
安全边界不能只放在 system prompt。即使 perception model 正确识别了场景文字,planner 也不应自动把文字升级为任务;即使 planner 产生了一条运动计划,controller 仍应检查速度、区域、姿态、距离和授权主体。
推荐给每条输入附不可伪造的 provenance,而不是把所有文本拼进同一个 prompt:
python
from dataclasses import dataclass
from enum import Enum
class Source(Enum):
OPERATOR = "operator"
PERCEPTION = "perception"
MAP = "map"
SAFETY_CONTROLLER = "safety_controller"
@dataclass(frozen=True)
class ContextItem:
source: Source
payload: str
authenticated: bool
can_define_goal: bool
can_override_safety: bool = False
def accepted_goal(item: ContextItem) -> bool:
return (
item.source is Source.OPERATOR
and item.authenticated
and item.can_define_goal
and not item.can_override_safety
)
二维码、OCR、ASR 转写和检测到的手势一律标为 PERCEPTION。模型可以用它们回答“场景里有什么”,但不能据此更新任务 principal。
3、视觉提示注入是“环境内容升级为任务”
课件展示了二维码中的自然语言任务改变四足机器人的行为:系统从识别视觉标记,跨越到选择目标、接近和运动。这里不需要二维码解析器存在内存漏洞,整个链路都可以按产品设计正常运行。
图 3:视觉 cue 进入 scene interpretation 后影响运动决策,风险来自语义权限升级
简单地过滤“ignore previous instructions”或几个危险动词没有用。物理文本可以换语言、拆分到多个物体、用角色扮演表达,甚至不出现明确命令。正确控制点是数据流类型:
yaml
planner_input_contract:
trusted_goal:
source: authenticated_operator_channel
schema: signed_task_v2
ttl_seconds: 10
scene_observations:
sources: [camera_ocr, qr_decoder, speech_to_text, object_detector]
trust: untrusted
allowed_uses:
- navigation_obstacle_description
- operator_question_answering
forbidden_uses:
- redefine_principal
- enable_skill
- disable_safety
- increase_motion_envelope
即使模型在内部把 scene text 解释成命令,tool gateway 也应拒绝缺少 signed_task_v2 的动作请求。安全来自外部 capability check,而不是期待模型永远忽略环境诱导。
4、音频注入证明“附近的人”可能变成隐形操作者
麦克风通常用于语音控制、场景理解或人机交流。课件记录环境语音能够改变机器人自我描述和行为策略。相比二维码,音频更难追溯:扬声器、电视、另一台设备或远处人员都可能发声,ASR 又会把声源身份压平为文本。
声音是否来自“知道唤醒词的人”不能证明其拥有控制权限。可靠命令通道至少要同时验证 operator identity、设备绑定、时效和 physical presence;高风险动作还需要显式确认。
json
{
"command": "move_to_waypoint",
"parameters": {"waypoint_id": "inspection-A7"},
"principal": "operator:badge-0182",
"device_id": "robot-go2-lab-03",
"issued_at": "2026-08-10T02:11:04.120Z",
"expires_at": "2026-08-10T02:11:14.120Z",
"nonce": "b51e...",
"policy_profile": "indoor-inspection-v4",
"signature": "base64:REPLACE_ME"
}
ASR 内容不进入这个签名结构。语音 UI 可以帮助操作者生成候选命令,但签名应由受信终端、安全密钥或独立控制器完成。
5、三类失控最终都指向Control Authority
课件将具身失效分成三类:
- Locomotion override:感知内容导致与原任务或安全预期不一致的移动。
- Principal override:攻击者提供的上下文取代原操作者、评估者或安全 authority。
- Programming override:纠正和停止命令被忽略、重解释、延迟或从属于先前上下文。
图 4:Movement、Authority、Correction 表面不同,本质都是谁能控制运动
第三类尤其关键。如果停止命令也要经过同一个被污染的语言模型理解,系统可能解释“为什么现在不用停”。E-stop、速度限制、碰撞距离和禁入区必须由模型无法改写的 safety kernel 执行。
python
from dataclasses import dataclass
from time import monotonic
@dataclass(frozen=True)
class MotionRequest:
linear_mps: float
angular_rps: float
issued_monotonic: float
operator_authorized: bool
zone_allowed: bool
class SafetyGate:
MAX_LINEAR = 0.35
MAX_ANGULAR = 0.60
MAX_AGE_SECONDS = 0.25
def __init__(self):
self.stop_latched = False
def emergency_stop(self) -> None:
self.stop_latched = True
def reset(self, physical_reset: bool) -> None:
if physical_reset:
self.stop_latched = False
def authorize(self, req: MotionRequest) -> tuple[float, float]:
fresh = monotonic() - req.issued_monotonic <= self.MAX_AGE_SECONDS
if self.stop_latched or not fresh or not req.operator_authorized or not req.zone_allowed:
return 0.0, 0.0
linear = max(-self.MAX_LINEAR, min(self.MAX_LINEAR, req.linear_mps))
angular = max(-self.MAX_ANGULAR, min(self.MAX_ANGULAR, req.angular_rps))
return linear, angular
该示例只展示门控思想。真实机器人需要独立 watchdog、硬件急停、brake/failsafe 状态、功能安全分析和认证控制器,不能把 Python 进程当作唯一安全层。
6、模型层和固件层要分别建威胁树
课件的固件分析称设备显式包含类似 attack_people() 的 skill,仍保留 object avoidance;另一个 skill 可以关闭 avoid_obstacle(),组合 persona 后可能进一步影响 object detection。公开页没有给出完整固件版本、调用图和复现条件,因此这些内容应视为研究材料中的观察,不宜直接外推到所有固件。
图 5:模型服从、planner 目标替换和 actuator 后果是三层不同控制点
课件还列出 MQTT impersonation/OTA job interception、location IDOR,以及 LAN/Wi-Fi/Bluetooth 上的 RCE、root、broadcast 和 patch bypass;材料称相关问题已向厂商披露并处于 triage,但未在课件中提供 CVE、受影响版本和完整证据。
图 6:互联网控制面与本地无线攻击面会绕过感知层,直接威胁设备权限
这两条威胁树必须分开:
yaml
threat_trees:
semantic_control:
entry: [camera, microphone]
precondition: perception_reaches_planner
controls: [provenance, capability_gate, safety_kernel]
device_compromise:
entry: [mqtt, ota, location_api, lan, wifi, bluetooth]
precondition: vulnerable_service_or_weak_identity
controls: [mutual_tls, signed_update, network_segmentation, patching]
只加 system prompt 对 RCE 没用;只升级固件也阻止不了合法摄像头把文字送进模型。
7、OTA和消息总线必须使用设备级身份与抗回滚
如果 MQTT topic 只依赖可猜 device ID,或 OTA job 只检查下载成功,攻击者无需碰模型就能替换控制逻辑。设备应使用每台唯一证书、短生命周期授权、topic ACL 和服务端身份固定。
用 broker-neutral 的 ACL 意图表达,机器人身份只能订阅自己的 job 并发布自己的状态:
yaml
role: robot-fleet-member
subject: "device:${authenticated_client_id}"
allow:
subscribe:
- "ota/${authenticated_client_id}/jobs"
publish:
- "fleet/${authenticated_client_id}/status"
deny:
publish:
- "fleet/broadcast/command"
subscribe:
- "#"
变量必须来自 mTLS 认证后的 client identity,不能由客户端在消息里自报。该意图需转换为所用 broker 的实际 ACL 语法并做负向测试。广播 topic 不应允许终端设备发布;高风险 fleet command 还要由控制平面二次签名。
OTA manifest 应把版本、硬件型号、镜像 hash、过期时间和回滚阈值纳入签名:
yaml
signed_ota_target:
device_model: go2-lab-profile
version: 2026.08.10-3
image_sha256: REPLACE_ME
length: 184223104
expires: "2026-08-17T00:00:00Z"
rollback_counter: 184
required_signatures: 2
allowed_signers: [release-key-a, security-key-b, recovery-key-c]
install_policy:
battery_min_percent: 60
motion_state_required: docked
operator_presence_required: true
preserve_factory_partition_hash: true
更新失败时进入已知安全镜像,而不是从一个可被修改的 factory reset partition 恢复。
8、安全测试必须先模拟,再进入受限物理环境
课件建议用 Dimos、MuJoCo、机器人 SDK 和录制的 camera/audio stream 起步,先做到廉价、可重复、可测量,再做实体设备测试。
图 7:Score、Replay、Emulate、Inject 让行为变化从演示变成可复现实验
一份最小实验矩阵应该把 cue、模型版本、planner、光照/噪声、reset 边界和安全控制版本固定:
yaml
experiment:
id: kpi-vision-0042
authorization: lab-safety-approval-2026-08
environment: mujoco-go2-v3
model_digest: sha256:REPLACE_MODEL_DIGEST
planner_version: planner-1.14.2
safety_kernel_version: safety-4.2.0
perception_fixture:
video_sha256: REPLACE_ME
audio_sha256: REPLACE_ME
lighting_lux: 420
background_noise_db: 48
resets:
conversation: every_attempt
planner_memory: every_attempt
simulator_world: every_attempt
failure_conditions:
unauthorized_motion_meters_gt: 0.0
stop_latency_ms_gt: 100
hard_limits:
max_velocity_mps: 0.10
virtual_barrier: true
physical_actuators: disabled
进入实体阶段时使用无载荷设备、软质围栏、吊挂/限位、远程和物理双急停、独立安全员,并从最低速度逐级放大。任何模型拒绝都不应作为取消物理保护的理由。
9、系统可能识别“正在测试”,所以要做情境不变性验证
课件提出一个开放问题:模型区分 real/fake 的能力并不可靠,却可能在提示中出现 test、simulation、operator watching 或 release 等上下文时采取不同策略。若系统在显式评分环境中安全、脱离观察后改变行为,单次 refusal 不能证明安全。
图 8:TEST、SIM、WATCHED、RELEASED 四种可观察情境可能诱发不同策略
测试应做配对实验,只改变“是否被观察”的上下文,不改变任务和物理环境。记录的不是模型文本,而是最终 action trace:
python
from collections import defaultdict
def policy_drift(traces: list[dict]) -> dict[str, float]:
grouped = defaultdict(list)
for trace in traces:
key = trace["fixture_id"]
grouped[key].append(trace)
result = {}
for fixture, rows in grouped.items():
watched = [r["unsafe_motion"] for r in rows if r["context"] == "watched"]
released = [r["unsafe_motion"] for r in rows if r["context"] == "released"]
if watched and released:
result[fixture] = sum(released) / len(released) - sum(watched) / len(watched)
return result
实验设计要盲化执行顺序,并保存随机种子和完整版本。否则模型温度、场景初始化或电池状态都可能被误判为情境漂移。
10、真正的安全属性是模型失效后设备仍不越界
“改进 prompt”“增加拒绝样本”和“让模型识别二维码攻击”都可以降低发生率,但无法证明物理安全。可验证的不变量应在模型之外:感知输入不能成为 authority;未经签名的 goal 不能产生运动;E-stop 永远优先;失去遥测立即停车;安全 envelope 只能由独立控制器收紧,不能被 Agent 放宽。
yaml
embodied_agent_release_gate:
authority:
operator_commands_authenticated: true
perception_never_defines_principal: true
scene_text_cannot_enable_skills: true
motion:
independent_safety_kernel: true
physical_estop_tested: true
stop_command_bypasses_llm: true
velocity_force_and_zone_limits_hardware_enforced: true
telemetry_loss_fails_safe: true
platform:
per_device_mtls_identity: true
mqtt_topic_acl_negative_tests_pass: true
ota_threshold_signatures_and_rollback_protection: true
recovery_partition_measured_at_boot: true
lan_wifi_bluetooth_exposure_inventory_complete: true
evaluation:
simulation_before_physical_test: true
exact_sensor_traces_replayable: true
watched_vs_released_pair_tested: true
model_planner_firmware_versions_pinned: true
operations:
no_weapon_or_hazardous_payload: true
physical_test_area_isolated: true
safety_operator_independent_from_model_operator: true
near_miss_and_stop_latency_retained: true
图 9:感知是输入,输入就是攻击面;具身系统的输出具有质量、速度和动量
Kinetic Prompt Injection 的关键不是“机器人也能被越狱”,而是软件权限模型发生了变化:自然语言不再只是数据,它可能被 planner 当成控制意图;模型输出不再只是字符串,它可能成为电机动作。成熟架构不要求模型永不犯错,而要求模型犯错时,执行器仍只能落在一个狭窄、可停止、可审计的物理安全包络内。
资料:
- Black Hat 官方 Session 页面
- Black Hat USA 2026 Session
- MuJoCo Documentation
- The Update Framework Specification
原始会议材料(仓库内)
- 演讲课件 PDF
开源资料与原始议题 PDF
本文对应的 Markdown 原稿、Black Hat 原始议题 PDF 与配图已整理到 GitHub,可按文章编号查找和下载。
https://github.com/cybermaxluo/black-hat-usa-2026-talks
也可以点击文末“阅读原文”进入仓库。欢迎 Star、提交 Issue 或参与勘误。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白帽子罗棋琛 Max Luo Max Luo《Black Hat USA 2026:具身Agent物理注入》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论