🔍 CVE-2026-53161

7.8
CVSS Score
HIGH
2026-06-25
2026-07-06 16:42
✅ 완료

🇰🇷 한글 설명

Linux 커널의 fastrpc 모듈에서 fastrpc_device_release()와 DSP 응답을 처리하는 워크큐 간의 레이스 컨디션으로 인해 use-after-free 취약점이 발생합니다. 사용자가 파일 디스크립터를 닫을 때 fastrpc_user 구조체가 해제된 후, 병렬로 실행되는 워크큐가 해제된 메모리에 접근하여 시스템 불안정이나 권한 상승을 초래할 수 있습니다.

💡 쉬운 설명

프로그램이 이미 사용이 끝나서 삭제한 메모리 공간을 다른 작업이 동시에 사용하려고 시도할 때 발생하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 해커가 시스템 제어권을 획득할 위험이 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: misc: fastrpc: fix use-after-free of fastrpc_user in workqueue context There is a race between fastrpc_device_release() and the workqueue that processes DSP responses. When the user closes the file descriptor, fastrpc_device_release() frees the fastrpc_user structure. Concurrently, an in-flight DSP invocation can complete and fastrpc_rpmsg_callback() schedules context cleanup via schedule_work(&ctx->put_work). If the workqueue runs fastrpc_context_free() in parallel with or after fastrpc_device_release() has freed the user structure, it dereferences the freed fastrpc_user. Depending on the state of the context at the time of the race, any one of the following accesses can be hit: 1. fastrpc_buf_free() calls fastrpc_ipa_to_dma_addr(buf->fl->cctx, ...) to strip the SID bits from the stored IOVA before passing the physical address to dma_free_coherent(). 2. fastrpc_free_map() reads map->fl->cctx->vmperms[0].vmid to reconstruct the source permission bitmask needed for the qcom_scm_assign_mem() call that returns memory from the DSP VM back to HLOS. 3. fastrpc_free_map() acquires map->fl->lock to safely remove the map node from the fl->maps list. The resulting use-after-free manifests as: pc : fastrpc_buf_free+0x38/0x80 [fastrpc] lr : fastrpc_context_free+0xa8/0x1b0 [fastrpc] fastrpc_context_free+0xa8/0x1b0 [fastrpc] fastrpc_context_put_wq+0x78/0xa0 [fastrpc] process_one_work+0x180/0x450 worker_thread+0x26c/0x388 Add kref-based reference counting to fastrpc_user. Have each invoke context take a reference on the user at allocation time and release it when the context is freed. Release the initial reference in fastrpc_device_release() at file close. Move the teardown of the user structure — freeing pending contexts, maps, mmaps, and the channel context reference — into the kref release callback fastrpc_user_free(), so that it runs only when the last reference is dropped, regardless of whether that happens at device close or after the final in-flight context completes.

📍 영향받는 시스템

Linux kernel (fastrpc module 사용 환경)

⚔️ 공격 벡터

특수하게 조작된 DSP 호출을 통해 fastrpc_device_release와 워크큐 간의 타이밍 차이를 이용한 레이스 컨디션 공격

🛡️ 대응 방법

fastrpc_user 구조체에 kref 기반 참조 카운팅을 도입하여 모든 작업이 완료된 후 안전하게 메모리가 해제되도록 커널 패치 적용

🔧 검증 코드

현재 커널 버전과 fastrpc 모듈 로드 여부를 확인하여 해당 모듈이 활성화되어 있는지 점검합니다.

Shell / Script
uname -r && grep -i 'fastrpc' /proc/modules 2>/dev/null

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel