** Description changed:

- gss-ntlmmssp sequence numbers are incorrect in 0.6.0. In 0.7.0 the
- following patch (which is most of the difference between the two
- versions) fixes sequence numbers. We discovered this testing OMI from
- Linux to Windows, but don't have a simpler test case we can provide.
+ [Impact]
+ gss-ntlmmssp sequence numbers are incorrect in 0.6.0. 0.7.0 fixes sequence 
numbers. We discovered this testing OMI from Linux to Windows, but don't have a 
simpler test case we can provide.
  
- ./ntlm_crypto.c
- 564a565,592
- > int ntlm_reset_rc4_state(uint32_t flags, bool recv,
- >                          struct ntlm_key *session_key,
- >                          struct ntlm_signseal_state *state)
- > {
- >     struct ntlm_buffer rc4_key;
- >     int ret;
- >
- >     if (!(flags & NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY)) {
- >         return no_ext_sec_handle(flags, session_key,
- >                                  &state->send.seal_handle);
- >     }
- >
- >     if (recv) {
- >         RC4_FREE(&state->recv.seal_handle);
- >         rc4_key.data = state->recv.seal_key.data;
- >         rc4_key.length = state->recv.seal_key.length;
- >         ret = RC4_INIT(&rc4_key, NTLM_CIPHER_DECRYPT,
- >                        &state->recv.seal_handle);
- >     } else {
- >         RC4_FREE(&state->send.seal_handle);
- >         rc4_key.data = state->send.seal_key.data;
- >         rc4_key.length = state->send.seal_key.length;
- >         ret = RC4_INIT(&rc4_key, NTLM_CIPHER_ENCRYPT,
- >                        &state->send.seal_handle);
- >     }
- >     return ret;
- > }./gss_sec_ctx.c
- 432a433
- >         if (actual_mech_type) *actual_mech_type = 
discard_const(&gssntlm_oid);
- 992a994
- >         if (mech_type) *mech_type = discard_const(&gssntlm_oid);
- 1093a1096,1153
- > uint32_t gssntlm_set_seq_num(uint32_t *minor_status,
- >                              struct gssntlm_ctx *ctx,
- >                              const gss_buffer_t value)
- > {
- >     uint32_t retmin;
- >     uint32_t retmaj;
- >
- >     if (ctx->gss_flags & GSS_C_DATAGRAM_FLAG) {
- >         if (value->length != 4) {
- >             return GSSERRS(ERR_BADARG, GSS_S_FAILURE);
- >         }
- >         memcpy(&ctx->crypto_state.recv.seq_num,
- >                value->value, value->length);
- >         ctx->crypto_state.send.seq_num = ctx->crypto_state.recv.seq_num;
- >     } else {
- >         return GSSERRS(ERR_WRONGCTX, GSS_S_FAILURE);
- >     }
- >
- >     return GSSERRS(0, GSS_S_COMPLETE);
- > }
- >
- > gss_OID_desc reset_crypto_oid = {
- >     GSS_NTLMSSP_RESET_CRYPTO_OID_LENGTH,
- >     discard_const(GSS_NTLMSSP_RESET_CRYPTO_OID_STRING)
- > };
- >
- > uint32_t gssntlm_reset_crypto(uint32_t *minor_status,
- >                               struct gssntlm_ctx *ctx,
- >                               const gss_buffer_t value)
- > {
- >     uint32_t retmin;
- >     uint32_t retmaj;
- >
- >     if (value->length != 4) {
- >         return GSSERRS(ERR_BADARG, GSS_S_FAILURE);
- >     }
- >
- >     /* reset crypto state */
- >     if (ctx->neg_flags & (NTLMSSP_NEGOTIATE_SIGN |
- >                             NTLMSSP_NEGOTIATE_SEAL)) {
- >         uint32_t val;
- >
- >         memcpy(&val, value->value, value->length);
- >
- >         /* A val of 1 means we want to reset the verifier handle,
- >          * which is the receive handle for NTLM, otherwise we reset
- >          * the send handle. */
- >         retmin = ntlm_reset_rc4_state(ctx->neg_flags, (val == 1),
- >                                       &ctx->exported_session_key,
+ [Test case]
+ test OMI
  
- >                                       &ctx->crypto_state);
- >         if (retmin) {
- >             return GSSERRS(retmin, GSS_S_FAILURE);
- >         }
- >     }
- >
- >     return GSSERRS(0, GSS_S_COMPLETE);
- > }
- >
- 1114,1129c1174,1176
- <         if (ctx->gss_flags & GSS_C_DATAGRAM_FLAG) {
- <
- <             if (value->length != 4) {
- <                 set_GSSERR(ERR_BADARG);
- <                 goto done;
- <             }
- <
- <             memcpy(&ctx->crypto_state.recv.seq_num,
- <                    value->value, value->length);
- <             ctx->crypto_state.send.seq_num = ctx->crypto_state.recv.seq_num;
- <             set_GSSERRS(0, GSS_S_COMPLETE);
- <             goto done;
- <         } else {
- <             set_GSSERRS(ERR_WRONGCTX, GSS_S_FAILURE);
- <             goto done;
- <         }
- ---
- >         return gssntlm_set_seq_num(minor_status, ctx, value);
- >     } else if (gss_oid_equal(desired_object, &reset_crypto_oid)) {
- >         return gssntlm_reset_crypto(minor_status, ctx, value);
- 1132,1135c1179
- <     set_GSSERRS(ERR_BADARG, GSS_S_UNAVAILABLE);
- <
+ [Regression potential]
+ none, since the old package simply didn't work due to a packaging goof 
(config file had awrong name)

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1653278

Title:
  Update gss-ntlmssp to 0.7.0 to correct sequence numbering mismatch

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gss-ntlmssp/+bug/1653278/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to