Postcontent的FlaskBlog XSS漏洞CVE-2025-53631
Flask-Blog 是个基于Python Flask框架、layui前端框架和sqlite数据库的个人博客系统,支持前台和后台管理,允许用户自由使用和修改。
一、基本情况
Flask-Blog 是一个基于 Flask 框架开发的免费且开源博客引擎,该项目主要使用 Python 语言,结合 Flask 框架,实现了博客的基本功能。
Flask-Blog 遵守 MIT 开源协议,采用 Flask 作为后端框架、MongoDB 作为数据库,前端使用 Bootstrap 3、jQuery 和 Markdown 等技术。
栋科技漏洞库关注到Flask-Blog博客引擎受影响版本中存在一处安全漏洞,该安全漏洞已被追踪为CVE-2025-53631,CVSS 4.0评分5.3。
二、漏洞分析
CVE-2025-53631漏洞是Flask-Blog博客引擎在2.8.1及之前的版本中存在的漏洞,特定情况下可能被用来窃取敏感的用户数据或破坏网站。
攻击者可利用该漏洞在查看该帖子页面的任何用户的浏览器中执行JavaScript,在某些情况下可能被用来窃取敏感的用户数据或破坏网站。
该漏洞源于当向/createpost提交POST请求时,对postContent的不当净化,导致在帖子所反映的所有页面上执行任意JavaScript(XSS)。
这其中包括/、/POST/[ID]、/admin/posts和/user/[ID]。
postCardMacro.html模板第22行和dashboard.html模板第27行包含safe指令({{post[3]|safe}}),导致html符号不会像在其他变量中转义。
这可能能够从/createpost中的post编辑器呈现文本功能。
提交/createpost表单时,postContent变量在客户端被净化(例如<script>被转义为<;script>;),
但是可以通过拦截请求并用未转义的JavaScript代码替换postContent来修改这一点。
这将存储在数据库中,而不会在服务器端进行任何清理(在createPost.py的第42行读取:
postContent=request.form[“postContent”],并在数据库的第61行cursor.execute(插入到帖子中(…))中存储)。
此前也曾期列出了几个XSS漏洞,通过将app.jinja_options[“autoescape”]设置为True,使用此PR修复了这些漏洞。
尽管进行了此修复,但此漏洞仍然存在。
三、POC概念验证
1、以user身份登录
2、使用/createpost创建帖子,但拦截post请求
3、修改postContent表单数据参数以包含<script>警报('XSS')</script>
4、浏览到包含该帖子的任何页面(/、/post/[ID]、/admin/posts或/user/[ID]]),并观察JavaScript弹出窗口
四、影响范围
Flask-Blog <= 2.8.1
五、修复建议
未知
六、参考链接
