🇰🇷 한글 설명
TLS 핸드셰이크 도중 SSL_set_SSL_CTX()를 호출하여 SSL_CTX를 교체할 때, 교체된 컨텍스트가 기존보다 더 많은 프로바이더 서명 알고리즘을 지원하면 내부 배열의 범위를 벗어난 메모리 접근이 발생합니다. 이로 인해 서버 힙 영역에서 경미한 Out-of-bounds Read 또는 특정 조건에서 Out-of-bounds Write가 발생하여 서비스 거부(DoS) 상태에 빠질 수 있습니다.
💡 쉬운 설명
서버가 보안 연결을 설정하는 중간에 설정값을 바꾸면, 서버가 내부적으로 준비한 메모리 공간보다 더 많은 정보를 처리하려다 오류가 발생할 수 있습니다. 공격자가 이를 악용하면 서버를 강제로 종료시켜 서비스를 중단시킬 수 있습니다.
🇺🇸 원문 (English)
Issue summary: A TLS server that calls SSL_set_SSL_CTX() to switch a
connection to a different SSL_CTX part way through a handshake may access
memory beyond the end of an internal array if the replacement context knows
about more provider signature algorithms than the context the connection was
created from. Applications which never call SSL_set_SSL_CTX() are not
affected.
Impact summary: A remote peer may be able to cause a small out-of-bounds
read, and in some circumstances a fixed-value out-of-bounds write, on the
server heap. This may lead to a Denial of Service.
CWE: CWE-787: Out-of-bounds Write
Description: A TLS connection records how many certificate slots it has
when it is created, taken from the SSL_CTX that created it: the built-in
certificate types plus one slot for each provider TLS-SIGALG entry that
context was aware of. That count sizes an internal array of per-slot
certificate validity flags.
An application may replace a connection's SSL_CTX part way through the
handshake by calling SSL_set_SSL_CTX(), most commonly from a servername
callback in order to serve a different virtual host. Doing so did not
refresh the recorded count. A provider signature algorithm's slot index is
its position in the list of whichever context resolves it, so if the
replacement context is aware of more of them than the original, an
algorithm offered by the peer can resolve to an index beyond the end of the
array. Processing the peer's signature algorithms then reads one four byte
word past the end for each such algorithm and, where the word read is zero,
writes a fixed value over it. A peer offering many of them can corrupt heap
metadata and abort the process.
Only provider signature algorithms which occupy one of the excess slots,
and which the server also has configured, have this effect. Codepoints the
replacement context does not recognise are discarded without being resolved
to a slot, and provider signature algorithms are usable only from TLS 1.3.
The two contexts must therefore be aware of different numbers of provider
signature algorithms, which requires separate library contexts, a provider
loaded between the two being created, or providers which differ in what
they advertise - in 4.0, for example, the default provider advertises SM2
where the FIPS provider does not. A deployment meeting the condition is
also unable to negotiate the affected algorithms with legitimate clients,
since the same stale count hides the corresponding certificates, so the
misconfiguration is likely to be noticed. For that reason, and because the
configuration is not the default, this issue has been assessed as Low
severity.
FIPS impact: no
No FIPS modules are affected by this issue as the affected code is outside
the OpenSSL FIPS module boundary.
📍 영향받는 시스템
SSL_set_SSL_CTX()를 사용하여 핸드셰이크 도중 SSL_CTX를 교체하는 TLS 서버 애플리케이션
⚔️ 공격 벡터
원격의 공격자가 다수의 프로바이더 서명 알고리즘을 포함한 TLS 1.3 핸드셰이크 요청을 전송하여 서버의 힙 메모리 손상 유도
🛡️ 대응 방법
OpenSSL 보안 패치 적용 및 SSL_set_SSL_CTX() 호출 시 컨텍스트 간 알고리즘 지원 개수 차이가 발생하지 않도록 구성 확인
🔧 검증 코드
출력된 OpenSSL 버전을 확인하여 해당 취약점이 해결된 최신 보안 패치 버전인지 확인하십시오.
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
💻 영향받는 소프트웨어
IBM WebSphere Application Server