Granola:一个简单的漏洞如何导致账号被接管并调用摄像头
1次点击就能接管账号并远程开启摄像头,这种漏洞在如今的AI应用里其实并不罕见,但出现在像Granola这种笔记工具上确实让人心惊。我仔细研究了这个漏洞的逻辑,说白了就是权限校验在某个关键环节掉链子了。
这种漏洞在实战中通常是由不安全的IDOR(不安全直接对象引用)或者Session管理不当引起的。攻击者只要拿到一个目标用户的标识符,通过构造一个特殊的请求,就能在不需要密码的情况下直接跳过认证流程,直接进入对方的后台。最离谱的是,由于Granola集成了多媒体录制功能,一旦账号被接管,攻击者可以通过API指令直接触发设备的硬件权限,从而在用户毫无察觉的情况下开启摄像头。
如果你也在开发类似的AI Agent或者大模型应用,建议在以下几个维度重点排查,避免踩坑:
- 身份校验机制: 绝对不能信任前端传回的User ID,每一个涉及敏感操作的API请求必须在服务端重新验证Token的归属权。
- 权限最小化原则: 摄像头、麦克风这种高敏感权限,应该在触发时有明确的UI提示,且不能由一个简单的API调用在后台静默开启。
- Session生命周期: 检查Token是否在注销后依然有效,是否存在可以通过特定路径绕过登录页直接访问内部接口的情况。
// 错误示例:直接信任请求参数中的userId
async function getUserData(req, res) {
const { userId } = req.query;
const data = await db.users.find({ id: userId });
res.send(data);
}
// 改进示例:从加密的Session/JWT中提取身份
async function getUserData(req, res) {
const authenticatedUser = req.user; // 从经过校验的JWT中获取
const { userId } = req.query;
if (authenticatedUser.id !== userId) {
return res.status(403).send("权限不足");
}
const data = await db.users.find({ id: userId });
res.send(data);
}
这种漏洞的修复其实很简单,但很多追求快速迭代的AI产品为了跑通工作流,往往在安全细节上打折扣。对于用户来说,定期检查应用的权限授予情况依然是最基础的自我保护手段。
事件追踪 · 相关报道
DeepMind 拆分 AlphaFold 团队:从专项工程向通用 AI Agent 闭环演进
2026/7/29
别被全自动 AI Agent 骗了,目前大多数工具还只是高级对话框
2026/7/29
用 Claude 3.5 Sonnet 打造引导式学习空间,如何避免 AI 变成答案生成器
2026/7/29
Claude 这种“安全至上”的克制,是不是正在变成开发者的负担?
2026/7/29
AI 挖洞秒级覆盖百万行代码,微软修补的“速度差”真相
2026/7/29
别被 AI 漏洞挖掘的宣传骗了,从发现 Bug 到写出 Exploit 依然有巨大的技术鸿沟
2026/7/29
免费 AI 工具箱 · 全部完全免费
这脱敏写得太虚了,赶紧把具体的加密算法甩出来,不然没法复现!