🇰🇷 한글 설명
리눅스 커널의 cachefiles 구성 요소에서 객체를 해제할 때 ondemand_object_worker 작업이 완료될 때까지 기다리지 않아 발생하는 Use-After-Free 취약점입니다. 객체가 이미 메모리에서 해제된 후 작업 스레드가 실행되면 시스템 불안정이나 보안 문제가 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터가 사용 중인 데이터를 정리하는 과정에서, 이미 삭제된 데이터를 다시 사용하려고 시도하여 발생하는 오류입니다. 이로 인해 시스템이 멈추거나 해커가 시스템 권한을 탈취할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
cachefiles: wait for ondemand_object_worker to finish when dropping object
When queuing ondemand_object_worker() to re-open the object,
cachefiles_object is not pinned. The cachefiles_object may be freed when
the pending read request is completed intentionally and the related
erofs is umounted. If ondemand_object_worker() runs after the object is
freed, it will incur use-after-free problem as shown below.
process A processs B process C process D
cachefiles_ondemand_send_req()
// send a read req X
// wait for its completion
// close ondemand fd
cachefiles_ondemand_fd_release()
// set object as CLOSE
cachefiles_ondemand_daemon_read()
// set object as REOPENING
queue_work(fscache_wq, &info->ondemand_work)
// close /dev/cachefiles
cachefiles_daemon_release
cachefiles_flush_reqs
complete(&req->done)
// read req X is completed
// umount the erofs fs
cachefiles_put_object()
// object will be freed
cachefiles_ondemand_deinit_obj_info()
kmem_cache_free(object)
// both info and object are freed
ondemand_object_worker()
When dropping an object, it is no longer necessary to reopen the object,
so use cancel_work_sync() to cancel or wait for ondemand_object_worker()
to finish.
📍 영향받는 시스템
Linux Kernel (cachefiles 모듈 사용 환경)
⚔️ 공격 벡터
특정 파일 시스템(erofs 등)의 언마운트 및 캐시 작업 시퀀스를 정밀하게 조작하여 메모리 오류 유도
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 cancel_work_sync() 로직이 반영된 패치를 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인합니다.