
SpookySSL CVE-2022-3602 SSLv3 스캐너 Windows, Linux, macOS용
Windows, Linux, macOS 용 SpookySSL CVE-2022-3602 SSLv3 Scanner
먼저 문제는 바이트 크기를 결정할 때 발생합니다. 바이트 크기를 결정할 때 NULL, 즉 빈/0 값이 정의되지 않아 바이트 길이가 0으로 설정될 수 있습니다. 아래 명령어에서 xn--으로 시작하는 부분은 다른 알파벳(예: 중국어에서 punycode로 변환된)으로 쓰인 도메인 이름을 라틴 알파벳으로 변환하는 것을 의미합니다. If 루프 내에서 memcpy 명령어는 delta + 1 크기의 스택 공간을 메모리에 할당하고 outptr 값을 이 공간에 씁니다. NULL 값이 입력되면 1바이트 공간만 할당되므로 두 개의 널 코드가 버퍼 오버플로우를 발생시킵니다.
자세한 내용은 : https://github.com/openssl/openssl/commit/c42165b5706e42f67ef8ef4c351a9a4c5d21639a
먼저, 원격 코드 실행(RCE)에 대해 알아야 합니다.
원격 코드 실행(RCE) 공격은 공격자가 원격으로 컴퓨터에서 악성 코드를 실행할 수 있게 합니다. RCE 취약점의 영향은 악성 코드 실행부터 공격자가 손상된 시스템을 완전히 제어하는 것까지 다양합니다.
OpenSSL의 CVE-2022-3602 취약점은 X.509 인증서를 확인하는 동안 Punycode의 잘못된 처리로 인해 발생합니다.
Punycode는 제한된 ASCII 문자 하위 집합을 사용하여 유니코드 문자열을 표현하는 방식입니다. 일반적으로 일본어 문자와 같은 비ASCII 문자를 포함하는 도메인 이름을 인코딩하는 데 사용됩니다. punycode로 인코딩된 문자열
"xn--"으로 시작하며 영어 문자와 숫자가 이어집니다.
취약한 함수 ossl_punycode_decode는 Punycode 문자열 디코딩 중에 버퍼 오버플로우를 일으킬 수 있습니다. 이 함수는 OpenSSL이 인증서 체인을 처리할 때 호출됩니다. 취약점을 악용하려면 다음이 필요합니다.
1) "nameConstraints" 필드에 악의적인 Punycode 문자열이 포함된 CA(인증 기관) 인증서 또는 중간 인증서를 제작합니다. Punycode 문자열은 "xn--"을 제외하고 최소 512바이트를 포함해야 합니다.
2) SmtpUTF8Mailbox 문자열을 지정하는 SubjectAlternateName(SAN) otherName 필드를 포함하는 리프 인증서를 제작합니다.
서비스 거부(DoS) 취약점
서비스 거부(DoS) 공격은 시스템이나 네트워크를 종료하여 의도된 사용자가 접근할 수 없게 만드는 공격입니다. DoS 공격은 대상에 트래픽을 플러딩하거나 충돌을 유발하는 정보를 전송하여 이를 수행합니다.
CVE-2022-3602 취약점은 다른 버퍼 오버플로우 취약점과 마찬가지로 서비스 거부 취약점도 있습니다. 버퍼 오버플로우는 ossl_a2ulabel 취약 함수에서 발생합니다. 이 함수가 점 문자(".") 뒤에 Punycode 부분을 만나면 출력 버퍼의 크기를 초과하더라도 "."을 출력 버퍼에 추가합니다.
이러한 방식으로 공격자는 임의의 수의 "." 문자를 사용하여 출력 버퍼를 오버플로우시킬 수 있으며, 이로 인해 스택이 손상됩니다. 이 취약점은 원격 코드 실행에는 사용할 수 없으며 서비스 거부만 가능합니다.
출처 : https://blog.checkpoint.com/2022/11/01/openssl-vulnerability-cve-2022-3602-remote-code-execution-and-cve-2022-3786-denial-of-service-check-point-research-update/
