*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
*本文原创作者:davichi8282,本文属于FreeBuf原创奖励计划,未经许可禁止转载
0×00 概述
近期审计一个JAVA开源博客系统mblog2.5最新版,整体系统还是很安全的,漏洞较少,传统的问题像XSS系统使用全局过滤的方式进行实体化处理,上传问题使用白名单校验,越权方面限制的也比较死,本次审计主要在于发现安全问题,具体实现页面没有去搞,感兴趣的可以自己去具体实现。
0×01 审计思路
下载此源码解压之后发现40多M,比较大的一个源码了,如果遇到这样比较大的源码,可以使用一些辅助工具去手工审计比如Notepad++,可以快速定位位置和查询一些关键字去审计,比较快,但是这样去审计可能一些逻辑安全问题发现不了,但是有利就有弊,这只是代码审计常用方法之一了,具体是哪些关键字比如可以查看所有用户输入的地方,会不会结合一些危险函数去执行。比如XSS,可以全局搜索"request."关键字,结果如下:
我们以红框处举例,可以直接双击进入代码位置:
可以看到直接获取content参数做更新文章操作,这里看似有XSS风险,但是还不能确定,可能update的时候已经做了安全处理,这时候可以看此文件有没有import其他,回到顶部:
可以看到引入BaseController,这里可能含有一些全局基础处理相关的操作包括全局安全过滤等操作,跟踪。
可以看到BaseController.java文件含有全局过滤XSS机制,经跟踪发现是实体化操作,这么一来只要是import这个文件的地方基本不存在XSS问题了。
0×02 白盒审计
源码信息:mblog2.5
站点地址: https://gitee.com/szhirong/mblog
不安全的随机数生成(Fortify常扫出):
JAVA语言在生成URL或者一些需要加密密钥等情况下会需要使用随机数,随机数会分为统计学和密码学两种,统计学输出的数据易猜测,所以需要随机数生成的时候建议使用密码学PRNG,可以通过搜索random()函数判断;
代码位置:
\mblog\mblog-base\src\test\java\test\Keygen.java
此处引入 java.util.Random里的random()函数进行随机数生成输出,其结果易猜测,所以需要使用
java.security.SecureRandom提供的SecureRandom()函数代替生成随机数。
SSRF:
ssrf(服务器端请求伪造漏洞)即一般在服务器提供从远程服务器获取内容并返回给用户的时候容易发生,比如下载图片,远程获取图片信息等,审计的时候可以重点关注url请求相关的操作,比如常见的url.openStream(),url.openConnection()等函数。
代码位置:
\mblog\mblog-base\src\main\java\mblog\base\utils\ImageUtils.java
这里是根据URL远程下载的地方,但是未对传入的URL做任何过滤并且输出到os,所以存在SSRF问题,需要对传入的URL做白名单地址限制和禁止一些除了http,https以外的协议,比如ftp,gopher协议等。
0×03 其他
除了这些问题之外,其他的比如XXE,可以去看哪些解析xml接口,有没有禁止解析外部实体,反序列化漏洞可以重点看readObject()等函数反序列话时候有没有做限制过滤,或者可以直接看那些实现serializable接口的类里有没有重写readObject(),readUnshared()等方法,是否存在逻辑问题,这里审计的时候未发现反序列化相关问题。
0×04 总结
本次审计发现的问题并不多,信息泄露这些就不写了,主要是演示如何快速通过搜索危险函数,关键字等来进行审计的方法吧。
*本文原创作者:davichi8282,本文属于FreeBuf原创奖励计划,未经许可禁止转载