🇰🇷 한글 설명
OpenSSL에서 SSL_CIPHER_find() 함수를 사용하는 QUIC 프로토콜 클라이언트 또는 서버가 피어로부터 알려지지 않은 암호화套件을 받으면 NULL 포인터 참조가 발생하여 서비스 거부 공격이 발생할 수 있는 취약점
💡 쉬운 설명
OpenSSL에서 QUIC 프로토콜을 사용하는 클라이언트 또는 서버가 알려지지 않은 암호화套件을 받으면 프로그램이 비정상적으로 종료되어 서비스 거부 공격이 발생할 수 있습니다. 이는 NULL 포인터 참조로 인해 발생하며, 이는 비교적 드문 함수 호출로 인해 발생하는 문제입니다.
🇺🇸 원문 (English)
Issue summary: If an application using the SSL_CIPHER_find() function in
a QUIC protocol client or server receives an unknown cipher suite from
the peer, a NULL dereference occurs.
Impact summary: A NULL pointer dereference leads to abnormal termination of
the running process causing Denial of Service.
Some applications call SSL_CIPHER_find() from the client_hello_cb callback
on the cipher ID received from the peer. If this is done with an SSL object
implementing the QUIC protocol, NULL pointer dereference will happen if
the examined cipher ID is unknown or unsupported.
As it is not very common to call this function in applications using the QUIC
protocol and the worst outcome is Denial of Service, the issue was assessed
as Low severity.
The vulnerable code was introduced in the 3.2 version with the addition
of the QUIC protocol support.
The FIPS modules in 3.6, 3.5, 3.4 and 3.3 are not affected by this issue,
as the QUIC implementation is outside the OpenSSL FIPS module boundary.
OpenSSL 3.6, 3.5, 3.4 and 3.3 are vulnerable to this issue.
OpenSSL 3.0, 1.1.1 and 1.0.2 are not affected by this issue.
📍 영향받는 시스템
OpenSSL 3.6, 3.5, 3.4, 3.3
⚔️ 공격 벡터
피어로부터 알려지지 않은 암호화套件을 받는 QUIC 프로토콜 클라이언트 또는 서버
🛡️ 대응 방법
OpenSSL을 최신 버전으로 업데이트하거나, QUIC 프로토콜을 사용하지 않는 버전으로 다운그레이드합니다.
🔧 검증 코드
로컬 시스템에서 OpenSSL 버전을 확인하여 취약점 여부를 점검합니다. 이 코드는 Python 3.x에서 실행할 수 있습니다. 실행 전 필요한 권한은 없습니다.
import subprocess
result = subprocess.run(['openssl', 'version'], stdout=subprocess.PIPE)
version = result.stdout.decode('utf-8').split(' ')[1]
if version in ['OpenSSL 3.6', 'OpenSSL 3.5', 'OpenSSL 3.4', 'OpenSSL 3.3']:
print({"result": "취약", "reason": "OpenSSL 버전이 취약한 버전입니다."})
else:
print({"result": "양호", "reason": "OpenSSL 버전이 안전한 버전입니다."})