🇰🇷 한글 설명
OpenSSL 3.0.x의 X.509 인증서 검증 과정에서 이름 제약 조건 확인 시 스택 버퍼 오버런이 발생합니다. 공격자가 악의적인 이메일 주소를 포함한 인증서를 통해 스택에 4바이트를 덮어써 서비스 거부(DoS) 또는 원격 코드 실행을 유발할 수 있습니다. OpenSSL 3.0.7에서 패치되었으며, 3.0.0~3.0.6 버전이 영향을 받습니다.
💡 쉬운 설명
인터넷 암호화(TLS)에 사용되는 OpenSSL 소프트웨어에서 특수하게 조작된 인증서를 통해 프로그램이 충돌하거나 해커가 시스템을 제어할 수 있는 취약점입니다. 악성 서버에 접속하거나 악성 클라이언트가 연결할 때 발동될 수 있습니다.
🇺🇸 원문 (English)
A buffer overrun can be triggered in X.509 certificate verification, specifically in name constraint checking. Note that this occurs after certificate chain signature verification and requires either a CA to have signed the malicious certificate or for the application to continue certificate verification despite failure to construct a path to a trusted issuer. An attacker can craft a malicious email address to overflow four attacker-controlled bytes on the stack. This buffer overflow could result in a crash (causing a denial of service) or potentially remote code execution. Many platforms implement stack overflow protections which would mitigate against the risk of remote code execution. The risk may be further mitigated based on stack layout for any given platform/compiler. Pre-announcements of CVE-2022-3602 described this issue as CRITICAL. Further analysis based on some of the mitigating factors described above have led this to be downgraded to HIGH. Users are still encouraged to upgrade to a new version as soon as possible. In a TLS client, this can be triggered by connecting to a malicious server. In a TLS server, this can be triggered if the server requests client authentication and a malicious client connects. Fixed in OpenSSL 3.0.7 (Affected 3.0.0,3.0.1,3.0.2,3.0.3,3.0.4,3.0.5,3.0.6).
📍 영향받는 시스템
OpenSSL 3.0.0 ~ 3.0.6 (1.x 버전은 영향 없음)
⚔️ 공격 벡터
TLS 핸드셰이크 중 악의적인 이메일 주소가 포함된 X.509 인증서를 제시하여 스택 버퍼 오버런 유발
🛡️ 대응 방법
OpenSSL 3.0.7 이상으로 업그레이드 (apt upgrade openssl 또는 yum update openssl)
🔧 검증 코드
VULNERABLE 출력 시 OpenSSL 3.0.0~3.0.6으로 취약, OK 출력 시 패치 완료 또는 영향 없는 버전(1.x 포함)
openssl version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | awk -F. '{if($1==3 && $2==0 && $3<7) print "VULNERABLE: " $0; else print "OK: " $0}'