[MS-DTYP] ACCESS_ALLOWED_CALLBACK_OBJECT_ACE and ACCESS_DENIED_CALLBACK_OBJECT_ACE: why these ACEs does not count during access control processing?

Yury Strozhevsky 116 Reputation points
2021-05-18T07:51:03.15+00:00

During my own internal testing I found that any ACEs with types ACCESS_ALLOWED_CALLBACK_OBJECT_ACE and ACCESS_DENIED_CALLBACK_OBJECT_ACE does not count during access control processing. I made different variations of the ACEs: with or without ObjectType GUID, with or without ApplicationData field, with ApplicationData having correct "conditional expression" (as described in [MS-DTYP] 2.4.4.17). In all cases such ACEs had no influence on access checking process. At the same time I was able correctly apply any ACCESS_ALLOWED_OBJECT_ACE and ACCESS_DENIED_OBJECT_ACE. Also I am able to build correct ACEs with types ACCESS_ALLOWED_CALLBACK_ACE and ACCESS_DENIED_CALLBACK_ACE.

So, seems like internally in a callback function like "AuthzAccessCheckCallback" for ACCESS_ALLOWED_CALLBACK_OBJECT_ACE and ACCESS_DENIED_CALLBACK_OBJECT_ACE I got "*pbAceApplicable = FALSE".

Additional details: I am making all the security descriptors using my own library on C++, access checking performed by "AccessCheckByTypeResultListAndAuditAlarmByHandle" function. All was tested on Windows 10 under a process having elevated administrator account (with all related privileges enabled). Plus I tested the same code on fresh installation of Windows Server 2019 having configured ActiveDirectory domain - same result, such ACE types does not count during access control checking.

Windows development | Windows Open Specifications
{count} votes

Accepted answer
  1. Jeff McCashland 481 Reputation points Microsoft Employee Moderator
    2021-09-15T23:10:13.78+00:00

    Hello Yury,

    The ACCESS_*_CALLBACK_OBJECT_ACE is a conditional ACE used by the AuthZ framework for Claims-Based Access Control. The AccessCheckByTypeResultListAndAuditAlarmByHandle API uses the common SeAccessCheck routine, which does not recognize Callback Object ACEs. The AuthZ API AuthZAccessCheck is used to assess conditional ACEs.

    [MS-DTYP] accurately describes the ACE, but does not intend to discuss usage. For more information, see [MS-AZOD], and:

    Checking Access with Authz API
    https://learn.microsoft.com/en-us/windows/win32/secauthz/checking-access-with-authz-api

    For this and other API questions, you may get better results by using the windows-api-system-services tag:
    https://learn.microsoft.com/en-us/answers/topics/364719/windows-api-system-services.html

    Best Regards,
    Jeff McCashland
    Microsoft Open Specifications


0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.