美文网首页
Apache Solr RCE漏洞 (CVE-2019-1240

Apache Solr RCE漏洞 (CVE-2019-1240

作者: AxisX | 来源:发表于2020-08-05 19:24 被阅读0次

    1. 漏洞详情

    Apache Solr的8.1.1和8.2.0版本的自带配置文件solr.in.sh中存在ENABLE_REMOTE_JMX_OPTS="true"选项。如果使用受影响版本中的默认solr.in.sh文件,那么将启用JMX监视并将其暴露在RMI_PORT上(默认值= 18983),并且无需进行任何身份验证。 如果防火墙中的入站流量打开了此端口,则具有Solr节点网络访问权限的任何人都将能够访问JMX,并且可以上传恶意代码在Solr服务器上执行。该漏洞不影响Windows系统的用户,仅影响部分版本的Linux用户。

    2. 复现环境

    solr8.2.0版本下载地址:https://archive.apache.org/dist/lucene/solr/8.2.0/

    wget https://archive.apache.org/dist/lucene/solr/8.2.0/solr-8.2.0.zip
    unzip solr-8.2.0.zip # 解压
    切入到bin文件夹
    ./solr start -force
    
    solr

    查询kali的ip,连接8983端口


    8983端口

    然后用nmap对ip地址下的端口进行探测。


    探测端口

    msfconsole进入msf,使用msf中的exploit/multi/misc/java_jmx_server模块可以成功连接。


    msf攻击

    可以看到msf攻击时,首先去连接ip,发送RMI头部,发现了JMXRMI的尾端,在18983端口,发送握手。这个是连接JMX的过程,后面是发送payload

    whireshark开启抓包,filter中输入tcp.port==18983对18983端口内容进行过滤。


    follow tcp stream

    对于此漏洞的检测,可以通过JMX流量特征来进行。


    流量特征

    具体脚本如下:

    # coding: utf-8
    from pocsuite.api.poc import POCBase, Output
    from pocsuite.api.poc import register
    import urlparse
    import re
    import socket
    import time
    
    
    class TestPOC(POCBase):
        vulID = '''pcmgr-'''
        version = '1'
        vulDate = '2019 00:00:00 GMT+0800 (China Standard Time)'
        author = 'pcmgr'
        createDate = '2020-7-30'
        updateDate = ' Jul 30 2020 15:37:23 GMT+0800 (China Standard Time)'
        references = ''''''
        name = '''Apache Solr RCE漏洞'''
        cve = 'CVE-2019-12409'
        appPowerLink = ''
        appName = 'Apache Solr'
        appVersion = '8.1.1&8.2.0'
        vulType = '命令执行'
        vulGrade = '高危'
        vulRepair = '''将solr.in.sh配置文件中的ENABLE_REMOTE_JMX_OPTS选项设置为false,然后重启Solr服务'''
        desc = '''Apache Solr 受影响版本中的默认solr.in.sh文件自动启用JMX监视并将其暴露在RMI_PORT上(默认值= 18983),并且无需进行任何身份验证。 如果防火墙中的入站流量打开了此端口,则具有Solr节点网络访问权限的任何人都将能够访问JMX,并且可以上传恶意代码在Solr服务器上执行。'''
        samples = ''''''''
    
        def _attack(self):
            return self._verify()
    
        def _verify(self):
            result = {}
            url_parsed=urlparse.urlparse(self.url)
    
            url_netloc=url_parsed.netloc
            url_element=url_netloc.split(":")
            dHOST = url_element[0]
            if len(url_element)>1:
                dport = int(url_element[1])
            else:
                dport=80 #默认端口为80
            timeout = 3
            delay = 1
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(timeout)
            try:
                sock.connect((dHOST, dport))
            except socket.timeout:
                return False, {'msg': 'connection timeout.'}
    
            s1 = '4a524d4900024b000000000000'
            s1_bytes = str(s1.decode('hex'))
            sock.send(s1_bytes)
            time.sleep(delay)
            res = sock.recv(1024)
            if re.search(b'N\x00', res):
                print('[+] handshake successfully!')
            s2 = '50aced00057722000000000000000000000000000000000000000000000000000244154dc9d4e63bdf7400066a6d78726d69'
            s2_bytes = str(s2.decode('hex'))
            sock.send(s2_bytes)
            time.sleep(delay)
            res = sock.recv(1024)
            if re.search(b'Q\xac\xed', res):
                print('[!!] vulberable')
                result['VerifyInfo'] = {}
                result['VerifyInfo']['URL'] = dHOST
                result['VerifyInfo']['PORT'] = dport
            return self.parse_output(result)
    
        def parse_output(self, result):
            # parse output
            output = Output(self)
            if result:
                output.success(result)
            else:
                output.fail('Internet nothing returned')
            return output
    
    
    register(TestPOC)
    

    修复方案
    该漏洞的修复方案是将solr.in.sh配置文件中的ENABLE_REMOTE_JMX_OPTS选项设置为false,然后重启Solr服务。

    3. JMX

    JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。WebLogic管理页面基于JMX开发,JBoss则基于JMX架构。

    JMX结构
    JMX的基础层主要是MBean,即被管理的资源。适配层为MBeanServer主要提供对资源的注册和管理。接入层提供远程访问的入口。
    基于JMX的攻击可以看https://mogwailabs.de/blog/2019/04/attacking-rmi-based-jmx-services/,后续可以再深入研究一下JMX的攻击。

    上面流量我写的是检测过程,包含攻击脚本的可以看如下的一些链接
    1.https://github.com/shadowsock5/Poc/blob/0d1e80b7edf6f17a6f8dad37c406186dd2efca92/Solr/Solr_CVE_2019_12409.py#L64

    2.https://github.com/jas502n/CVE-2019-12409

    相关文章

      网友评论

          本文标题:Apache Solr RCE漏洞 (CVE-2019-1240

          本文链接:https://www.haomeiwen.com/subject/uqjkrktx.html