vlambda博客
学习文章列表

【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析




漏洞信息


IBM WebSphere Portal是一种用于构建和管理 Web 门户的企业软件,提供对Web内容和应用程序的访问,同时为用户提供个性化体验。IBM WebSphere Portal是WebSphere应用程序软件的一个组件。


近日网上爆出IBM WebSphere Portal 9及可能更新的版本存在多个SSRF和RCE漏洞。未授权用户可利用SSRF访问内网URL资源,认证后用户可以实现RCE。




调试环境


搭建IBM WebSphere Portal分析环境确实太费劲了【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析。。。直接docker拉取环境并启动服务:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


进入容器,找到启动脚本位于`/opt/IBM/WebSphere/AppServer/bin/startServer.sh`,取消`WAS_DEBUG`注释:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


重启启动容器成功打开远程调试端口:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


但是发现当端口`30015`端口启动后,远程调试端口`7777`将会关闭,经过分析发现`IBM Websphere Portal`的启动模式比较独特,`startServer.sh`启动的Java进程并不是最终的进程,它会首先启动一个Script,启动完毕后退出导致`7777`端口关闭,为了方便调试,这里想了个“笨办法“,先拷贝`java`运行进程命令,然后手动`kill`该进程,加入调试信息后,再手动启动新的Java进程,最终成功解决了远程调试问题:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析




未授权SSRF漏洞


存在多次SSRF漏洞,这里以其中的一个触发点为例。定位`WebSphere/wp_profile/installedApps/dockerCell/Quickr_Document_Picker.ear/qkr.docpicker.widgets.war`,这里定义的URL规则如下:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


找到一个`Servlet`:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


在`com.ibm.lotus.quickr.ecm.servlet.AjaxProxy#doGet`打下断点,构造请求访问,成功触发断点:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


进入`getUrl`函数:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


按照上面函数的处理方式,重新构造请求:


http://***:30015/docpicker/internal_proxy/http/IP/test


最终通过`getConnection`触发HTTP请求,导致SSRF漏洞:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


接口访问无需认证,但是限制为HTTP GET或者HEAD请求。完整SSRF触发点梳理如下:


GET full read SSRF:
/docpicker/internal_proxy/https/example.com/docpicker/internal_proxy/http/example.com/docpicker/internal_proxy/https/127.0.0.1:9043/ibm/console/docpicker/internal_proxy/http/127.0.0.1:9100/aa
Redirect chain - turning "bad" SSRF to "good" SSRF
/docpicker/common_proxy/http/www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg247798.html?Logout&RedirectTo=http://example.com/wps/proxy/http/www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg247798.html?Logout&RedirectTo=http://example.com/wps/myproxy/http/www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg247798.html?Logout&RedirectTo=http://example.com/wps/common_proxy/http/www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg247798.html?Logout&RedirectTo=http://example.com/wps/cmis_proxy/http/www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg247798.html?Logout&RedirectTo=http://example.com/wps/contenthandler/!ut/p/digest!8skKFbWr_TwcZcvoc9Dn3g/?uri=http://www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg247798.html?Logout&RedirectTo=http://example.com
Arbitrary HTTP method + body:
/wps/PA_WCM_Authoring_UI/proxy/http/example.com/wps/PA_WCM_Authoring_UI/proxy/https/example.com




从路径穿越到RCE


用户登录后,在`Script Application`处:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


可以上传自定义样式的zip压缩包:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


通过功能点很容易找到漏洞,下面从代码审计角度分析下导致漏洞的原因。经过分析对比,发现上传处理模块的代码位于`/opt/IBM/WebSphere/wp_profile/installedApps/dockerCell/wps.ear`:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


`uploadForm_InputPage_NextAction`位于`_ScriptImport`,此时action取值为`uploadFormSubmitForm`,进入`com.bowstreet.webapp.engine#processAction`:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


继续往下走:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


上传的zip文件将缓存在`/opt/IBM/WebSphere/wp_profile/installedApps/dockerCell/wp.scriptportlet.importexport.ear/wp.sp.importexpor.war/WEB-INF/upload/`目录下,往下将调用`parseZip`来解压zip压缩包:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


可以构建一个特殊的zip压缩包,网上一般建议都是使用`Evilarc`这个开源项目来生成恶意压缩包,因为这里是zip压缩方式,所以我们可以采用更加简单的方式,利用二进制编辑器修改zip文件名称,`../../`替换文件名称,保证长度一致即可。


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


将生成的新zip文件上传,最终通过`extractFile`函数解压文件:


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


【最新漏洞预警】IBM WebSphere Portal 多个未授权SSRF&RCE漏洞深入分析


路径穿越可以将文件保存到任意位置,但是在解压前在`unzipFile`函数中会检查压缩包里文件的类型:



虽然无法直接上传一些恶意后门,但是我们仍然可以写入一些自启动脚本,实现系统重启后RCE,具体过程这里不过多赘述,有兴趣的小伙伴请自行研究。




参考


https://blog.assetnote.io/2021/12/25/advisory-websphere-portal/

https://github.com/ptoomey3/evilarc



由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。



点关注,不迷路!