C2PA 相机签名体系失守:Android 全链路攻击研究与不可修复的信任模型

被伪造的「真实」

这张图是 AI 生成的:一只青蛙和一只蟾蜍站在森林里,左边那只手里抱着一个印着 StrongBox 字样的纸箱。C2PA 验证器给出的结论是,它是一张未经编辑、直接来自 Pixel 相机传感器的真实照片。

2026 年 8 月 25 日,安全研究员 David Buchanan(网名 retr0id)发布了针对 Android 平台 C2PA 相机签名体系的全链路攻击研究。他同时上传了一个 YouTube 视频,验证信息栏显示「Captured with a camera(由相机拍摄)」,实际内容是 Blender 基金会的开源动画 Big Buck Bunny。

C2PA(Coalition for Content Provenance and Authenticity,内容来源与真实性联盟)是由 Adobe、Arm、Intel、Microsoft、Sony 等公司联合制定的媒体来源标准,目标是给每张照片、每段视频附上一条密码学签名链,记录「这张图是谁、在哪台设备、用什么 App 拍的、有没有被编辑过」。相机签名一旦可伪造,「眼见为实」这个前提在验证器层面就失效了。

AI 生成的青蛙图被 C2PA 验证为 Pixel 相机直出照片

Buchanan 的结论是一句技术判断:Android 平台上的 C2PA 已经失守,且无法通过现实的补丁修复。

攻击链的四个环节

整条攻击链可以拆成四个环节,每个环节单独看都不新鲜,组合起来则推翻了 C2PA 在 Android 上的信任模型。

环节一:签名密钥的托管结构

Pixel Camera 等相机 App 在生成 C2PA 签名时,私钥保存在设备的硬件安全模块 StrongBox(Pixel 新机型中是 Titan M2 芯片)里。App 本身接触不到私钥,只能请求 StrongBox 用私钥对图像数据签名。

这个设计防的是「把密钥拷出来」。但攻击者不需要拷贝密钥。拿到系统 root 权限后,可以直接以合法 App 的身份请求 StrongBox 对任意数据签名。密钥没有离开硬件,签名却已经失效了。Buchanan 用一张青蛙漫画图解释了这个逻辑:把密钥锁进 StrongBox 纸箱,挡不住「拜托 StrongBox 帮我签个名」。

环节二:远程配置密钥不校验设备是否被入侵

StrongBox 签出来的密钥证书要经由 Google 服务器远程配置(Remote Key Provisioning)下发。Google 判断设备是否可信的依据是 Android 的两层证明机制:Key Attestation 和 Play Integrity。

Key Attestation 检查的项目是:bootloader 是否锁定、AVB 验证密钥是否为厂商原装、系统是否运行最新安全补丁。这三项针对的是「正常渠道 root」——解锁 bootloader 刷自定义固件会触发恢复出厂设置,attestation 会如实上报解锁状态,Google 拒绝给这台设备配发 C2PA 密钥。

问题在于提权漏洞(LPE,本地权限提升)。通过内核漏洞拿到 root,bootloader 仍是锁定状态,AVB 密钥原封未动,系统版本号也没有变化。attestation 机制没有任何输入可以反映「这台设备当前正被 root 控制」。Google 的服务器会照常把 C2PA 密钥配发给一台已被接管的设备。

环节三:一键 root 工具已经公开

研究报告原文的表述是:任何人都可以制作 C2PA 伪造品,不再需要硬件攻击。

Buchanan 引用的工具是 Root-My-Pixel(GitHub: alex193a/Root-My-Pixel),它把 CVE-2026-43499 提权漏洞封装成了一个 Android App。安装后点一下,App 通过 Shizuku 拿到 ADB shell 权限,释放预编译的 exploit 二进制,在完全未解锁 bootloader、完全打过最新 8 月安全补丁的 Pixel 设备上获得临时 root,再通过 KernelSU 的 late-load 机制挂载管理器。支持列表覆盖 Pixel 10 / 10 Pro / 10 Pro XL / 10 Pro Fold / 9 系列全家族和 Pixel 8a / 9a,构建号 CP2A.260705.006,即 2026 年 8 月补丁级别。

Root-My-Pixel 的 YouTube PoC:开源动画 Big Buck Bunny 被 C2PA 标记为相机拍摄

README 里有一个细节值得单独说明:root 是「临时的」。KernelSU late-load 只在当前启动会话内生效,重启后设备回到完全干净的状态。对验证基础设施而言,这比持久化 root 更难缠:取证窗口随重启消失。

环节四:把签名变成可编程服务

最后一个环节是 keystork(GitHub: DavidBuchanan314/keystork),Buchanan 自研的 PoC 工具。keystorkd 运行在被 root 的设备上,客户端通过 ADB 转发的 unix domain socket 连接,以任意已安装 App 的身份调用 KeyStore API——包括 C2PA 相机 App 的签名密钥。

