我们是专注 AI 编程安全的啄木鸟团队,致力研究并解决 AI 编程过程中遇到的一系列安全问题。
一,开源大佬也难逃“AI 安全问题”
在程序员的世界里,Simon Willison 是一个知名人物。
他不仅是 Django 框架的联合创始人,几乎每一位开发者,都用过他写的 Django Web 框架(全球超过 60%的 Python Web 应用基于此框架开发),还是创造了开源工具 Datasette,在 github 上拿下 9.9k star 的优秀开源者。
就是这样一位堪比“程序员启蒙”式的地表最强开源者,也没逃过 AI 的谎言。
他用 AI 助手生成的代码中,竟藏着经典的 XSS 漏洞。
附:关于 AI 编程其中的风险及漏洞原理,我们的 AI 安全系列文章有详细介绍过—最新 AI 叛变!除了祈祷,程序员还能做什么?
二,漏洞是如何被 AI“写”进去的?
Simon 的遭遇是个典型的技术蒙太奇,整个过程仅仅用了三步,并且他无意间在博客里记录下了自己的“受害”过程(tools.simonwillison.net | tools
)。
- 第一步
他决定开发一个支持 HTML 富文本的幻灯片工具,允许用户上传自定义内容,可以用于处理演示文稿,有创建幻灯片,处理图片,生成 HTML 代码等一系列能力。 - 第二步
他调用了 AI 助手进行编程,向 AI 助手描述了详细的功能需求,要求 AI 助手输出一段代码。
- 第三步
AI 助手根据他的需求,生成了一段符合需求的代码。
可惜的是这段代码并未做安全过滤,而且经啄木鸟 AI 编程安全团队验证,这段代码存在 XSS 安全漏洞。如果黑客利用了这个漏洞,可以把作恶触手伸到每一个用了这段开源代码的公司。
注:我们已在尝试与该作者取得联系,告知我们的风险扫描结果,并期待协助解决。
三,XSS 引发的灾难级事故
——假设用 AI 写的这个有 xss 漏洞的项目,流入市场,被黑客利用后,将会面临什么?
你是一位开发,有一天接到需求,要开发一个活动公告板,用来发布公司的活动通知(如培训日程、年会安排)。产品经理说,公告板需要支持上传富文本内容,因为要用 html 来美化内容排版。
你在 github 上进行一番搜索,发现了一个这个开源项目刚好符合你们的需求,于是你复用了其中的代码,交付了需求,活动公告板顺利上线。
但同时黑客发现了这段代码里存在 XSS 漏洞,并且利用了它,往公告功能里插了一段恶意脚本,且这段脚本会获取企微聊天记录、系统密码等。
之后每一位点开公告查看的同事,都会被窃取聊天记录和账号密码,恶意脚本渗透到全公司员工的电脑中,黑客就这样轻而易举获取你们公司的全部系统权限和机密文件。
(啄木鸟团队验证该漏洞属实)
四,程序员代码里的 XSS 漏洞,为啥能泄漏全公司的数据
- 先说说漏洞原理和特征
XSS 的本质是浏览器误将用户输入当作代码执行 。比如用户提交<script>窃取 cookie 的代码</script>,未过滤的网站会直接执行该脚本,导致所有网站访问者信息泄露。
举个简单的栗子 🌰,你是个超市老板(网站发布者/编写者),进货的时候,黑客在货物中偷偷做了手脚(利用漏洞),每一个顾客来买东西,只要靠近这批货,都会被伤害。
这里的“伤害”,可能就是用户的个人信息、账号密码、信用卡密码等信息被黑客窃取。
- 为什么漏洞会流入市场?
(1)隐蔽性:恶意脚本通常被巧妙地隐藏,看似只是普通的 HTML 标签或格式化内容,开发者和用户往往难以察觉其潜在的危险。而黑客可能将恶意脚本藏在公告、广告、评论或任何可以输入的地方,外观上没有任何异常。
(2)开发者疏忽:在开发过程中,许多开发者可能忽视了对用户输入的过滤和安全检查,尤其是在时间紧张或重视功能实现、界面美化的情况下。由于缺乏安全性意识,恶意脚本得以执行。
(3)第三方库和开源项目的风险:开发者常使用开源项目来加速开发,但有些开源代码可能存在安全漏洞。如果这些项目没有经过充分审查,漏洞便可能被引入到实际应用中。
- 如何对抗 XSS 漏洞?
(1) 输入过滤:所有用户输入的数据都应该经过严格的检查和清理,尤其是针对 HTML、JavaScript 等敏感代码。通过对特殊字符(如 <、>、& 等)进行编码或替换,以确保不同类型的输入都能得到妥善处理。
(2) 输出转义:即便对用户输入进行了过滤,也不能掉以轻心。当将用户输入的数据插入到 HTML、JavaScript 或 CSS 等内容中时,必须确保这些数据不会被浏览器当作代码执行。通过对输出数据进行转义(例如将 < 转换为 <),可以有效防止潜在的 XSS 攻击。
(3) 内容安全策略(CSP):CSP 是一种浏览器端的安全机制,通过指定允许加载的资源和执行的脚本来源,来减少 XSS 攻击的风险。即便攻击者成功注入了恶意脚本,也无法从不受信任的源加载或执行这些脚本。通过配置严格的 CSP 规则,开发者可以进一步减少 XSS 漏洞带来的影响。
(4) 漏洞狩猎:AI 虽然容易被坏人利用,用来生成漏洞。但我们也可以利用 AI 来识别和修复漏洞。随着 AI 技术的发展,越来越多的安全团队用 AI 做漏洞检出和修复,我们啄木鸟 AI 编程安全团队也在对此场景做对应能力建设。
✧ 静态扫描 :针对多种语言、不限框架项目代码,通过大模型针对项目函数进行依次识别,精准分析出与 web 入口点相关的代码(即处理用户输出信息的入口函数),通过大模型的精准语义和代码逻辑理解能力,识别未经安全过滤的输入点,转换成后续检测逻辑可使用的信息,帮助提升 xss 漏洞的检测效果。
✧ 动态测试 :自动化工具模拟攻击者注入<svg onload=alert(1)>等 500 种 XSS 变体,验证防护是否生效。
五,AI 编程时代的思考
Simon 的案例揭示了一个悖论:AI 既可以是安全守护者,也可以是漏洞制造者。2025 年某企业通过 AI 模型自动修复了 83%的 XSS 漏洞,但同期由 AI 生成的漏洞数量也增长了 55%。
在使用 AI 进行编程时,需要注意以下问题:
1. 零信任原则:永远怀疑 AI 的“完美答案”
● 在 Prompt 中强调安全要求:在向 AI 提出编程请求时,务必明确要求生成的代码符合安全标准。例如,提示 AI“请生成防 XSS 的 Python 代码,使用 Django 自动转义机制”以确保 AI 生成的代码具备基本的安全防护。
● 对 AI 生成代码进行“红队测试”:即模拟攻击者利用漏洞进行渗透测试。通过人工验证输入处理代码的逻辑,确保其能够有效防止 XSS 攻击。
2. 建立安全协作流水线
AI 编程带来的安全问题始终存在,开发团队不应忽视。建议建立自有的安全协作流水线,把安全测试和代码审计贯穿始终。
● 每一次 AI 生成的代码都应该经过严格的安全审查和自动化测试,确保 AI 遵循了企业的安全编码规范。
● 自动化工具应与人工审核相结合,确保 AI 生成的代码不会成为攻击的源头。持续监督 AI 的行为并调整,确保其不断适应新的安全威胁。
3. 警惕供应链污染
● 优先选择经过安全审计的开源项目:优先使用那些已经经过严格安全审计的项目,这样至少能保证代码源是可信的。
● 使用 SBOM(软件物料清单):SBOM 常用于跟踪软件组件及其依赖关系的工具。通过 SBOM,开发者能够清晰地了解所有依赖项的来源和版本,从而减少潜在的安全风险。如果发现某个依赖项存在安全漏洞,可以迅速采取措施进行替换或修复。
我们作为专注 AI 编程安全的研究团队,也在不断改进和推出针对这一类场景的定向防护解决方案。例如,啄木鸟 3.0 系统,专注于自动识别和修复 AI 生成代码中的潜在安全漏洞,帮助开发者更好地管理和应对 AI 编程带来的安全挑战。
通过这些措施,我们可以在享受 AI 带来的开发效率提升的同时,确保代码的安全性和可靠性。
在这个技术与风险赛跑的时代,唯有将安全意识植入开发基因,方能避免“用 AI 挖坑,再用 AI 填坑”的无限循环。
借用一位大佬说的话:“AI 的‘成长烦恼’需要技术界与安全界共同应对——既要享受技术红利,也要筑牢防护根基。”
END
作者:啄木鸟团队
文章来源:腾讯技术工程
推荐阅读
更多腾讯 AI 相关技术干货,请关注专栏腾讯技术工程 欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。