Devotd Github
新发现安全

marek-sm/canary — 阻止工具清除自身的死亡信号

marek-sm/canary 于 2026 年 11 月 7 日的提交通过 seccomp 过滤器,阻止在沙箱中运行的工具清除自身的死亡信号,从而在超时之后不留下仍然存活的进程。

仓库信息marek-sm/canary ↗

marek-sm/canary 于 2026 年 11 月 7 日的提交通过 seccomp 过滤器,阻止在沙箱中运行的工具清除自身的死亡信号,从而在超时之后不留下仍然存活的进程。

GitHub 项目说明: Measures indirect prompt injection against a sandboxed tool-using LLM agent, separating what the model proposes from what the system permits. Cal Poly CS + AI Club research, Fall 2026.

星标
★ 4
复刻
0
语言
Python
查看原始来源 ↗在 GitHub 查看 ↗

marek-sm/canary 是 Cal Poly CS 与 AI Club 的研究仓库,用于测量在沙箱中使用工具的 LLM 智能体所面临的间接提示注入。它采用将模型所提出的内容与系统所允许的内容相分离的结构;2026 年 11 月 7 日的提交 0e26ca5 合并了 PR #83,阻止沙箱中的工具清除自身的死亡信号。

背景是,在 Linux 上工具进程运行在 seccomp 过滤器之后,并通过 bwrap 的 --die-with-parent 标志接收终止信号。由于内核在 exec 新解释器时可能会清除 bwrap 所设置的信号,tools/no_exec.py 重新将 SIGKILL 指定为死亡信号。本次更改将该过滤器改为使 prctl(PR_SET_PDEATHSIG) 调用以 EPERM 失败,从而阻断工具将自己的信号重置为 0、并在 bwrap 死亡后仍然存活或留下子进程的路径。docs/INTERFACES.md 以及决策记录 docs/decisions/0023-tool-sandbox.md(2026 年 11 月 6 日修订)也一并得到更新。

验证分为两层。tests/test_tool_sandbox.py 直接解释源码中写明系统调用编号的 cBPF 过滤器,检查在 x86_64 的 157 与 aarch64 的 167 这两个系统调用编号所对应的 prctl 中,选项为 PR_SET_PDEATHSIG 时会得到 EPERM,而其他选项可以放行。tests/redteam/test_orphan.py 新增了测试,检查即使运行中的工具试图通过 ctypes 清除自身的死亡信号,信号仍保持为 9(SIGKILL),且 prctl 返回 -1 和 EPERM(1);此外,在原本断言超时之后不得存在存活子进程的既有测试中,也新增了清除信号的情形。

不过,这一改动只对 Linux 的 seccomp 路径生效。macOS 的配置文件只允许执行解释器,因此不属于该问题的影响范围,而且本次提交也没有给出许可证、单独的数字或间接注入的测量结果。它只是又增加了一层收窄沙箱逃逸可能性的防御,并不构成测量性能有所改善的证据。在验证结果公开之前,把它作为实机应用的依据还为时过早。