CVE-2026-89541 in Linux정보

요약

\~에 의해 VulDB • 2026. 09. 12.

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

SUNRPC: gss_unwrap_resp_priv의 길이 검사 강화

gss_unwrap_resp_priv() 함수는 RPCSEC_GSS opaque 길이를 다음과 같이 검증합니다.

offset = (u8 *)(p) - (u8 *)head->iov_base; if (offset + opaque_len > rcv_buf->len) goto unwrap_failed; maj_stat = gss_unwrap(ctx->gc_gss_ctx, offset, offset + opaque_len, rcv_buf);

두 피연산자는 모두 u32이며 합은 u32로 계산됩니다. opaque_len이 0xffffffff에 가까운 응답의 경우, offset + opaque_len는 작은 값으로 오버플로우되어 rcv_buf->len보다 작아지므로 경계 검사가 통과하고 gss_unwrap()가 end < begin 조건으로 호출됩니다. 또한 해당 검사에는 하한 bound도 없으므로 [0, GSS_KRB5_TOK_HDR_LEN) 범위의 모든 opaque_len이 허용되어 gss_krb5_unwrap_v2()로 전달되며, 이 함수의 복호화 전 헤더는 ptr+4 및 ptr+6에서 읽기를 수행하여 토큰을 벗어납니다.

조작된 RPCSEC_GSS 응답을 반환하는 krb5p NFS 서버는 클라이언트를 gss_krb5_unwrap_v2()와 그 뒤에 이어지는 rotate_left() 루프 내의 out-of-bounds reads로 이끌 수 있습니다.

해결책은 단일 결합 검사를 u32 산술에서 안전하며 RFC 4121 최소 외부 토큰 길이를 강제하는 세 가지 보호 장치(guards)로 대체하는 것입니다.

if (offset > rcv_buf->len) goto unwrap_failed; if (opaque_len > rcv_buf->len - offset) goto unwrap_failed; if (opaque_len < GSS_KRB5_TOK_HDR_LEN) goto unwrap_failed;

첫 번째 보호 장치는 두 번째 보호 장치의 뺄셈을 무조건적으로 안전하게 만듭니다. offset은 head kvec 내의 성공적인 xdr_inline_decode()에서 파생되므로, 실제로 이미 해당 경계를 만족합니다. 하한(floor) 검사는 커밋 5b757c2e57a5("SUNRPC: svcauth_gss: enforce krb5 token minimum length")에 추가된 서버 측 검사와 대조를 이룹니다.

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

책임이 있는

Linux

예약하다

2026. 09. 11.

모더레이션

수락

항목

VDB-402644

EPSS

0.00000

출처

Do you need the next level of professionalism?

Upgrade your account now!