Abusing LAPS
Default value of ms-DSMachine-Account-QuotaAttribute with LAPS Leading to Persistence and Information Disclosure
Last updated
Default value of ms-DSMachine-Account-QuotaAttribute with LAPS Leading to Persistence and Information Disclosure
Last updated
This blog post explains a misconfiguration based flaw about Local Administrator Password Solution. ms-DS-Machine-Account-Quota
is defined as “The number of computer accounts that a user is allowed to create in a domain." The ms-DS-Machine-Account-Quota
is attribute that defines number of computer accounts could be joined to domain by domain user. ms-Mcs-AdmPwd
is attribute that stores the clear-text local Administrator password for the computer object. It can be set on each computer after LAPS installation for domain environment. “The ‘Local Administrator Password Solution’ (LAPS) provides management of local account passwords of domain joined computers. Passwords are stored in Active Directory (AD) and protected by ACL, so only eligible users can read it or request its reset.” If the ms-DS-Machine-Account-Quota
attribute is default and there is no delegation about domain join permissions to add computer to Active Directory , a domain user can add computer account to active directory domain using the ms-ds-machine-account-quota
attribute which is set “10” value as default. So that user can read ms-Mcs-AdmPwd
attribute value by obtaining Owner Rights on computer that is added by himself even if LAPS configuration is completed correctly .
Domain user gainsAll extended rights
over the computer account even if All extended rights permissions are disabled on Organizational Unit and all descendant objects during LAPS configuration process.(Microsoft LAPS_OperationsGuide.docx document) So that domain user reads password of local administrator user and uses the password for persistence. The user can bypass GPO restrictions obtaining password of local admin user. For example, user can edit registry settings or add own account to local administrators group after GPO which removes undefined users from local administrators group. Also attacker can obtain information about complexity of Administrator passwords and create wordlist according to complexity policies. Then attacker can conduct bruteforce attack against to Administrator user that was not locked never.
Domain name: offensive.local, samAccountName: mkandemir
organizational unit (OU): DomainComputers
Assuming that mkandemir
is a domain user that has privilege of adding computer account to domain offensive.local
up to 10 default (ms-ds-machine-account-quota
) and there is no delegation about domain join permissions to add computer to Active Directory. Laps configuration is applied for DomainComputers
organizational unit that includes adding new computer accounts. According to below configuration , only system and members of Domain Admins group reads local admin passwords so mkandemir domain user must not read local Administrator password (ms-Mcs-AdmPwd) in the teory. Configuration is applied according to Microsoft “LAPS_TechnicalSpecification” Word document. In Stage 6.2, it says “Delegation of permissions on computers accounts is performed on OU (OUs) that contain computer accounts in scope of the solution.”
Permissions for DomainComputers
are following before a computer is added to organizational unit by mkandemir
user.
Open non-domain joined Windows virtual machine.
Download LAPS.x64.msi and install it with powershell module extension (AdmPwd.PS)
Import AdmPwd.PS
Add computer to Active Directory with domain user creds:
Read local admin password and determine password policy:
If you are still a member of local administrators after updating GPO. Read ms-mcs-admpwd attribute via PowerView.ps1:
If you are not a member of local administrators after updating GPO. Read ms-mcs-admpwd attribute via AdmPwd.PS:
offensive\mkandemir
user adds computer (DESKTOP-G8E7GKM
) and obtains local Administrator rights before computer is rebooted. Basic powershell script could be used for joining domain and adding account to local administrators group.
The user restarts computer after this process and logs on DESKTOP-G8E7GKM
computer as offensive\mkandemir
domain user.
a) If there is no a group policy object(GPO) that defines who are local users so that mkandemir user remains local admin after computer is rebooted.
mkandemir
user can read ms-Mcs-AdmPwd
attribute using Get-NetComputer
cmdlet from PowerView.ps1
. However PowerView.ps1
is detected by Windows Defender that must be disabled so local admin right is required. The user can disable Defender and read local administrator password even if All extended rights
permission is removed from users and groups before computer adding process. Above LAPS configuration defines Domain Admins
group is authorized for reading local admin passwords but mkandemir user can gain All Extended Rights
over DESKTOP-G8E7GKM
object that added by himself. This is possible because ms-DS-Machine-Account-Quota
attribute value is 10
defaultly.
b) If there is a group policy object (GPO) that defines who are local users so that mkandemir
user does not remains local admin after computer is rebooted. To read ms-mcs-admpwd attribute value, user must install LAPS management Powershell module (AdmPwd.PS
) before adding computer to Active Directory. So that password could be read using AdmPwd.PS module.
A domain user can escalate privilege over computer that was added by own when a laps gpo is applied to computer. (documented in this blog):
a. The machine account password change is initiated by the computer every 30 days by default.
b. The restricted groups gpo can remove the user from local administrators group.
The user still can escalate privilege to local admin reading ms-mcs-admpwd
after above two situations.
The Laps gpo is applied to PC
organizational unit and lapsAdmin
group delegated for LAPS management.
The user has adding computer right to PC
organizational unit and is not member of lapsAdmin
group.
The user can read ms-mcs-admpwd
attribute of computer that was added by own.
If the ms-DS-Machine-Account-Quota
attribute value is default and there is no delegation about domain join permissions to add computer to Active Directory , a domain user can add computer account to domain using the ms-ds-machine-account-quota
attribute . So that domain user reads password of local administrator user and uses the password for persistence. For example, user can edit registry settings or add own account to local administrators group after GPO which removes undefined users from local administrators group. Restrictions and GPOs that were applied by the AD admins, can be bypassed in the enterprise environments in this way. Also,(defining complexity is possible with GPRegistryPolicy) user can add computer and read LAPS password so that he can obtain information about complexity and length of other Administrator passwords. Because, LAPS carries out similar password property for all computer accounts that group policy is applied.
Microsoft LAPS 6.2 installation document don't handle this issue and they didn't update it. You can make configuration according to Microsoft LAPS_OperationsGuide.docx and LAPS_TechnicalSpecification documents.
https://www.microsoft.com/en-us/download/confirmation.aspx?id=46899
Active Directory by default allows ordinary users to join machines to the domain, up to the limit imposed by the msDS-MachineAccountQuota attribute. The user must have local Administrator privileges on a machine in order to perform the join. When a machine is joined this way, the resultant security configuration on the machine account allows the joining user to read the value of the ms-Mcs-AdmPwd attribute, even after the user in question no longer has local Administrator privileges on a machine.
Machine that have been joined this way can be discovered by querying the msDS-CreatorSid attribute attribute, for example:
You can prevent this issue by disabling the ability of ordinary users to join machines to the domain. This can be done by setting the ms-DS-MachineAccountQuota attribute to zero.
https://docs.microsoft.com/tr-tr/windows/win32/adschema/a-ms-ds-machineaccountquota
https://www.microsoft.com/en-us/download/details.aspx?id=46899
https://docs.microsoft.com/en-us/windows/win32/adschema/a-ms-ds-machineaccountquota
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1