🇰🇷 한글 설명
OpenSSL의 QUIC 스택이 스트림 단위의 흐름 제어는 수행하지만, 연결 수준의 흐름 제어를 강제하지 않는 취약점이 발견되었습니다. 공격자가 여러 스트림을 통해 제한된 범위를 넘어서는 데이터를 전송할 경우, 시스템 메모리가 과도하게 할당될 수 있습니다.
💡 쉬운 설명
데이터 전송량을 조절하는 규칙 중 하나가 제대로 작동하지 않아 발생하는 문제입니다. 나쁜 의도를 가진 상대방이 규칙을 어기고 엄청난 양의 데이터를 보내면, 컴퓨터의 메모리가 순식간에 가득 차서 시스템이 느려지거나 멈출 수 있습니다.
🇺🇸 원문 (English)
Issue summary: OpenSSL QUIC stack does not enforce connection
level flow control for streams. Remote peers may send more bytes
as long as they fit within the stream flow control limits.
Impact summary: A malicious remote peer may exploit the lack of connection
flow control for streams to make the QUIC stack receive ~100MB of memory
instead of 768 KiB (default flow control window size).
CWE: CWE-770: Allocation of Resources Without Limits or Throttling
Description: The local QUIC stack advertises two flow control limits
to its remote peer: stream flow control limit and connection flow
control limit. The remote peer must follow both limits when transmitting
stream data.
Whenever the local QUIC stack receives a stream frame, it validates
that the size of the received stream frame stays within flow control limits.
If either limit is exceeded (stream level or connection level), then
the QUIC stack must close the connection with a flow control error.
The vulnerable OpenSSL QUIC stack enforces the stream-level but not
the connection-level limit. To exploit the issue, three conditions must be met:
- the remote peer opens several streams
- each stream must stay within the stream-level flow control limit
- there must be no zero-offset byte sent on any of the streams
(to prevent the vulnerable QUIC stack from consuming data).
By meeting the conditions above, the remote peer may make the local stack
allocate 2 x MAX_STREAMS x (stream flow control limit) bytes
of memory. MAX_STREAMS defaults to 100, and the limit applies to both
bidirectional and unidirectional streams, making it 200 in total. The default
flow control window for a stream is 512kB. The remote peer may
force the vulnerable QUIC stack to allocate 100MB of heap per connection.
FIPS impact: no
The FIPS module is not affected as the QUIC implementation is outside of
the OpenSSL FIPS module boundary.
📍 영향받는 시스템
OpenSSL QUIC 스택을 사용하는 모든 시스템 (FIPS 모듈 제외)
⚔️ 공격 벡터
악의적인 원격 피어가 여러 개의 QUIC 스트림을 열고 각 스트림의 제한 범위 내에서 데이터를 전송하여 연결 전체의 메모리 할당량을 초과시키는 방식
🛡️ 대응 방법
OpenSSL을 최신 보안 패치가 적용된 버전으로 업데이트하여 연결 수준의 흐름 제어 로직을 적용해야 합니다.
🔧 검증 코드
설치된 OpenSSL 버전을 확인하고, QUIC 관련 기능이 포함되어 있는지 체크하여 취약 가능성을 판단합니다.
openssl version && grep -i 'quic' /usr/include/openssl/*.h 2>/dev/null