]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
socks_gssapi: reject too long tokens
authorDaniel Stenberg <daniel@haxx.se>
Mon, 22 Sep 2025 09:08:43 +0000 (11:08 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 24 Sep 2025 12:07:03 +0000 (14:07 +0200)
If GSS returns a token to use that is longer than 65535 bytes, it can't
be transmitted since the length field is an unisgned 16 bit field and
thus needs to trigger an error.

Reported in Joshua's sarif data

Closes #18681

lib/socks_gssapi.c

index 0a7ddd5ff1dc9177c51ac11568f30c3d4d07826d..037515e576f61d7bb302c532b37ab76f5dbc0a59 100644 (file)
@@ -195,7 +195,9 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf,
     if(gss_token != GSS_C_NO_BUFFER)
       gss_release_buffer(&gss_status, &gss_recv_token);
     if(check_gss_err(data, gss_major_status,
-                     gss_minor_status, "gss_init_sec_context")) {
+                     gss_minor_status, "gss_init_sec_context") ||
+       /* the size needs to fit in a 16 bit field */
+       (gss_send_token.length > 0xffff)) {
       gss_release_name(&gss_status, &server);
       gss_release_buffer(&gss_status, &gss_recv_token);
       gss_release_buffer(&gss_status, &gss_send_token);