🇰🇷 한글 설명
Linux 커널의 DRBD 드라이버에서 로컬 읽기 오류 처리 중 NULL 포인터가 drbd_set_out_of_sync() 함수로 전달되어 역참조 오류가 발생합니다. 이는 로컬 사용자가 의도적으로 디스크 오류를 유발할 때 커널 패닉을 초래하는 로컬 거부 서비스(DoS) 취약점입니다.
💡 쉬운 설명
Linux 커널이 저장장치에서 데이터를 읽을 때 오류가 발생하면 존재하지 않는 메모리 위치에 접근하려고 해서 시스템이 충돌합니다. 이 버그는 로컬 접근 권한이 있는 사용자만 이용할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drbd: fix null-pointer dereference on local read error
In drbd_request_endio(), READ_COMPLETED_WITH_ERROR is passed to
__req_mod() with a NULL peer_device:
__req_mod(req, what, NULL, &m);
The READ_COMPLETED_WITH_ERROR handler then unconditionally passes this
NULL peer_device to drbd_set_out_of_sync(), which dereferences it,
causing a null-pointer dereference.
Fix this by obtaining the peer_device via first_peer_device(device),
matching how drbd_req_destroy() handles the same situation.
📍 영향받는 시스템
DRBD 드라이버를 사용하는 모든 Linux 커널 버전 (패치 전)
⚔️ 공격 벡터
로컬 사용자가 의도적으로 블록 디바이스 읽기 오류를 유발하여 NULL 포인터 역참조 트리거
🛡️ 대응 방법
Linux 커널을 최신 패치 버전으로 업데이트하여 drbd_request_endio() 함수의 NULL 포인터 처리 수정
🔧 검증 코드
현재 커널 버전을 확인하고 DRBD 관련 패치가 적용되었는지 확인합니다. 패치 버전 이상이면 안전하며, 낮은 버전이면 업데이트가 필요합니다.
uname -r && cat /proc/version | grep -i drbd