guilhem(a)fripost.org wrote:
Full_Name: Guilhem Moulin
Version: 2.4.44
OS: Debian GNU/Linux (Stretch)
URL:
ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (109.225.112.70)
=20
=20
slapd.conf(5) manpage (in both 2.4.44 and in current =E2=80=94 0f320b3 =
=E2=80=94
master)
mentions that authz-policy's "all" flag requires both
source and destin=
ations
authorizations rules to succeed. However if the source rule (the
authe=
ntication
identity's "authzTo" attribute) fails but the
destination rule (the
authorization identity's "authzFrom" attribute) succeeds, then the auth=
orization
is granted, violating the intended semantics and possibly yielding
unau=
thorized
access. See the following log excerpt:
Thanks for the report. Looks like this has been present since commit 1137=
27ba.
Fixed now in git master
=20
SASL proxy authorize [conn=3D1019]: authcid=3D"authcid"
authzid=3D"dn:uid=3Dauthzid,dc=3Dexample,dc=3Dnet"
=3D=3D>slap_sasl_authorized: can uid=3Dauthcid,dc=3Dexample,dc=3Dnet be=
come
uid=3Dauthzid,dc=3Dexample,dc=3Dnet?
=3D=3D>slap_sasl_check_authz: does uid=3Dauthzid,dc=3Dexample,dc=3Dnet =
match
authzTo rule
in uid=3Dauthcid,dc=3Dexample,dc=3Dnet?
<=3D=3Dslap_sasl_check_authz: authzTo check returning 50
=3D=3D>slap_sasl_check_authz: does uid=3Dauthcid,dc=3Dexample,dc=3Dnet =
match
authzFrom
rule in uid=3Dauthzid,dc=3Dexample,dc=3Dnet?
<=3D=3D=3Dslap_sasl_match: comparison returned 0
<=3D=3Dslap_sasl_check_authz: authzFrom check returning 0
<=3D=3D slap_sasl_authorized: return 0
conn=3D1019 op=3D1 BIND authcid=3D"authcid"
authzid=3D"dn:uid=3Dauthzid,dc=3Dexample,dc=3Dnet"
SASL Authorize [conn=3D1019]: proxy authorization allowed
authzDN=3D"uid=3Dauthzid,dc=3Dexample,dc=3Dnet"
=20
AFAICT the problem is in servers/slapd/saslauthz.c:slap_sasl_authorized=
(), and
is also present in master. Here is a naive patch that fails the
author=
ization
if the source rules doesn't verify and SASL_AUTHZ_AND is set in
authz_p=
olicy.
=20
--- a/servers/slapd/saslauthz.c
+++ b/servers/slapd/saslauthz.c
@@ -2077,6 +2077,10 @@ int slap_sasl_authorized( Operation *op,
if( rc =3D=3D LDAP_SUCCESS && !(authz_policy & SASL_AUTHZ_AND)=
) {
goto DONE;
}
+ else if( rc !=3D LDAP_SUCCESS && (authz_policy & SASL_AUTHZ_AN=
D) ) {
+ rc =3D LDAP_INAPPROPRIATE_AUTH;
+ goto DONE;
+ }
}
=20
/* Check destination rules */
=20
=20
--=20
-- Howard Chu
CTO, Symas Corp.
http://www.symas.com
Director, Highland Sun
http://highlandsun.com/hyc/
Chief Architect, OpenLDAP
http://www.openldap.org/project/