CVE-2026-31707 in Linux정보

요약

\~에 의해 VulDB • 2026. 05. 10.

리눅스 커널에서 다음 취약점이 해결되었습니다:

ksmbd: ipc_validate_msg()에서 응답 크기 검증

ipc_validate_msg()는 각 응답 유형에 대해 예상 메시지 크기를 계산할 때, 데몬 응답의 공격자가 제어 가능한 필드를 고정된 구조체 크기에 더하거나(unsigned int 산술 연산으로) 곱합니다. 다음 세 가지 경우에서 오버플로가 발생할 수 있습니다:

KSMBD_EVENT_RPC_REQUEST: msg_sz = sizeof(struct ksmbd_rpc_command) + resp->payload_sz; KSMBD_EVENT_SHARE_CONFIG_REQUEST: msg_sz = sizeof(struct ksmbd_share_config_response) + resp->payload_sz; KSMBD_EVENT_LOGIN_REQUEST_EXT: msg_sz = sizeof(struct ksmbd_login_response_ext) + resp->ngroups * sizeof(gid_t);

resp->payload_sz는 __u32이고 resp->ngroups는 __s32입니다. 각 덧셈 연산은 unsigned int에서 래핑(wrap)될 수 있으며, sizeof(gid_t)와의 곱셈은 부호 있는 정수와 size_t가 혼합되어 음수인 ngroups가 곱셈 전에 SIZE_MAX로 변환됩니다. msg_sz의 래핑된 값이 우연히 entry->msg_sz와 일치하면 다음 줄의 크기 검사(size check)를 우회하게 되며, 하류 소비자들(smb2pdu.c:6742의 rpc_resp->payload_sz를 사용한 memcpy, ksmbd_alloc_user의 resp_ext->ngroups를 사용한 kmemdup)은 검증되지 않은 길이를 신뢰하게 됩니다.

RPC_REQUEST 및 SHARE_CONFIG_REQUEST 경로에서 check_add_overflow()를 사용하여 기능적 페이로드 크기를 제한하지 않고 정수 오버플로를 감지합니다. 사용자 공간의 ksmbd-tools는 NetShareEnumAll과 같은 호출에 대해 NDR 응답을 4096바이트 단위로 증가시키므로, 응답 측에서 하드 전송 한계를 설정하는 것은 실행 불가능합니다. LOGIN_REQUEST_EXT의 경우, resp->ngroups가 부호 있는 [0, NGROUPS_MAX] 범위를 벗어날 경우 즉시 거부하고 ipc_validate_msg()에서 오류를 보고하여 IPC 경계에서 오류가 발생하도록 합니다. 이 경계 설정으로 인해 후속 곱셈과 덧셈 연산은 UINT_MAX보다 훨씬 낮은 범위 내에 머무릅니다. 이제 중복된 ngroups 검사 및 ksmbd_alloc_user()의 pr_err는 제거됩니다.

이는 요청 측(request side)을 강화한 aab98e2dbd64("ksmbd: fix integer overflows on 32 bit systems")의 응답 측(response side) 대응 개념입니다.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

책임이 있는

Linux

예약하다

2026. 03. 09.

모더레이션

수락

항목

VDB-360598

EPSS

0.00015

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!