CASE STUDY · 运行时取证
把 GitHub Copilot 放进 MITM 代理后,我看见了什么
一次从网络流量到源码的逆向调查,揭示 Copilot 如何拼装上下文、路由模型并保存可查询的会话记忆。
来源:Lighthouse AI · Rafael Pierre
I
案例背景
为什么先看流量源码说明应用能做什么,运行时流量说明它此刻实际做了什么。面对数百万行 VS Code 代码,Rafael Pierre 选择先观察请求,再让证据告诉自己该追问什么。这个顺序把一次好奇心驱动的逆向工程,变成了对 Copilot 上下文、记忆与模型路由的可验证调查。
起点Copilot credits 消耗加快,促使作者选择 VS Code 与 Copilot 作为 Electron 应用研究对象。
搭建用 mitmproxy 接管 HTTP/HTTPS 流量,配置 VS Code 代理,并处理陈旧 Extension Host 进程。
实验观察启动请求、Auto 模式路由、最近编辑上下文,并使用完全虚构的密钥测试边界。
验证检查 Chronicle 的 SQLite 数据库与开源写入路径,把网络观察与实现代码相互印证。
* * *
II
关键行动
从现象追到实现
先抓包,后读源码。先被动观察流量,让请求和响应暴露值得追问的问题,再回到源码确认或推翻观察。
原文
用假数据做受控实验。作者把虚构密钥放进 .env,再从无关的 pyproject.toml 触发补全;随后把假 GitHub token、AWS key 与数据库连接串发进聊天,避免暴露真实凭据。
沿写入路径确认因果。数据库 schema 只能说明字段存在,真正的证据来自 insert 路径:turn.user_message 原样绑定,代码中没有 redaction、sanitization、secret filtering 或 masking。
* * *
III
结果与证据
上下文如何越界表面模型用户打开一个编辑器,在当前文件里输入提示词,Copilot 把必要上下文交给某个模型,再返回建议。
实际系统用户尚未输入内容,Copilot 已完成身份与会话、配置策略、模型与能力发现等启动请求。Auto 模式先把提示词按代码生成、调试、推理和工具使用等意图评分,再据此选择模型。
跨文件
即使 .env 已禁用补全,其中最近编辑过的假密钥仍可能被另一个启用补全的文件触发并进入请求。recentEdits 的默认窗口最多覆盖 20 个文件、8 份编辑摘要,并在每处改动周围带 3 行上下文。
可查询
Chronicle 把历史会话放进本地可查询的 SQLite 存储,模型可以通过工具按需读取。它甚至会在 SQL 失败后检查 schema,再重新查询。
明文
源码与数据库共同确认 user_message 和 assistant_response 以明文写入,写入路径没有脱敏步骤。假 token 与连接串按输入内容保存。
* * *
IV
复盘启示
上下文正在成为产品
边界不是文件开关排除门禁与管理员控制的 Business/Enterprise repository policy 绑定;个人计划没有默认 .env 规则,也不读取当前工作区的 .gitignore。保护单个文件类型,并不能约束最近编辑上下文从别处被触发。
状态扩大责任面AI 编程工具正在成为有状态系统:工作区、最近编辑、对话、工具、历史和模型路由共同组成产品。每增加一种上下文,效用和可访问的开发者状态都会同时增加。
研究 harness模型能力只是产品的一层。更决定真实行为的是 harness 如何选择、压缩、缓存、持久化和跨边界传递上下文;构建 AI 产品时,应把这套数据路径当作首要架构与隐私问题。
* * *
编者评论
这篇文章,如何判断
阅读价值
文章最强的地方不是抓到了一个耸动 payload,而是把网络观察、受控假数据实验和源码写入路径连成了证据链。相比常见的隐私泛论,它具体说明了跨文件 recent edits 与本地长期记忆如何改变风险边界,因此值得 4/5。
保留意见
结论来自 2026 年 8 月的一套本地环境与 Auto 模式。它能证明这些路径在该配置中存在,却不能说明所有计划、企业策略、操作系统或未来版本都一致,也没有量化服务端保留与真实泄露事件。
可迁移启发
把同样的方法迁移到任何 AI 助手:先画出上下文来源与边界,再用虚构敏感数据做端到端追踪,最后沿存储和发送路径检查实际的脱敏门禁。安全评审对象应是完整 harness,而不只是模型 API。
原文摘录