🇰🇷 한글 설명
Linux 커널의 ublk 구성 요소에서 ublk 서버 프로세스가 종료될 때 미완료된 요청의 참조 횟수(reference count)를 적절히 정리하지 못하는 취약점입니다. 이로 인해 완료된 요청에 대해 사용자 복사 및 제로 카피 작업이 잘못 수행되거나 커널 경고가 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터의 데이터 처리 장치 중 하나인 ublk가 종료될 때, 아직 처리 중인 작업의 '사용 중' 표시를 제대로 지우지 못하는 문제입니다. 이로 인해 이미 끝난 작업에 다시 접근하려 하거나 시스템에 오류 경고가 나타날 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ublk: clean up user copy references on ublk server exit
If a ublk server process releases a ublk char device file, any requests
dispatched to the ublk server but not yet completed will retain a ref
value of UBLK_REFCOUNT_INIT. Before commit e63d2228ef83 ("ublk: simplify
aborting ublk request"), __ublk_fail_req() would decrement the reference
count before completing the failed request. However, that commit
optimized __ublk_fail_req() to call __ublk_complete_rq() directly
without decrementing the request reference count.
The leaked reference count incorrectly allows user copy and zero copy
operations on the completed ublk request. It also triggers the
WARN_ON_ONCE(refcount_read(&io->ref)) warnings in ublk_queue_reinit()
and ublk_deinit_queue().
Commit c5c5eb24ed61 ("ublk: avoid ublk_io_release() called after ublk
char dev is closed") already fixed the issue for ublk devices using
UBLK_F_SUPPORT_ZERO_COPY or UBLK_F_AUTO_BUF_REG. However, the reference
count leak also affects UBLK_F_USER_COPY, the other reference-counted
data copy mode. Fix the condition in ublk_check_and_reset_active_ref()
to include all reference-counted data copy modes. This ensures that any
ublk requests still owned by the ublk server when it exits have their
reference counts reset to 0.
📍 영향받는 시스템
ublk 기능을 사용하는 Linux 커널 (특정 커밋 c5c5eb24ed61 이전 버전)
⚔️ 공격 벡터
로컬 공격자가 ublk 서버 프로세스를 조작하여 참조 횟수 누수를 유발하고 메모리 관련 오류를 일으킴
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하거나 ublk 관련 커널 패치를 적용함
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 최신 패치 버전인지 배포판 보안 공지를 통해 확인하십시오.