CVE-2025-68372 in Linux
요약
\~에 의해 VulDB • 2026. 05. 23.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nbd: recv_work에서 config put를 지연시킵니다
NBD_CLEAR_SOCK 및 NBD_CMD_RECONFIGURE 실행 시 recv_work에서 UAF(Use-After-Free) 문제가 하나 발생합니다: nbd_genl_connect // conf_ref=2 (연결 및 recv_work A) nbd_open // conf_ref=3 recv_work A 완료 // conf_ref=2 NBD_CLEAR_SOCK // conf_ref=1 nbd_genl_reconfigure // conf_ref=2 (recv_work B 트리거) nbd 닫기 // conf_ref=1 recv_work B config_put // conf_ref=0 atomic_dec(&config->recv_threads); -> UAF
또는 NBD_CLEAR_SOCK만 실행하는 경우: nbd_genl_connect // conf_ref=2 nbd_open // conf_ref=3 NBD_CLEAR_SOCK // conf_ref=2 nbd 닫기 nbd_release config_put // conf_ref=1 recv_work config_put // conf_ref=0 atomic_dec(&config->recv_threads); -> UAF
커밋 87aac3a80af5("nbd: notify waiter 전에 nbd_config_put() 호출")는 nbd->task_recv이 아직 정리되지 않은 상태에서 nbd_start_device_ioctl()가 깨어나지 않도록 보장하기 위해 recv_work에서 nbd_config_put()를 깨우기 전에 실행되도록 변경했습니다.
그러나 nbd_start_device_ioctl()에서는 깨어난 후 명시적으로 flush_workqueue()를 호출하여 모든 현재 작업이 완료되도록 보장합니다. 따라서 깨우기 전에 config put를 앞당길 필요가 없습니다.
nbd_config_put()를 recv_work의 끝으로 이동하여 워커 스레드의 전체 수명 동안 참조가 유지되도록 합니다. 이렇게 하면 clear + reconfigure가 교차 실행되더라도 recv_work가 여전히 실행 중인 동안 config가 해제되지 않도록 보장합니다.
또한 recv_work가 마지막 nbd_put를 방출하여 데드락을 유발하는 것에 대해 걱정할 필요가 없습니다:
경로 A (NBD_CFLAG_DESTROY_ON_DISCONNECT가 있는 netlink): 연결 // nbd_refs=1 (recv_work 트리거) nbd 열기 // nbd_refs=2 NBD_CLEAR_SOCK nbd 닫기 nbd_release nbd_disconnect_and_put flush_workqueue // recv_work 완료 nbd_config_put nbd_put // nbd_refs=1 nbd_put // nbd_refs=0 queue_work
경로 B (NBD_CFLAG_DESTROY_ON_DISCONNECT가 없는 netlink): 연결 // nbd_refs=2 (recv_work 트리거) nbd 열기 // nbd_refs=3 NBD_CLEAR_SOCK // conf_refs=2 nbd 닫기 nbd_release nbd_config_put // conf_refs=1 nbd_put // nbd_refs=2 recv_work 완료 // conf_refs=0, nbd_refs=1 rmmod // nbd_refs=0
의존성: e2daec488c57 ("nbd: nbd_config_put 시 hungtask 수정")
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.