CVE-2026-89550 in Linux
요약
\~에 의해 VulDB • 2026. 09. 12.
Linux 커널에서 다음 취약점이 해결되었습니다:
SUNRPC: svcauth_gss: krb5 토큰의 최소 길이 강제 적용
svcauth_gss_unwrap_priv()는 버퍼를 gss_unwrap()에 전달하기 전에 네트워크로 전송된 불투명 데이터(opaque) 길이에 대해 상한선만 검증합니다.
if (len > xdr_stream_remaining(xdr)) goto unwrap_failed; offset = xdr_stream_pos(xdr); ... maj_stat = gss_unwrap(ctx, offset, offset + len, buf);
네트워크로 전송된 값인 `len`은 변경되지 않은 채 krb5 언랩 경로의 상한선으로 유입되므로, [0, 16] 범위의 len은 이 검사를 통과하여 gss_unwrap()에 전달됩니다. krb5 v2 컨텍스트의 경우 gss_krb5_unwrap_v2()로 진입하며, 여기서는 ptr+4와 ptr+6에서 RFC 4121 토큰 헤더 필드(16바이트)를 읽은 후 무결성 검사 전에 rotate_left()를 호출합니다. 하위 헤더 길이가 지정된 경우 헤더 판독이 토큰 범위를 벗어나며, _rotate_left()'s `shift %= buf->len` 경로에서 truncated token으로 인해 buf->len이 0으로 설정되면 0 나누기 오류가 발생할 수 있습니다. 헤더만 있는 토큰(len == 16)도 마찬가지로 유효하지 않습니다: RRC 필드가 0이 아니고 불투명 데이터 블롭(blob)이 XDR 버퍼 경계에서 끝나는 경우, rotate_left()는 길이가 0인 하위 서버퍼(subbuffer)를 생성하여 동일한 0 나누기 오류에 도달합니다.
krb5 언랩 코어부에 도달하기 전에 서버 진입점에서 토큰을 거부하십시오. 유효한 봉인된 RFC 4121 토큰에는 16바이트 헤더와 최소한의 암호화된 페이로드가 포함되어야 합니다.
기존 상한선 검사 직후에 최소 길이 검사를 추가하여 수정합니다:
if (len <= GSS_KRB5_TOK_HDR_LEN) goto unwrap_failed;
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.