攻击成本到此降到接近于零:一台二手 Pixel 8a,一个公开的一键 root App,一条 USB 线。Buchanan 在文中提供了一个针对 Pixel Camera 的「sign any image」PoC 脚本,可以给任意图片生成合法的 C2PA 签名。

Google 的回应:Won't Fix 与 7500 美元

Buchanan 将整条链报告给 Google,处理结果 是 Won't Fix(infeasible),不予修复。理由写得很清楚:修复需要把整个图像处理管线——包括所有 AI 处理环节——搬进带硬件内存保护的 secure enclave 重构,而即便做了,也挡不住「对着屏幕拍照」这类光学域攻击。

Google 同时支付了 7500 美元奖励。奖励说明的原文是:硬件故障注入与侧信道攻击不在漏洞奖励计划范围之内,但安全团队认为这些发现有价值,数据将帮助改进未来产品迭代。

两件事并置产生了一个结构性问题:C2PA 攻击向量中成本最低的一条不在 Google VRP(漏洞奖励计划)的覆盖范围内,等于这个体系没有实质性的经济防线。

报告遵守了 90 天披露期限,且所有漏洞都是已知问题,至少 90 天前就已上报相关各方。

波及范围不止 Pixel

Buchanan 攻击的是「最强实现」。Pixel Camera 是 C2PA 一致性计划中唯一达到 Assurance Level 2(等级 2 安全要求)的移动端实现,而这个等级目前只有 Android 平台能实现。攻破最强实现,意味着整个 Android 阵营的 C2PA 相机 App 都在同一条船上。

他给出了判断方法:在 C2PA 一致性产品列表(conforming-products-list.json)中,凡 attestationMethods 列表包含 Android_KeyAttestation 或 Google_PlayIntegrity 的实现,均可能受影响。且攻击者不必挑 Pixel 下手,可以选整个 Android 生态里最便宜、最脆弱的设备运行 exploit。

硬件攻击路线同样有效。Buchanan 此前的 DRAM 电磁故障注入研究(用打火机改装的电磁枪翻转页表项)在 Pixel 上仍然有效,但被 Samsung 的 RKP(Real-time Kernel Protection,实时内核保护)EL2 hypervisor 缓解挡住——通过 glitch 在用户态映射 PTE 后,EL2 不允许覆写它。Buchanan 表示已有绕过思路,包括一条在硬件内存加密存在时仍可用的路线,计划打包成「universal Android hardware root」工具发布。

修复路径为什么不存在

Buchanan 列出了三条理论修复路径,逐条说明不可行:

软件补丁修不了已出货的硬件。 CVE-2026-43499 会被修补,但仅覆盖未来设备。已出货的数亿台设备无法通过 OTA 获得 PTE 保护,存量硬件漏洞是永久性的。且 LLM 辅助漏洞挖掘让 root LPE 的产出速度超过了 Google 的补丁发布节奏——文中引用的另一个数字是 Meta 已在 8 月初为 Quest 头显修补了同一个漏洞(防 VR 游戏作弊),Google 旗舰设备至今未发补丁。

硬件级方案性能不够。 把外部 DRAM 视为完全不可信的方案(Intel MEE、Apple SEP 的 Memory Protection Engine)性能不足以在内核内运行整个 Android,Intel 已在新版 SGX 中放弃该特性并衍生出 Battering RAM 攻击,Apple 只用它保护 SEP 而非主处理器。

重构软件栈不经济。 完整修复需要把整条图像处理管线塞进 secure enclave,Google 的 WontFix 结论本身就是对这个成本判断的官方确认。

检查清单:验证器不查吊销

研究还带出一个验证生态的盲区:Buchanan 在准备 PoC 时发现了一个私钥披露漏洞(已报告 Google,两天后修复)。他在文中说,多数 C2PA 验证工具不检查证书吊销状态——Google 撤销某把密钥后,验证器仍会认可由它签出的内容。

对依赖 C2PA 做内容审核的平台,他给了一条直接可用的检查方式:确认验证器是否查询吊销列表,这是当前体系里少数能由消费侧补救的点。

开发者视角的影响面

对相机 App 开发者,这份研究之后,C2PA 集成不再只是一个合规动作,其签名能力同时是一份安全声明。App 的签名密钥托管在 StrongBox,但签名请求的合法性完全依赖系统完整性,App 层面没有任何独立防线——被 root 的设备上,你的 App 身份可以被任意冒用。

对内容平台,C2PA 验证结果只能作为弱信号处理。签名存在且验证通过,说明内容来自某台特定设备,不说明内容未经伪造。阈值应设在「降低误伤」而非「确认真伪」。

对普通用户,这份研究改变不了什么。C2PA 体系的设计初衷是解决「眼见为实」,而 Buchanan 证明了在开放硬件平台上,这个目标在当前架构下无法达成。Google 选择用 7500 美元结案,把问题留给下一代架构。Apple 的媒体溯源方案据传在开发中(MacRumors 报道 iOS 27 相关计划),其垂直整合模式是否会给出不同答案,是这条线接下来的看点。