前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
返回 AI 情报前线
All News · 全部资讯4048
  • AWS将Superblocks vibe-coding工具嵌入企业私有云
  • Agent 内存架构实践:存什么、取什么、忘什么
  • MCP 服务暴露数据缺陷:AI agent 盲目信任虚假关系对
  • MCP 实战:为 PDF 工具集构建 Agent 接口
  • 自托管 AI agent:SQLite 低成本长期记忆架构
  • 多语言搜索引擎生产方案:Elasticsearch + pgvector 实战
  • 深度复盘:$12K AI 架构教训——多模型时代解偶之道
  • LLM 推理服务深度解析:Prefill、Decode、KV Cache 机制
  • 阿里Qwen 3.8连续编码16天,所有代码上线
  • 自修复 Agent:从错误检测到自动验证的完整闭环
  • GitHub评论可直接触发Copilot自动化
  • AI 编程工具在生产中遗留的隐患代码
  • README 文档成为 AI Agent 的隐蔽攻击面
  • AI 助手生成的 Pydantic v1 代码为何在 v2 中失效
  • OWASP Agent 安全框架:从 LLM 风险到自主 AI 系统
  • MCP 工具描述字符串的隐蔽提示注入风险
  • AI 生成测试的覆盖率陷阱:可执行≠有效
  • LLM 工具调用的底层实现原理深析
  • 多视角 AI 审查:三个 Agent 独立评审发现不同问题的实践
  • AI 生成的类型注解如何骗过 mypy
  • AI 生成依赖表中的安全漏洞陷阱
  • AI 生成的数据库迁移如何致数据丢失
  • AI 代码的快乐路径偏差
  • npm 新 2FA 规则与 AI 工具权限治理
  • LLM 框架选型指南:LangChain vs CrewAI 的关键对比
  • 欧盟AI标识与透明度规则正式生效
  • Formula 1用Agent AI将数据管道接入从8周缩至40分钟
  • 有状态AI服务的会话感知负载均衡
  • MCP 协议驱动企业级 AI Agent 部署,性能显著领先
  • Python 自动化:用 AI 替代条件判断逻辑
  • Vercel Blob存储WAF全量发布可用
  • Agent-Flow-Canvas:无后端可视化 Agent 工作流编辑器
  • 反向依赖索引:响应式系统的 O(k) 性能优化
  • MCP 2026-07:从会话制到无状态协议架构
  • 调试 Vertex AI 图像生成管道的实战指南
  • AWS 上从零构建 AI Agent 的完整指南
  • 44 个生产级前端 UI/UX 实战技能集
  • 本地 LLM 双层密钥检测 Pre-commit Hook
  • AWS Bedrock 推出自动化规则优化能力
  • AI 工具使用中的敏感数据自动脱敏方案
  • 调试 CLAUDE.md 失效:用 /context 排查配置加载问题
  • 研究AI独立完成软件项目的规模上限
  • David Crawshaw的自动化版本管理prompt案例
  • Semantic Layer:企业 AI 的数据治理基础
  • 跨进程 AI Agent 记忆系统:200 行代码无需向量库
  • Chain-of-Draft:推理 token 减少 80% 的压缩方案
  • DeepSeek-V4-Flash在24GB显存PC上本地运行
  • Hugging Face模型库的trust_remote_code安全缺陷
  • Agent平台选型指南:三层架构解析
  • 微软开源Agent通用框架Orchard
  • SpecForge v0.3.0:统一投机解码堆栈发布
  • 已加载 51 / 4048
8.0
热点
AI SCORE
编程提效2026-08-04 02:39

AI 生成依赖表中的安全漏洞陷阱

dev.to · AI#依赖管理#安全#AI 陷阱
Editor brief · 编辑速览

AI 从过时训练数据生成 requirements.txt,导致依赖版本过旧带有已知漏洞。提出静态扫描方案检测隐形安全问题。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

AI 编程助手会根据训练数据编写 requirements.txt 中的依赖项,而不是查询实时的 PyPI 索引。它固定的版本通常是训练语料库中最常见的版本,而这些版本往往在模型训练截止日期前 12~24 个月处于主流。等到团队安装这些依赖时,其中一些版本可能已经存在公开记录的漏洞。包名是正确的,安装也能成功。在审计运行之前,不会出现任何警告。

这与 slopsquatting 是两类不同的问题。slopsquatting 指 AI 幻觉出一个 PyPI 上不存在的包名,或者这个包名已经被攻击者注册成 typosquat 包。安装失败时,slopsquatting 会立刻暴露;而依赖版本存在漏洞的问题,默认情况下始终不可见。

AI 如何选择包版本

AI 编程助手会根据训练数据生成 requirements.txt 中的依赖项,而不是查询实时的 PyPI 索引:它们写下的是训练过程中最常见的版本。这个版本通常流行于模型训练截止日期前 12~24 个月,并且可能存在截止日期之后才公开记录的已知漏洞。BrassCoders 的 AI 模式扫描器能够发现 phantom import,也就是 PyPI 上不存在的包;但真实存在却版本有漏洞的包可以正常安装,并通过所有 import 检查。

