归档包 langchain-experimental 中 PythonAstREPLTool 的代码执行风险分析

一、 背景与提交过程

在近期的 AI 供应链安全研究中,我审计了 langchain 生态中的部分组件。在发现潜在风险后,我向国际漏洞平台提交了报告。


图:审核员以“项目已归档”为由判定超出范围(OOS),并鼓励提交论文。

审核员在回复中提到,该项目已于 5 月份归档,由于官方不会再进行修复,平台不受理此类漏洞。虽然平台判定超出范围,但作为安全研究,我认为有必要客观记录该组件的代码逻辑与实际风险现状。

二、 溯源过程与代码审计

1. 从一个重定向开始

在审计过程中,我发现主仓库中存在一些历史兼容代码。代码中定义了一个 DEPRECATED_LOOKUP 字典,将一些旧的工具类名(如 ShellInput、ShellTool)重定向到了新的命名空间。


图1:主仓库中的 DEPRECATED_LOOKUP 重定向代码。

顺着这种兼容性映射的思路,我开始尝试寻找其他被废弃或迁移的工具。

2. 404陷阱与独立仓库

当我尝试在主仓库中直接搜索 PythonAstREPLTool 时,返回的结果是 No matches found(找不到匹配项)。这说明该工具已经被物理隔离到了主仓库之外。


图2:主仓库搜索 PythonAstREPLTool 显示找不到匹配项。

为了进一步寻找,我搜索了 langchain_experimental。结果显示,主仓库中仅保留了部分对 Anthropic 等外部库的路径引用,原属于实验性质的组件被拆分到了独立的仓库中。


图3:搜索 langchain_experimental 发现其被隔离到独立仓库。

最终,我在 GitHub 上找到了 langchain-experimental 仓库。值得注意的是,该仓库页面明确提示:This repository was archived by the owner on May 27, 2026. It is now read-only.(该仓库已于 2026 年 5 月 27 日被所有者归档,现为只读状态)。


图4:langchain-experimental 仓库已被归档为只读状态。

三、 漏洞风险点分析

尽管该包已被归档,但从代码层面看,其潜在的安全隐患依然值得记录。

1. 脆弱的输入过滤器

在该仓库的 tool.py 文件中,存在一个 sanitize_input 函数。该函数用于处理输入,但它的过滤逻辑非常基础。


图5:脆弱的 sanitize_input 正则过滤逻辑。

代码使用了简单的正则表达式,仅去除了字符串开头和结尾的空格以及反引号。它没有对危险的 Python 内置函数或外部库调用进行实质性的拦截。如果大模型(LLM)通过提示词注入等方式输出了恶意代码,基础的正则很难起到防御作用。

2. 危险的动态执行

更核心的风险点在于 _run 方法。


图6:直接调用 exec 和 eval 的执行点。

在 _run 方法的实现中,代码直接将经过过滤的 module_and_str 传入了 exec(module_and_str, self.globals, self.locals) 函数。同时,在异常处理路径中还调用了 eval。

这种直接将大模型输出结果作为代码执行的设计,在当前 AI Agent 应用场景下,会带来代码执行的风险。如果 Agent 从不可信的外部文档或网页中读取到了恶意指令,就可能触发该工具执行任意代码。

四、 生态现状与数据


图7、图8、图9:pepy.tech 上的下载量统计数据。

虽然该包已经被官方归档,但根据 pepy.tech 的客观数据:

  • 该包历史总下载量达到了 56.9M(5680万次)。
  • 在最近 30 天内,该包依然有 1.6M(约 160 万次)的下载量。

这意味着,尽管项目已不再维护,仍有大量开发者在构建 AI 应用时下载并可能引用了此依赖。由于官方不会再更新此包,如果开发者继续沿用,将长期面临这一历史遗留的安全隐患。

五、 修复与缓解建议

  1. 官方层面:鉴于项目已归档,建议 LangChain 官方发布安全公告,提示用户检查依赖树,并引导迁移至 langchain-core。
  2. 开发者层面:建议排查业务代码,尽量减少或停止对 langchain-experimental 的依赖,避免在生产环境中使用具有直接动态执行逻辑的旧工具。
  3. 防御层面:在 CI/CD 流程中,可增加针对废弃包与危险执行方法(如 exec)的静态扫描规则,阻断类似风险的引入。

六、 总结

本报告旨在客观记录这一代码审计发现。虽然因为项目归档的原因,该问题未被漏洞平台受理,但其代码逻辑的设计与当前依然存在的下载量数据,客观反映了 AI 供应链中存在的一些历史遗留安全隐患。希望这篇分析能给使用相关组件的开发者提供参考。

免责声明:本文仅供安全研究与防御技术探讨,文中涉及的测试均在本地环境进行。请勿将文中技术用于非法攻击。