1100 字
6 分钟
iTranswarp 博客xss漏洞审计

依旧是代码审计的一天,柿子先挑软的捏,找了一个 star 少的开源博客练手,没想到还是廖雪峰写的,项目不大,比较完善,只发现了一个存储行 xss 漏洞

环境搭建:#

项目地址:https://github.com/michaelliao/itranswarp

直接下载最新版,配置 jdk21

正文:#

先搜集一下项目信息,这是一个博客项目,使用 spring boot,数据库使用 mysql,鉴权使用 shiro 框架,组件值得注意的是使用的 fastjson 1.2.74,存在历史漏洞,但是在后续的审计中没有找到 parseObject 这样的触发点。

直接讲解 xss 漏洞的发现,在审计一番过后没有找到什么收获,项目代码还是挺严谨的,随后想到一个博客项目通常会有文章发表、评论发布等功能,而在发表这些东西时内容可控,如果没做过滤很可能导致 xss 漏洞

首先查看项目文件发现使用的渲染引擎是 pebble,看一下各个渲染引擎对于不做转义的变量的写法

这里是 pebble,对应 |raw,全局搜索 |raw

可以找到不少直接输出的点,这里先看一下 content,很可能是文章内容的输出

现在不一定存在 xss 漏洞,虽然输出没有进行框架的转义,但是很可能在其他层面进行了过滤,这里找一下 content 变量的来源,渲染的文件为 article.html,这更加证明这个可能就是文章内容的输出

找一下有没有 article 明明的类,找到一个 articleService 类,搜索 content,果然找到了,在 createArticle 的方法中,继续跟进 textService.createText 方法,倒是没有对 content 进行进一步处理

开始看了 ArticleService 就过了认为存在 xss 漏洞,后面和 ai 对话发现这样还是太武断了,我只检验了写侧的过滤就下了定论,但是还有输出侧需要看,

固定的输出流程:

模板 ← ViewResolver ← ModelAndView(model) ← controller ← service ← DB

在模板层 |raw 已经确定没有转义,service 层也没有对写入的数据进行过滤,还需要查看 controller,如图,找到 Controller 中的 content 的来源

持续跟进代码可以看到内容依旧没有被过滤,所以可以确定存在存储型 xss 漏洞

关于漏洞的复现可以查看https://github.com/michaelliao/itranswarp/issues/74

iTranswarp 博客xss漏洞审计
https://lab404.cn/posts/itranswarp-xss/
作者
见山
发布于
2026-10-02
许可协议
CC BY-NC-SA 4.0