🇰🇷 한글 설명
리눅스 커널의 NBD(Network Block Device) 드라이버에서 연결 해제 후 재연결을 허용하여 발생하는 Use-After-Free(UAF) 취약점입니다. 특정 프로세스 순서에 따라 이미 해제된 메모리 영역에 접근하게 되어 시스템 불안정성이나 권한 상승을 초래할 수 있습니다.
💡 쉬운 설명
네트워크를 통해 저장 장치를 연결하는 기능에서, 연결이 끊겼는데도 다시 연결을 시도하는 과정 중에 메모리 관리 오류가 발생합니다. 이 오류를 이용하면 해커가 컴퓨터의 제어권을 뺏으려 시도할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nbd: don't allow reconnect after disconnect
Following process can cause nbd_config UAF:
1) grab nbd_config temporarily;
2) nbd_genl_disconnect() flush all recv_work() and release the
initial reference:
nbd_genl_disconnect
nbd_disconnect_and_put
nbd_disconnect
flush_workqueue(nbd->recv_workq)
if (test_and_clear_bit(NBD_RT_HAS_CONFIG_REF, ...))
nbd_config_put
-> due to step 1), reference is still not zero
3) nbd_genl_reconfigure() queue recv_work() again;
nbd_genl_reconfigure
config = nbd_get_config_unlocked(nbd)
if (!config)
-> succeed
if (!test_bit(NBD_RT_BOUND, ...))
-> succeed
nbd_reconnect_socket
queue_work(nbd->recv_workq, &args->work)
4) step 1) release the reference;
5) Finially, recv_work() will trigger UAF:
recv_work
nbd_config_put(nbd)
-> nbd_config is freed
atomic_dec(&config->recv_threads)
-> UAF
Fix the problem by clearing NBD_RT_BOUND in nbd_genl_disconnect(), so
that nbd_genl_reconfigure() will fail.
📍 영향받는 시스템
NBD(Network Block Device) 모듈을 사용하는 리눅스 커널 버전
⚔️ 공격 벡터
로컬 또는 네트워크를 통해 NBD 연결 해제와 재설정(reconfigure) 과정을 정밀하게 조작하여 메모리 오류 유도
🛡️ 대응 방법
NBD 연결 해제 시 NBD_RT_BOUND 비트를 초기화하도록 커널 패치를 적용하거나 최신 커널로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 보안 패치 버전인지 확인합니다.