Constrained Delegation

Shawn M Emery shawn.emery at oracle.com
Sat Sep 7 02:59:55 EDT 2013


We were wanting to provide additional checks beyond constrained 
delegations where the proxy principal has access controls associated for 
which client principals are allowed to be delegated from.  I know that 
this could be controlled by creating authz data that the subsequent 
target service can check, but this seems rather inefficient in a 
non-cross-realm case in which the KDC can easily make these policy checks.

My draft proposal includes a new LDAP attribute of the proxy principal:

     krbAllowedToDelegateFor

which would define the various client principals in which the proxy 
principal is allowed to delegate for.  Perhaps this could be tied into 
group memberships in order to reduce redundant definitions across proxy 
principals.  The ordering of checks by the KDC would be to check to make 
sure that the target principal is in the krbAllowedToDelegateTo set and 
if so then infer the krbAllowedToDelegateFor for the client principal.  
If not defined then then fall-back to the existing behavior of success 
else if the client is found in the krbAllowedToDelegateFor set then 
succeed else fail.  The pseudo-code would like the following:

     {DelegateTo} == proxy && {DelegateFor} == client -> succeed
     {DelegateTo} == proxy && {DelegateFor} == NULL -> succeed
     {DelegateTo} == proxy && {DelegateFor} != client -> fail

The code-points would entail the following:

/* Constrained delegation for */
#define KRB5_KDB_FLAG_CONSTRAINED_DELEGATION_4 0x00000400
#define KRB5_KDB_FLAGS_S4U \
   ( KRB5_KDB_FLAG_PROTOCOL_TRANSITION | 
KRB5_KDB_FLAG_CONSTRAINED_DELEGATION | \
     KRB5_KDB_FLAG_CONSTRAINED_DELEGATION_4 )

#define KRB5_TL_CONSTRAINED_DELEGATION4_ACL 0x0700 /* Each entry is a 
permitted UPN */

##### A list of principals to which a service principal can delegate for.
dn: cn=schema
changetype: modify
add: attributetypes
attributetypes:  ( 1.3.6.1.4.1.5322.21.2.4
                 NAME 'krbAllowedToDelegateFor'
                 EQUALITY caseExactIA5Match
                 SUBSTR caseExactSubstringsMatch
                 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

I just wanted to get your thoughts on the idea before I consider this 
further.

Shawn.
--


More information about the krbdev mailing list