Hi,

I've gained access to the FreeRADIUS salsa repo and have pushed a new
debian/stretch branch containing last years security upload and the
cherry-picked fixes for #926958

It applies and builds cleanly, I'm currently waiting for a colleague who
runs our Radius proxies to test it.

debdiff attached.

Best Regards,
Bernhard
diff -Nru freeradius-3.0.12+dfsg/debian/changelog freeradius-3.0.12+dfsg/debian/changelog
--- freeradius-3.0.12+dfsg/debian/changelog	2017-08-10 09:05:06.000000000 +0200
+++ freeradius-3.0.12+dfsg/debian/changelog	2019-04-24 17:25:10.000000000 +0200
@@ -1,3 +1,13 @@
+freeradius (3.0.12+dfsg-5+deb9u2) stretch-security; urgency=high
+
+  * Non-maintainer upload (security bugfix)
+  * Cherry-Pick upstream commits to fix CVE-2019-11234 / CVE-2019-11235 /
+    VU#871675 (Invalid Curve Attack and Reflection Attack on EAP-PWD, leading
+    to authentication bypass) (Closes: #926958)
+  * d/gbp.conf: set debian-branch for Stretch
+
+ -- Bernhard Schmidt <be...@debian.org>  Wed, 24 Apr 2019 17:25:10 +0200
+
 freeradius (3.0.12+dfsg-5+deb9u1) stretch-security; urgency=high
 
   * Apply upstream patches:
diff -Nru freeradius-3.0.12+dfsg/debian/gbp.conf freeradius-3.0.12+dfsg/debian/gbp.conf
--- freeradius-3.0.12+dfsg/debian/gbp.conf	2017-05-30 17:18:34.000000000 +0200
+++ freeradius-3.0.12+dfsg/debian/gbp.conf	2019-04-24 17:25:10.000000000 +0200
@@ -1,2 +1,3 @@
 [DEFAULT]
 pristine-tar=True
+debian-branch=debian/stretch
diff -Nru freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-1.patch freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-1.patch
--- freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-1.patch	1970-01-01 01:00:00.000000000 +0100
+++ freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-1.patch	2019-04-24 17:25:10.000000000 +0200
@@ -0,0 +1,59 @@
+From 85497b5ff37ccb656895b826b88585898c209586 Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <mathy.vanh...@nyu.edu>
+Date: Tue, 9 Apr 2019 15:17:19 -0400
+Subject: [PATCH] When processing an EAP-pwd Commit frame, the peer's scalar
+ and elliptic curve point were not validated. This allowed an adversary to
+ bypass authentication, and impersonate any user.
+
+Fix this vulnerability by assuring the received scalar lies within the valid
+range, and by checking that the received element is not the point at infinity
+and lies on the elliptic curve being used.
+---
+ .../rlm_eap/types/rlm_eap_pwd/eap_pwd.c       | 22 +++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
+index 7f91e4b230..848ca2055e 100644
+--- a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
++++ b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
+@@ -373,11 +373,26 @@ int process_peer_commit (pwd_session_t *session, uint8_t *in, size_t in_len, BN_
+ 	data_len = BN_num_bytes(session->order);
+ 	BN_bin2bn(ptr, data_len, session->peer_scalar);
+ 
++	/* validate received scalar */
++	if (BN_is_zero(session->peer_scalar) ||
++	    BN_is_one(session->peer_scalar) ||
++	    BN_cmp(session->peer_scalar, session->order) >= 0) {
++		ERROR("Peer's scalar is not within the allowed range");
++		goto finish;
++	}
++
+ 	if (!EC_POINT_set_affine_coordinates_GFp(session->group, session->peer_element, x, y, bnctx)) {
+ 		DEBUG2("pwd: unable to get coordinates of peer's element");
+ 		goto finish;
+ 	}
+ 
++	/* validate received element */
++	if (!EC_POINT_is_on_curve(session->group, session->peer_element, bn_ctx) ||
++	    EC_POINT_is_at_infinity(session->group, session->peer_element)) {
++		ERROR("Peer's element is not a point on the elliptic curve");
++		goto finish;
++	}
++
+ 	/* check to ensure peer's element is not in a small sub-group */
+ 	if (BN_cmp(cofactor, BN_value_one())) {
+ 		if (!EC_POINT_mul(session->group, point, NULL, session->peer_element, cofactor, NULL)) {
+@@ -391,6 +406,13 @@ int process_peer_commit (pwd_session_t *session, uint8_t *in, size_t in_len, BN_
+ 		}
+ 	}
+ 
++	/* detect reflection attacks */
++	if (BN_cmp(session->peer_scalar, session->my_scalar) == 0 ||
++	    EC_POINT_cmp(session->group, session->peer_element, session->my_element, bn_ctx) == 0) {
++		ERROR("Reflection attack detected");
++		goto finish;
++	}
++
+ 	/* compute the shared key, k */
+ 	if ((!EC_POINT_mul(session->group, K, NULL, session->pwe, session->peer_scalar, bnctx)) ||
+ 	    (!EC_POINT_add(session->group, K, K, session->peer_element, bnctx)) ||
diff -Nru freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-2.patch freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-2.patch
--- freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-2.patch	1970-01-01 01:00:00.000000000 +0100
+++ freeradius-3.0.12+dfsg/debian/patches/CVE-2019-11234-2.patch	2019-04-24 17:25:10.000000000 +0200
@@ -0,0 +1,31 @@
+From ab4c767099f263a7cd4109bcdca80ee74210a769 Mon Sep 17 00:00:00 2001
+From: Matthew Newton <matthew-...@newtoncomputing.co.uk>
+Date: Wed, 10 Apr 2019 10:11:23 +0100
+Subject: [PATCH] fix incorrectly named variable
+
+---
+ src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
+index 848ca2055e..c54f08c030 100644
+--- a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
++++ b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
+@@ -387,7 +387,7 @@ int process_peer_commit (pwd_session_t *session, uint8_t *in, size_t in_len, BN_
+ 	}
+ 
+ 	/* validate received element */
+-	if (!EC_POINT_is_on_curve(session->group, session->peer_element, bn_ctx) ||
++	if (!EC_POINT_is_on_curve(session->group, session->peer_element, bnctx) ||
+ 	    EC_POINT_is_at_infinity(session->group, session->peer_element)) {
+ 		ERROR("Peer's element is not a point on the elliptic curve");
+ 		goto finish;
+@@ -408,7 +408,7 @@ int process_peer_commit (pwd_session_t *session, uint8_t *in, size_t in_len, BN_
+ 
+ 	/* detect reflection attacks */
+ 	if (BN_cmp(session->peer_scalar, session->my_scalar) == 0 ||
+-	    EC_POINT_cmp(session->group, session->peer_element, session->my_element, bn_ctx) == 0) {
++	    EC_POINT_cmp(session->group, session->peer_element, session->my_element, bnctx) == 0) {
+ 		ERROR("Reflection attack detected");
+ 		goto finish;
+ 	}
diff -Nru freeradius-3.0.12+dfsg/debian/patches/series freeradius-3.0.12+dfsg/debian/patches/series
--- freeradius-3.0.12+dfsg/debian/patches/series	2017-07-31 13:06:26.000000000 +0200
+++ freeradius-3.0.12+dfsg/debian/patches/series	2019-04-24 17:25:10.000000000 +0200
@@ -19,3 +19,5 @@
 fr-gv-303.patch
 fr-gv-304.patch
 fr-gv-305.patch
+CVE-2019-11234-1.patch
+CVE-2019-11234-2.patch

Reply via email to