The immediate problem is that the intermediate exchange is leaking the
local dh secret. However there seems to be more going on - someone
familiar with intermediate code should probably take a look.
- the initiator, on receipt of an IKE_SA_INIT responce calls,
ikev2_parent_inR1outI2() which finishes with:
/* If we seen the intermediate AND we are configured to use intermediate */
/* for now, do only one Intermediate Exchange round and proceed
with IKE_AUTH */
crypto_req_cont_func (*pcrc_func) = (ike->sa.st_seen_intermediate
&& (md->pbs[PBS_v2N_INTERMEDIATE_EXCHANGE_SUPPORTED] != NULL) &&
!(md->hdr.isa_xchg == ISAKMP_v2_IKE_INTERMEDIATE)) ?
ikev2_parent_inR1outI2_continue : ikev2_parent_inR1outI2_continue;
submit_v2_dh_shared_secret(st, "ikev2_inR1outI2 KE",
SA_INITIATOR,
NULL, NULL, &st->st_ike_rekey_spis,
pcrc_func);
return STF_SUSPEND;
so it submits a request to finish the DH calculation and compute
dh-shared-secret#1, and then since it is doing an intermediate change
chooses to continue with ikev2_parent_inR1out_intermediate(). This
presumably will send an encrypted IKE_INTERMEDATE request
- the initiator, on receipt of an IKE_INTERMEDIATE response, also
calls ikev2_parent_inR1outI2(), which submits a request to compute
dh-shared-secret#2, but this time chooses to continue with
ikev2_parent_inR1outI2_continue(). This presumably will send an
encrypted IKE_AUTH request.
It's this second continue that is leaking:
- ikev2_parent_inR1out_intermediate() calls
finish_v2_dh_shared_secret() unconditionally which saves
dh-shared-secret#1 in the state
- ikev2_parent_inR1outI2_continue(), only calls
finish_v2_dh_shared_secret() when the response isn't IKE_INTERMEDIATE
(and here it is) so doesn't save dh-shared-secret#2 leaking it
(you'll need to trace through a few calls or sprinkle some debug lines
to see this)
So, does anyone know the back story, and what should be happening? Is
the DH needed for instance?
Andrew
_______________________________________________
Swan-dev mailing list
[email protected]
https://lists.libreswan.org/mailman/listinfo/swan-dev