🇰🇷 한글 설명
Linux 커널의 ksmbd 모듈에서 Qualcomm 암호화 엔진과 같은 비동기 하드웨어 엔진을 사용할 때 Use-After-Free 취약점이 발생합니다. 암호화 작업이 진행 중임에도 불구하고 시스템이 이를 오류로 처리하여 메모리를 해제해 버림으로써, 이후 DMA 완료 콜백이 해제된 메모리에 접근하여 NULL 포인터 크래시를 유발합니다.
💡 쉬운 설명
컴퓨터가 암호화 작업을 수행하는 동안 작업이 끝나지 않았는데 성급하게 관련 메모리를 지워버리는 문제입니다. 이로 인해 시스템이 갑자기 멈추거나 충돌이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: fix use-after-free from async crypto on Qualcomm crypto engine
ksmbd_crypt_message() sets a NULL completion callback on AEAD requests
and does not handle the -EINPROGRESS return code from async hardware
crypto engines like the Qualcomm Crypto Engine (QCE). When QCE returns
-EINPROGRESS, ksmbd treats it as an error and immediately frees the
request while the hardware DMA operation is still in flight. The DMA
completion callback then dereferences freed memory, causing a NULL
pointer crash:
pc : qce_skcipher_done+0x24/0x174
lr : vchan_complete+0x230/0x27c
...
el1h_64_irq+0x68/0x6c
ksmbd_free_work_struct+0x20/0x118 [ksmbd]
ksmbd_exit_file_cache+0x694/0xa4c [ksmbd]
Use the standard crypto_wait_req() pattern with crypto_req_done() as
the completion callback, matching the approach used by the SMB client
in fs/smb/client/smb2ops.c. This properly handles both synchronous
engines (immediate return) and async engines (-EINPROGRESS followed
by callback notification).
📍 영향받는 시스템
Qualcomm Crypto Engine(QCE)을 사용하는 비동기 암호화 엔진 기반의 Linux 커널 (ksmbd 모듈 포함)
⚔️ 공격 벡터
비동기 암호화 엔진을 사용하는 네트워크 환경에서 특정 SMB 요청을 통해 메모리 해제 후 참조(Use-After-Free) 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 ksmbd의 암호화 요청 처리 로직을 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.