🔍 CVE-2023-52982

5.5
CVSS Score
MEDIUM
2025-03-27
2026-11-05 21:17
✅ 완료

🇰🇷 한글 설명

Linux 커널 fscache에서 해제된 볼륨의 해제를 기다리는 로직이 잘못된 대기 큐를 사용하여, 지연 시 볼륨 획득 대기가 영원히 깨어나지 못해 mount 작업이 무한 대기하는 문제입니다. wake_up_bit()과 wait_var_event()가 서로 다른 대기 큐를 사용하여 발생하며, wait_on_bit()와 clear_and_wake_up_bit()로 수정되었습니다.

💡 쉬운 설명

리눅스 커널의 캐시 기능에서 볼륨 준비 신호가 엉뚱한 곳으로 가서, 기다리던 마운트 작업이 멈춰버릴 수 있습니다. 이 문제는 시스템 일부가 응답하지 않게 만들 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: fscache: Use wait_on_bit() to wait for the freeing of relinquished volume The freeing of relinquished volume will wake up the pending volume acquisition by using wake_up_bit(), however it is mismatched with wait_var_event() used in fscache_wait_on_volume_collision() and it will never wake up the waiter in the wait-queue because these two functions operate on different wait-queues. According to the implementation in fscache_wait_on_volume_collision(), if the wake-up of pending acquisition is delayed longer than 20 seconds (e.g., due to the delay of on-demand fd closing), the first wait_var_event_timeout() will timeout and the following wait_var_event() will hang forever as shown below: FS-Cache: Potential volume collision new=00000024 old=00000022 ...... INFO: task mount:1148 blocked for more than 122 seconds. Not tainted 6.1.0-rc6+ #1 task:mount state:D stack:0 pid:1148 ppid:1 Call Trace: <TASK> __schedule+0x2f6/0xb80 schedule+0x67/0xe0 fscache_wait_on_volume_collision.cold+0x80/0x82 __fscache_acquire_volume+0x40d/0x4e0 erofs_fscache_register_volume+0x51/0xe0 [erofs] erofs_fscache_register_fs+0x19c/0x240 [erofs] erofs_fc_fill_super+0x746/0xaf0 [erofs] vfs_get_super+0x7d/0x100 get_tree_nodev+0x16/0x20 erofs_fc_get_tree+0x20/0x30 [erofs] vfs_get_tree+0x24/0xb0 path_mount+0x2fa/0xa90 do_mount+0x7c/0xa0 __x64_sys_mount+0x8b/0xe0 do_syscall_64+0x30/0x60 entry_SYSCALL_64_after_hwframe+0x46/0xb0 Considering that wake_up_bit() is more selective, so fix it by using wait_on_bit() instead of wait_var_event() to wait for the freeing of relinquished volume. In addition because waitqueue_active() is used in wake_up_bit() and clear_bit() doesn't imply any memory barrier, use clear_and_wake_up_bit() to add the missing memory barrier between cursor->flags and waitqueue_active().

📍 영향받는 시스템

패치 이전의 Linux 커널 (fscache 및 erofs 등 관련 모듈을 사용하는 시스템)

⚔️ 공격 벡터

로컬 사용자가 볼륨 획득과 해제 타이밍을 유발해 마운트 작업을 장시간 블로킹시키는 서비스 거부 형태로 악용될 수 있습니다.

🛡️ 대응 방법

배포판 벤더가 제공하는 수정된 커널 패키지로 업데이트하거나 해당 upstream 커밋이 포함된 커널을 사용하세요.

🔧 검증 코드

출력된 커널 버전이 배포판의 수정 패치가 적용된 버전인지 벤더 보안 공지와 대조하여 확인하며, 패치 이전 버전이면 취약할 수 있습니다.

Shell / Script
uname -r

📊 CVSS Vector String

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

💻 영향받는 소프트웨어

Linux Kernel