🇰🇷 한글 설명
Linux 커널의 qce 암호화 모듈에서 CCM AAD 버퍼 할당 시 크기가 실제 DMA 전송 길이보다 작게 계산되는 취약점이 발견되었습니다. 이로 인해 QCE 하드웨어가 할당된 버퍼 범위를 벗어나 데이터를 읽게 되어 인증 태그 오류 및 CCM 셀프 테스트 실패를 유발할 수 있습니다.
💡 쉬운 설명
데이터를 암호화할 때 필요한 임시 저장 공간을 실제 필요한 크기보다 작게 만드는 계산 오류가 있습니다. 이 때문에 컴퓨터가 허용된 범위를 넘어서 데이터를 읽으려다 암호화 검증에 실패하게 됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
crypto: qce - fix CCM AAD buffer underallocation
The AAD buffer allocated in qce_aead_ccm_prepare_buf_assoclen()
can be smaller than the length later programmed into the DMA
scatterlist.
The allocation size is currently calculated as:
ALIGN(assoclen, 16) + MAX_CCM_ADATA_HEADER_LEN
while the DMA length is set to:
ALIGN(assoclen + adata_header_len, 16)
Since ALIGN() does not distribute over addition, the allocation
can be smaller than the DMA length. For example, when
assoclen = 32 and adata_header_len = 2:
allocation = ALIGN(32, 16) + 6 = 38
DMA length = ALIGN(32 + 2, 16) = 48
As a result, the QCE hardware can read beyond the allocated
buffer while computing the CBC-MAC over the associated data.
The extra bytes are folded into the authentication tag,
resulting in an incorrect tag and causing CCM self-test
failures such as:
alg: aead: ccm-aes-qce encryption test failed (wrong result)
on test vector 8
Fix the allocation by adding the maximum possible AAD header
length before alignment:
ALIGN(assoclen + MAX_CCM_ADATA_HEADER_LEN, 16)
This guarantees that the allocated buffer is large enough
for the fully padded AAD data for all supported header sizes.
📍 영향받는 시스템
Linux kernel (qce crypto driver module)
⚔️ 공격 벡터
특정 조건의 AAD(추가 인증 데이터) 길이를 입력하여 메모리 경계 외 읽기 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 버퍼 할당 로직 수정
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.