]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
CVE-2015-5370: s3:rpc_client: make use of dcerpc_pull_auth_trailer()
authorStefan Metzmacher <metze@samba.org>
Tue, 7 Jul 2015 11:05:01 +0000 (13:05 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 30 Mar 2016 02:10:12 +0000 (04:10 +0200)
The does much more validation than dcerpc_pull_dcerpc_auth().

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11344

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Günther Deschner <gd@samba.org>
source3/rpc_client/cli_pipe.c

index 6b1b40aa054abdccf36944c5a45958014fcd1fe8..49a8b2f588296994420d707bf9547e74de65418c 100644 (file)
@@ -1807,17 +1807,15 @@ static void rpc_pipe_bind_step_one_done(struct tevent_req *subreq)
                return;
 
        default:
-               /* Paranoid lenght checks */
-               if (pkt->frag_length < DCERPC_AUTH_TRAILER_LENGTH
-                                               + pkt->auth_length) {
-                       tevent_req_nterror(req,
-                                       NT_STATUS_INFO_LENGTH_MISMATCH);
+               if (pkt->auth_length == 0) {
+                       tevent_req_nterror(req, NT_STATUS_RPC_PROTOCOL_ERROR);
                        return;
                }
+
                /* get auth credentials */
-               status = dcerpc_pull_dcerpc_auth(talloc_tos(),
-                                                &pkt->u.bind_ack.auth_info,
-                                                &auth, false);
+               status = dcerpc_pull_auth_trailer(pkt, talloc_tos(),
+                                                 &pkt->u.bind_ack.auth_info,
+                                                 &auth, NULL, true);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(0, ("Failed to pull dcerpc auth: %s.\n",
                                  nt_errstr(status)));