[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 Open Specifications
Windows Open Specifications
Windows: A family of Microsoft operating systems that run across personal computers, tablets, laptops, phones, internet of things devices, self-contained mixed reality headsets, large collaboration screens, and other devices.Open Specifications: Technical documents for protocols, computer languages, standards support, and data portability. The goal with Open Specifications is to help developers open new opportunities to interoperate with Windows, SQL, Office, and SharePoint.
39 questions
{count} votes

Accepted answer
  1. Jeff McCashland 476 Reputation points Microsoft Employee
    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