模型使用具有固定截止日期的代码快照进行训练。当你让模型搭建一个 Flask 应用时,它会写出 Flask==2.3.2,是因为这个版本在训练窗口期内的数千个 GitHub 仓库中出现过,而不是因为它今天早上查询了 PyPI。同样的规律也适用于 requests、cryptography 和 Pillow——任何拥有活跃 CVE 历史的依赖都可能成为候选对象。

对于频繁发布安全补丁的包,这一时间差尤其值得关注。cryptography 每年都会披露数次 CVE。Pillow 在其发布历史中已经累计出现超过 20 个 CVE。如果 AI 推荐 cryptography==41.0.3,而当前版本已经是 43.x,并且中间包含多项安全修复,那么你的环境从第一天起运行的就是已知存在漏洞的代码。

安装不会失败,import 可以正常执行,测试也能通过。正因如此,这类风险才如此容易被忽视。

真实的包、有漏洞的版本:一种独立威胁

BrassCoders 的 AI 模式扫描器能够发现 phantom import,也就是 PyPI 上不存在的包;但真实存在却版本有漏洞的包可以通过所有 import 检查,并顺利完成安装。只有显式运行依赖审计时,漏洞才会暴露出来。

slopsquatting 获得了大部分关注,因为它的攻击过程极具戏剧性:AI 编造了一个包名,攻击者在 PyPI 上注册这个名称并植入恶意代码,随后按照 AI 指令操作的开发者便会运行攻击载荷。由于涉及软件供应链,这类事件很容易成为引人注目的安全报道。

相比之下,有漏洞版本的问题更隐蔽,却会影响范围广得多的一类软件包。每一个有 CVE 历史的包都有可能中招。这个包真实存在于 PyPI,声誉良好;AI 固定的版本在模型接受训练时也是安全的,而标准开发流程不会暴露其中的时间差。

由 Python Packaging Authority 维护的 PyPI Advisory Database 会追踪特定软件包版本对应的已知漏洞。pip-audit 可以在几秒内完成查询,而你的 AI 助手对训练截止日期之后发布的 CVE 一无所知。

自动检查 AI 容易出错的地方

pip-audit 是 PyPA 官方的依赖审计工具,可以在几秒内将你的 requirements.txt 与 PyPI Advisory Database 和 GitHub Advisory Database 进行交叉核对。它基于实时漏洞索引而非训练数据运行,因此能够发现 AI 助手遗漏的问题。BrassCoders 与 pip-audit 分别覆盖不同层面,两者都应该加入 CI。

pip-audit 的安装和运行非常简单:

pip install pip-audit
pip-audit

请在 pip install -r requirements.txt 之后运行它,以便扫描实际安装的内容。无需身份验证,也不需要 API key。发现任何问题时,pip-audit 都会以状态码 1 退出,因此配置 CI 构建失败非常简单。检查结果会显示 CVE ID、受影响版本、修复版本和严重性评分——你可以在一分钟内获得分类处理该问题所需的全部信息。

有一类问题不在 pip-audit 的覆盖范围内:团队自己编写的代码中存在的安全缺陷。硬编码凭据、不安全的 subprocess 调用、SQL 注入模式——这些都属于存在于你自己模块内部的代码层风险。这正是 BrassCoders 发挥作用的地方。

BrassCoders 在依赖审计体系中的位置

BrassCoders 在 CI 中运行,负责发现你所编写软件包中的代码层安全缺陷,包括 SQL 注入、硬编码凭据和不安全的 subprocess 调用。pip-audit 则针对依赖清单运行,发现所导入软件包中的已知漏洞。两者应该出现在同一条 CI pipeline 中。

BrassCoders 会对源代码运行 12 个静态分析扫描器:Bandit、Pylint、Pyre/Pysa、Semgrep、ast-grep、detect-secrets,以及 6 个自定义检测器。在一个可复现的语料库中,AI-coder bug benchmark 显示,BrassCoders 能够发现 12 个 AI 生成 bug 中的 11 个,而 Bandit 只能发现 12 个中的 6 个。这些检测覆盖的是你的代码,而不是依赖清单。

这 6 个自定义检测器进一步覆盖了 secret 模式、PII/隐私风险、AI 生成的 phantom import、性能反模式、内容审核风险,以及 JavaScript/TypeScript。它们与上游扫描器在同一台本地机器上运行,OSS core 不会发起任何出站网络请求。

OSS core 免费提供,采用 Apache 2.0 许可证,可以通过以下方式安装:

pip install brasscoders
brasscoders scan .

BrassCoders Paid 的价格为每位开发者每月 12 美元,它增加了一轮 AI 驱动的增强处理,能够对检查结果去重,并按照结果与具体项目的相关性排序。它只会把已经脱敏的检查结果和项目签名发送到 gateway,绝不会发送原始源代码。

将这两个工具放在同一个 CI job 中。pip-audit 负责发现 AI 固定的、已经过时且存在漏洞的依赖;BrassCoders 负责发现 AI 写入 route handler 的 SQL 注入问题。两者无法互相替代。

运行 pip install brasscoders。在 pip install -r requirements.txt 之后立即加入 pip-audit。两者结合,便能同时覆盖代码层 bug 和依赖层 CVE。

如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
AI 生成的类型注解如何骗过 mypy
下一篇
AI 生成的数据库迁移如何致数据丢失