Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

0x00 漏洞详情

Confluence Server和Data Center产品在downloadallattachments资源中存在一个路径穿越漏洞。有权向页面和(或)博客添加附件,或创建新空间或个人空间,或者对空间具有“管理员”权限的远程***者可以利用此漏洞将文件写入任意位置,最终导致远程代码执行。

0x01 影响范围

Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

0x02 修复建议

升级Confluence Server或Data Center版本:
6.6.13
6.13.4
6.14.3
6.15.2
执行官方缓解措施:
停止Confluence编辑<install-directory>/conf/server.xml
如果你没有为 Confluence 配置 context path,则将以下代码添加至 <Host> 元素中:
<br/>&lt;Context path="/pages/downloadallattachments.action" docBase="" &gt; &lt;Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" /&gt; &lt;/Context&gt;

如果你为 Confluence 配置了 context path,比如说 /wiki,则需要将以下代码添加至 <Host> 元素中:
<br/>&lt;Context path="/wiki/pages/downloadallattachments.action" docBase="" &gt; &lt;Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" /&gt; &lt;/Context&gt;

0x03 环境搭建

wget https://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-6.13.0.zip<br/>unzip atlassian-confluence-6.13.0.zip<br/>cd atlassian-confluence-6.13.0/confluence/WEB-INF/classes<br/>
编辑confluence-init.properties
修改confluence.home
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398
启动:
cd atlassian-confluence-6.13.0/bin
./start-confluence.sh

0x04 漏洞复现

第一步上传文件:
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

第二步:打包下载(触发漏洞)
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

第三步:访问shell
http://192.168.56.248:8090/cmd13.jsp?comment=whoami
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

0x05 漏洞分析

使用idea 进行远程调试
首先需要在catalina.sh 添加如下代码
export JAVA_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8002'<br/>
在idea中配置:
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

此时可以进行远程调试了
`public String execute() throws Exception {
List<Attachment> latestAttachments = this.attachmentManager.getLatestVersionsOfAttachments(this.getPage());
Iterator var2 = latestAttachments.iterator();

    while(var2.hasNext()) {
        Attachment attachment = (Attachment)var2.next();
        File tmpFile = new File(this.getTempDirectoryForZipping(), attachment.getFileName());
        InputStream inputStream = this.attachmentManager.getAttachmentData(attachment);
        Throwable var6 = null;

        try {
            OutputStream fileOutputStream = new FileOutputStream(tmpFile);
            Throwable var8 = null;

            try {
                ByteStreams.copy(inputStream, fileOutputStream);
            } catch (Throwable var31) {
                var8 = var31;
                throw var31;
            } finally {
                if (fileOutputStream != null) {
                    if (var8 != null) {
                        try {
                            fileOutputStream.close();
                        } catch (Throwable var30) {
                            var8.addSuppressed(var30);
                        }
                    } else {
                        fileOutputStream.close();
                    }
                }

            }
        } catch (Throwable var33) {
            var6 = var33;
            throw var33;
        } finally {
            if (inputStream != null) {
                if (var6 != null) {
                    try {
                        inputStream.close();
                    } catch (Throwable var29) {
                        var6.addSuppressed(var29);
                    }
                } else {
                    inputStream.close();
                }
            }

        }
    }

    File zipFile = new File(this.getConfluenceTempDirectoryPath() + File.separator + this.getZipFilename() + ".zip");
    FileUtils.createZipFile(this.getTempDirectoryForZipping(), zipFile);
    FileUtils.deleteDir(this.getTempDirectoryForZipping());
    this.downloadPath = this.prepareDownloadPath(zipFile.getPath()) + "?contentType=application/zip";
    this.gateKeeper.addKey(this.prepareDownloadPath(zipFile.getPath()), this.getAuthenticatedUser());
    return "success";
}`

漏洞产生在:
ByteStreams.copy(inputStream, fileOutputStream);
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

跟踪fileOutputStream
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398
attachment有title参数:
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398
attachment.getFileName() 获取的值就是title
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

title 值来源
Confluence 目录穿越漏洞导致代码执行CVE-2019-3398

<br/>InputStream inStream = this.getStreamForEncoding(this.httpServletRequest);<br/>this.fileUploadManager.storeResource(new InputStreamAttachmentResource(inStream, this.filename, this.mimeType, this.size, (String)null, this.minorEdit), (ContentEntityObject)content);<br/>if (this.withEditorPlaceholder) {<br/>this.jsonResult.put("htmlForEditor", this.dragAndDropService.getAttachmentEditorHtml(this.filename, (ContentEntityObject)content, this.isVFMSupported, this.contentType));<br/>}<br/>
对filename 没有进行任何过滤

0x06 参考链接

https://confluence.atlassian.com/doc/confluence-security-advisory-2019-04-17-968660855.html
https://twitter.com/search?q=CVE-2019-3398&src=typd

https://www.atlassian.com/software/confluence/download-archives?_ga=2.89576473.387035393.1555556487-322510123.1555556487

https://confluence.atlassian.com/conf59/installing-confluence-on-linux-792499834.html

转载于:https://blog.51cto.com/13770310/2381555

### CVE-2019-3396 漏洞详情 CVE-2019-3396 是 Atlassian Confluence Server 和 Data Center 中的一个严重远程代码执行 (RCE) 漏洞。该漏洞存在于服务器端模板引擎中,攻击者可以通过精心构造的请求利用此漏洞,在受影响的应用程序上实现任意命令执行。 #### 影响范围 - **产品**: Atlassian Confluence Server 和 Data Center - **版本影响**: - 版本 5.6.0 到 5.10.14 - 版本 6.0.0 到 6.6.12 - 版本 6.7.0 到 6.15.8[^1] #### 安全风险评估 由于该漏洞允许未经身份验证的攻击者通过网络发送特制的数据包来触发 RCE 条件,因此被评定为高危级别。如果成功利用,则可能导致完全控制系统的能力,进而造成数据泄露或其他恶意活动。 ```bash # 示例:检测是否存在易受攻击版本的方法之一 curl -X GET "http://example.com/confluence/rest/api/serverInfo" ``` 上述命令可以用来获取目标系统的版本信息以便确认其是否位于已知脆弱范围内。 ### 解决方案与缓解措施 针对这一安全问题,官方已经发布了补丁更新: - 用户应尽快升级到最新稳定版以修复此漏洞。 - 对于无法立即升级的情况,建议采取临时性的防护策略,比如限制对 Confluence 的访问权限仅限内部可信 IP 地址;关闭不必要的功能模块和服务接口等。 此外,在 Vulfocus 平台上也可以找到关于如何设置实验环境以及测试该漏洞的具体指导文档和支持资源,帮助研究人员更好地理解和防范此类安全隐患。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值