]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
NTLM/Negotiate: Fix crash on bad helper TT responses (#1645)
authorAlexey <bigalex934@gmail.com>
Sun, 21 Jan 2024 16:24:57 +0000 (16:24 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Tue, 23 Jan 2024 17:01:14 +0000 (17:01 +0000)
Helper lookup may be made without a client HTTP Request,
(stored in lm_request->request). But in Helper::TT cases the
lm_request->request was dereferenced without any checks.

src/auth/negotiate/UserRequest.cc
src/auth/ntlm/UserRequest.cc

index abe07d89ce8b35778049a4a8f1509075da12818a..83756967fdcffd20331e414ed24531ff0b3c1570 100644 (file)
@@ -301,8 +301,11 @@ Auth::Negotiate::UserRequest::HandleReply(void *data, const Helper::Reply &reply
     case Helper::TT:
         /* we have been given a blob to send to the client */
         safe_free(lm_request->server_blob);
-        lm_request->request->flags.mustKeepalive = true;
-        if (lm_request->request->flags.proxyKeepalive) {
+
+        if (lm_request->request)
+            lm_request->request->flags.mustKeepalive = true;
+
+        if (lm_request->request && lm_request->request->flags.proxyKeepalive) {
             const char *tokenNote = reply.notes.findFirst("token");
             lm_request->server_blob = xstrdup(tokenNote);
             auth_user_request->user()->credentials(Auth::Handshake);
index f6f4d87ac9c53b8f8ea43cb701dffb5e674c1208..2fb2995154051f1f47a2fec6b912d2466aa013fe 100644 (file)
@@ -295,8 +295,11 @@ Auth::Ntlm::UserRequest::HandleReply(void *data, const Helper::Reply &reply)
     case Helper::TT:
         /* we have been given a blob to send to the client */
         safe_free(lm_request->server_blob);
-        lm_request->request->flags.mustKeepalive = true;
-        if (lm_request->request->flags.proxyKeepalive) {
+
+        if (lm_request->request)
+            lm_request->request->flags.mustKeepalive = true;
+
+        if (lm_request->request && lm_request->request->flags.proxyKeepalive) {
             const char *serverBlob = reply.notes.findFirst("token");
             lm_request->server_blob = xstrdup(serverBlob);
             auth_user_request->user()->credentials(Auth::Handshake);