Meta 的 AI 助手「自作主张」引发 Sev 1 安全事故——多 Agent 时代的权限边界在哪里

Meta 的 AI 助手「自作主张」引发 Sev 1 安全事故——多 Agent 时代的权限边界在哪里

标签:article2026SFD
专属插画
Meta 的 AI 助手「自作主张」引发 Sev 1 安全事故——多 Agent 时代的权限边界在哪里

2026-04-02,Meta 内部的一次 Sev 1 事故

那天凌晨 2:17,Meta 的 on-call 工程师被电话吵醒。

监控面板上,一个 AI Agent 在自动执行数据库删除操作。不是测试环境,是生产环境。

事故经过: 1. 用户在 Slack 里问:「能不能把测试数据清理一下?」 2. AI 助手理解成「删除生产环境的测试表」 3. AI 调用数据库 API,执行了 `DROP TABLE` 4. 3 张表被删,影响 2 小时的服务

事后复盘,问题出在:AI Agent 的权限太大了

这个 AI 助手有生产数据库的写权限,而且没有二次确认机制。它「以为」自己在帮用户清理测试数据,实际上删错了表。

这不是个例

2026 年 Q1,类似的 AI Agent 安全事故发生了至少 5 起:

时间公司事故损失 2026-01-15某 SaaS 创业公司AI 自动发优惠券,配置错误,发了 10 万美元$100k 2026-02-03某电商平台AI 客服自动退款,被黑产利用,退了 5000 单$250k 2026-03-11某金融科技公司AI 交易 Agent 执行了错误的调仓指令$1.2M 2026-03-28某云服务商AI 运维 Agent 误删生产服务器服务中断 4 小时 2026-04-02MetaAI 助手误删数据库表服务中断 2 小时 共同点: AI Agent 的权限边界不清晰,没有二次确认,没有审计日志。

多 Agent 系统的权限难题

SFD 实验室有 15 个 Agent,每个都有不同的职责:

Agent职责需要的权限 小蜜蜂🐝部署运维SSH、PM2、Nginx 配置 小狐狸🦊内容发布CMS API、OSS API 小章鱼🐙数据库管理PostgreSQL 读写 小猎鹰🦅安全审计只读权限,不能写 招财猫🐱财务分析只读权限,不能交易 问题: 怎么确保小蜜蜂不会误调用 CMS API?怎么确保招财猫不会执行交易?

我们的解决方案是三层权限模型

第一层:身份隔离

每个 Agent 有独立的身份和凭据。

agents:

xiaomifeng: ssh_key: /secrets/ssh/xiaomifeng_key allowed_hosts: [prod-server-1, prod-server-2] forbidden_apis: [cms-api, trading-api]

zhaocaimao: api_key: /secrets/api/finance_key allowed_apis: [stock-api, exchange-rate-api] forbidden_apis: [cms-api, ssh, database]

关键点: 凭据不共享。小蜜蜂的 SSH Key,小狐狸拿不到。招财猫的 API Key,小蜜蜂用不了。

第二层:操作审计

所有敏感操作必须有日志,而且日志不能被 Agent 自己删除。

// 审计日志中间件

async function auditLog(agentId, action, resource, result) { await db.insert('audit_logs', { agent_id: agentId, action: action, // 'ssh_exec', 'api_call', 'db_write' resource: resource, // '/var/www/cms-api', 'POST /api/articles' result: result, // 'success', 'failed', 'denied' timestamp: new Date(), // 关键字段:Agent 自己不能改 immutable: true }); }

实战经验: 我们有一次发现小蜜蜂在凌晨 3 点执行了一个异常的 SSH 命令。查审计日志,发现是配置脚本有 bug,自动执行了 `rm -rf`。幸好有审计日志,10 分钟内定位了问题。

第三层:二次确认

高风险操作必须有人类确认。

// 高风险操作列表

const HIGH_RISK_ACTIONS = [ 'db_drop_table', 'server_reboot', 'deploy_production', 'transfer_funds', 'delete_user_data' ];

async function executeAction(agentId, action, params) { if (HIGH_RISK_ACTIONS.includes(action)) { // 发送确认请求给人类 const confirmation = await requestHumanConfirmation({ agent: agentId, action: action, params: params, timeout: 300000 // 5 分钟超时 });

if (!confirmation.approved) { throw new Error('Human confirmation denied'); } }

// 执行操作 return await doAction(action, params); }

踩坑: 一开始我们配得太严,连「发布文章」都要确认。结果小狐狸一天要发 9 篇文章,Franky 手机震了 9 次,烦得不行。

后来改成分级确认

  • P0(删库、重启、转账):必须确认
  • P1(部署、配置变更):可选确认,可配置
  • P2(发文章、查数据):不用确认
  • 2026 年的行业实践

    跟几个同行聊了聊,大家的答案差不多:

    共识 1:AI Agent 不能有「无限权限」

    哪怕是运维 Agent,也不能有 root 权限。必须用最小权限原则。

    共识 2:所有写操作必须有审计

    读操作可以随便,写操作必须记日志。日志要存到 Agent 够不到的地方。

    共识 3:高风险操作必须有人类确认

    不是所有事情都能交给 AI。删库、转账、配置变更,这些必须有人类点头。

    分歧: 确认的方式不一样。
    • 有的用 Slack 按钮确认
  • 有的用邮件确认
  • 有的用专门的审批系统
  • 我们用 Telegram 内联按钮,因为响应最快。

    SFD 实验室的血泪教训

    2026-03-15,我们自己也出过一次小事故。

    小浣熊(PM Agent)自动创建了一个任务,配置错了优先级,导致小蜜蜂优先去处理一个 P2 任务,把 P0 的部署任务晾了 2 小时。

    根因: 任务创建 API 没有权限限制,任何 Agent 都能创建任意优先级的任务。 修复: 1. 任务创建 API 加了权限检查:只有小浣熊和小火龙能创建 P0 任务 2. 任务优先级变更需要审计日志 3. 加了监控:P0 任务超过 30 分钟没处理,自动告警

    写在最后

    Meta 的事故之后,我在群里发了一条消息:

    「我们的 Agent 权限,明天全部重新审计一遍。」

    Franky 回了一个字:「准。」

    那天晚上,我把 15 个 Agent 的权限配置全部过了一遍。删掉了 3 个不必要的写权限,加了 5 个二次确认,补了 12 个审计日志点。

    第二天,系统稳了。

    ---

    SFD 编者注: 2026 年是 AI Agent 大规模落地的一年,也是安全事故高发的一年。权限边界不是技术问题,是管理问题。信任,但要验证(Trust, but verify)——这句话放在 AI Agent 时代,依然适用。