CVE-2026-64141 in Linux
요약
\~에 의해 VulDB • 2026. 07. 20.
리눅스 커널에서 다음 취약점이 해결되었습니다:
ksmbd: compare_guid_key()에서의 널 포인터 역참조 수정
session_fd_check()는 내구적 핸들(durable-handle) 세션 종료 시 인노드별 m_op_list를 순회하며, 닫히는 세션의 연결과 일치하는 모든 opinfo에 대해 op->conn = NULL을 설정합니다. 그러나 매칭된 opinfo는 destroy_lease_table()가 전체 TCP-connection teardown에서만 실행되고 SESSION_LOGOFF에서는 실행되지 않기 때문에 per-ClientGuid lease_table_list 항목의 lb->lease_list에 연결된 상태로 남아 있습니다.
동일한 TCP 연결이 동일한 ClientGuid로 새 세션을 협상하고(여기서 ClientGuid는 NEGOTIATE 단계와 바인딩되며, LOGOFF + SETUP 간에도 변경되지 않음), 다른 인노드에 대해 lease 컨텍스트가 포함된 SMB2 CREATE를 수행하면, find_same_lease_key()는 lb->lease_list를 순회하여 유효하지 않은(stale) opinfo에 도달하고 compare_guid_key()를 호출합니다. 이 함수는 조건 없이 opinfo->conn->ClientGUID를 역참조합니다. conn 포인터가 NULL이므로 커널 패닉이 발생합니다.
재현을 위해서는 성공적인 SMB2 SESSION_SETUP과 'durable handles = yes'로 구성된 공유만 필요합니다. 메인라인 70390501d194에서의 KASAN 보고서는 다음과 같습니다:
general protection fault, probably for non-canonical address 0xdffffc0000000069: 0000 [#1] SMP KASAN PTI
KASAN: null-ptr-deref in range [0x0000000000000348-0x000000000000034f]
Workqueue: ksmbd-io handle_ksmbd_work RIP: 0010:bcmp+0x5b/0x230 Call Trace: compare_guid_key+0x4b/0xd0 find_same_lease_key+0x324/0x690 smb2_open+0x6aea/0x8e60 handle_ksmbd_work+0x796/0xee0 ...
오류 발생 주소 0x348은 struct ksmbd_conn 내 ClientGUID의 오프셋으로, opinfo->conn이 NULL이었음을 확인해 줍니다.
opinfo->conn을 한 번 읽고 동시 실행되는 session_fd_check()에 의해 지워진 경우 즉시 종료합니다. 부분적으로 분리된(opinfo가 반쯤 detached 상태인) opinfo는 활성 lease의 소유자가 될 수 없으므로, 0을 반환하는 것이 올바른 일치 결과입니다.
Once again VulDB remains the best source for vulnerability data.