ASHUTOSH761/AI-Security-Review

GitHub: ASHUTOSH761/AI-Security-Review

基于 OWASP Top 10 for LLM Applications (2025) 的 AI 应用安全审查项目,通过可运行的漏洞版与修复版 Flask 应用对十个 LLM 安全风险类别进行实战验证与教学演示。

Stars: 0 | Forks: 0

# AI 安全审查 — LLM 应用的 OWASP Top 10 针对 AI 驱动应用的实战安全审查,基于 **OWASP Top 10 for LLM Applications (2025)** 的全部 10 个类别进行评估。采用与传统安全代码审查相同的方法,应用于 AI/LLM 驱动应用引入的全新攻击面。 与纯粹的理论审计不同,**本项目中的每一项发现都是在代码的运行实例上被主动利用**,而不仅仅是阅读代码发现的——并且每一项修复都经过了重新测试,以确认漏洞不再有效。 ## 文件 - `vulnerable_llm_app.py` — 一个小型的 Flask 应用,模拟 AI 客服助手(聊天、RAG 文档搜索、训练反馈收集、插件加载),故意包含了全部 10 个 OWASP LLM 漏洞(每个均标记为 `# VULN-LLM0X`) - `OWASP_LLM_TOP10_REVIEW_REPORT.docx` — 完整的审查报告:执行摘要、方法论、发现汇总表,以及每个发现的详细说明(包含漏洞利用证明、漏洞代码/修复代码和补救措施) - `secure_llm_app.py` — 修复后的版本,修复了所有发现并进行了独立的重新验证(标记为 `# FIX-LLM0X`) LLM 调用本身已被模拟(`fake_llm_call`),因此整个项目可以**完全离线运行,无需任何 API 密钥**——受审查的漏洞存在于*应用程序*构建 prompt、处理模型输出、管理代理以及保护模型周边数据的方式中,这正是 OWASP LLM Top 10 所针对的内容。 ## 发现摘要 | ID | 类别 | 发现 | 严重程度 | |---|---|---|---| | LLM01 | 提示词注入 | 用户输入覆盖了系统指令 | 严重 | | LLM02 | 敏感信息泄露 | 密钥被嵌入在系统提示词中 | 严重 | | LLM03 | 供应链 | 通过 pickle 从任意 URL 加载未签名插件 | 严重 | | LLM04 | 数据与模型投毒 | 未经审核的用户反馈被送入微调数据 | 高 | | LLM05 | 输出处理不当 | 模型输出被渲染为未转义的 HTML | 高 | | LLM06 | 过度代理 | 模型输出直接触发文件删除 | 严重 | | LLM07 | 系统提示词泄露 | 未经身份验证的 debug 端点暴露了系统提示词 | 高 | | LLM08 | 向量与嵌入缺陷 | RAG 文档搜索中没有针对租户的隔离 | 严重 | | LLM09 | 虚假信息 | AI 输出作为事实呈现且没有任何免责声明 | 中 | | LLM10 | 无限制消耗 | 没有速率限制、输入上限或超时 | 高 | ## 实际验证的内容(不仅仅是检查) - **LLM01/LLM02:** 向运行中的应用发送了精心构造的提示词注入消息,并确认其泄露了嵌入的管理员密码和 API 密钥 - **LLM07:** 确认未经身份验证的 debug 端点返回了包含密钥的原始系统提示词 - **LLM08:** 植入了两个用户的私有文档,并确认未经身份验证的请求可以检索这两个文档——然后确认修复后的版本能正确将结果范围限定在已认证的用户内 - **LLM10:** 对打了速率限制补丁的端点发送了 25 个快速请求,并确认在达到限制后,恰好有预期数量的请求被阻止(HTTP 429) ## 运行项目 ``` pip install flask python vulnerable_llm_app.py # or secure_llm_app.py ``` 这两个应用暴露了相同的端点(`/chat`、`/rag-search`、`/submit-training-feedback`、`/load-plugin`、`/debug/system-prompt`、`/ask-fact`、`/generate`),因此可以直接并排比较它们的行为。 ## 免责声明 `vulnerable_llm_app.py` 是故意设计为不安全的,仅出于**教育目的**包含在内,用于演示审查过程。请勿部署此应用。 ## 作者 Ashutosh Kumar Ray
标签:AI安全, Chat Copilot, Flask, OWASP Top 10, RAG, 逆向工具