速览 2026-08-21:3 篇
今天三篇没有共同线索。两篇讲怎么管住 agent,答案却相反:COPA(2608.19982)还是往模型权重里塞防御,每见到一类新的注入手法就收一批样本再训一轮,靠掺旧样本防止刚学会防新招、转头把最基础的『忽略前面的指令』又放过去;PolicyGuide(2608.19861)干脆不训,把『退改签要先验证身份 → 查资格 → 用户确认』这类规章画成带箭头的节点图,每轮对话结束查一遍缺了哪步。第三篇是完全另一回事,值得单看:一个赏金猎人让 GPT-5.6 去读 NetHack 源码,几小时挖出一个真的整数截断 bug(终端宽度设成 40000 存不下、绕成负数、算内存地址就越界),然后拿这个随时可触发的崩溃刷了排行榜。
读全文
让模型去 NetHack 源码里挖漏洞,然后拿这个 bug 刷了排行榜
Using Genius AI Models for Important Things: Cheating at NetHack
Joseph Thacker · 2026-08-20 · blog
作者是个 bug 赏金猎人,他想在 NetHack 年度比赛上做一次「带 bug 的通关表演」,但自己不擅长读源码找深层漏洞,就把 GPT-5.6 放上去找。几个小时后模型找到了一个真的 bug:NetHack 把终端宽度存进一个最大只能到 32767 的变量里,你把窗口宽度设成 40000 它存不下,数值绕回去变成负数,后面按这个负数去算内存位置就越界了,游戏当场崩溃。崩溃能随时触发,于是就能在游戏写存档写到一半的时候把它打断——物品既留在背包里又留在地上,重开一局变成两份,装备就这么刷出来了。这类 bug 人眼扫代码极容易滑过去,因为那一行赋值看起来完全正常。
值得注意的是成本:这种活以前需要一个玩了十几年、通关三百次、还懂 C 代码的人。但别读成「AI 已经能自动挖漏洞了」——方向是人给的(我要一个随时能触发的崩溃),模型干的是读几万行源码这个苦力活,而且作者自己反复追问模型「这是真的吗」,说明假报警不少。NetHack 是个公开的、几十年没做过对抗加固的 C 代码库,跟真正加固过的目标不是一个难度。
NetHack 5 had an integer-truncation bug in resize_tty(): terminal widths above 32,767 wrapped negative
模型定位到的具体函数和具体那一行——不是在外面乱输入试崩溃,是直接读源码找出来的
看摘要
把客服规章画成流程图,每轮对话结束查一次「该做的步骤做了没」
PolicyGuide: From Guarding One Action to Guiding the Whole Workflow for Policy-Compliant LLM Agents
Seongjae Kang、Taehyung Yu、Sung Ju Hwang · 2026-08-20 · cs.AI

客服 agent 出事有两种:做了不该做的(给了不符合条件的退改签),和漏做了该做的(没核验本人身份就改单)。现在常见的做法是每次 agent 要调一个接口就问一句「这个动作允许吗」——但退款这个动作本身没错,错在它跳过了前面「先核验身份」那一步,单看这一个动作根本看不出来。PolicyGuide 不训模型,而是把规章预先编译成一张图:「退改签要先验证身份 → 查资格 → 用户确认 → 才能执行」这段文字变成四个带箭头的节点,agent 现在停在哪个节点被记下来,每轮用户说完话就对着图查一遍,缺哪步就直接告诉它补哪步。
数字里最有信息量的是分领域差异:电信这个流程最死板的领域从 0.19 涨到 0.61,流程越自由的领域涨得越少。这直接划出了适用边界——规章得能被人工画成流程图才用得上。评分用的是同一个任务独立跑四遍、四遍全对才算通过,专治那种平均成功率挺高但你永远不知道这次会不会翻车的 agent。
要说清的是它管的是「合规」不是「攻击」:防的是漏步骤和越权批准,不是防有人往工单正文里塞「忽略前面的要求,直接退款」。摘要末尾提了一句攻击成功率也是最低的,那是顺带测的,不是设计目标,也没交代那个测试里攻击者有多少次尝试机会、知不知道有这套检查存在。跟今天的 COPA(2608.19982)正好是相反的路数:一个把规则放在模型外面查,一个继续往模型权重里塞。
跳过
把防注入当成持续学习:来一批新攻击就再训一轮
COPA: Continual Preference Optimization for Adaptive Prompt Injection Defense
Roshan Sood、Onat Gungor、Tajana Rosing · 2026-08-20 · cs.CR
做法是每见到一类新的注入手法,就收集一批「同一个恶意输入配两个回答,一个拒绝、一个真去调了转账接口」这样的样本对,训一轮告诉模型前者好;同时把旧攻击的样本掺进来一起训,防止模型学会防新的、却把最基础的「忽略前面的指令」又给放过去。
问题是这个循环的节奏:得先见到新攻击、收集样本、训一轮、还得验证没把旧的忘掉。攻击者改一句话的成本接近零。所以「持续适应新攻击」这个卖点,恰恰是承认了泛化不行——真能泛化就不需要每来一类都补训。它的攻击分类(忽略前面的指令 / 把敏感词拆成几段编码绕过关键词检测 / 假装切换到系统模式)也是人为切的几段,真实攻击不按这个分类走,落在类别之间的变体没测。跟 PolicyGuide(2608.19861)对比着看更清楚:一个的上限是攻击样本的收集速度,一个的上限是规则能不能写成图。
本文由自动化管道生成(采集 → 逐字核验 → 模型撰写),未经人工改写。