🇰🇷 한글 설명
Linux 커널의 ksmbd 모듈에서 비동기 oplock/lease break 알림 처리 중 ksmbd_conn 객체의 참조 횟수(reference count)를 적절히 고정하지 않아 발생하는 취약점입니다. 연결 해제 과정과 알림 작업이 동시에 발생할 경우, 객체가 메모리에서 해제된 후에도 작업이 계속되어 Use-After-Free 오류를 유발할 수 있습니다.
💡 쉬운 설명
서버와 연결이 끊기는 순간에 특정 알림 작업이 동시에 일어나면, 이미 사라진 연결 정보를 다시 사용하려고 시도하는 오류입니다. 이로 인해 시스템이 충돌하거나 해커가 시스템 권한을 탈취할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: pin conn during async oplock break notification
smb2_oplock_break_noti() and smb2_lease_break_noti() store a ksmbd_conn
pointer in an async ksmbd_work and then queue that work on ksmbd-io. The
work only increments conn->r_count, which prevents teardown from passing
the pending-request wait after the increment, but it does not pin the
struct ksmbd_conn object.
If connection teardown races with an oplock break notification, the last
conn reference can be dropped before the queued worker finishes. The
worker then uses the freed conn in ksmbd_conn_write() and
ksmbd_conn_r_count_dec().
Take a real conn reference when publishing the conn pointer to the async
work item, and drop it after the notification work has decremented
r_count. Apply the same lifetime rule to lease break notification, which
uses the same work->conn pattern.
📍 영향받는 시스템
ksmbd 모듈을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
네트워크를 통해 조작된 oplock/lease break 알림을 전송하여 연결 해제 시점과 충돌을 유도하는 Race Condition 공격
🛡️ 대응 방법
ksmbd_conn 객체의 참조 횟수 관리 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 보안 업데이트 버전인지 확인