Event ID 4720: A User Account Was Created — Who Created It, and How
Published
A new user object was created — the event names the account that requested the creation, the new account and its SID, and the attributes the object was given at creation time.
Logged on: Microsoft states the event generates on domain controllers, member servers, and workstations, so the Computer field is the machine where the user object was created — a domain controller for a domain account, the machine itself for a local one.
Microsoft's title
4720(S): A user account was created.
Source: Microsoft's event 4720 documentation · field names checked against it on every build
Fields that matter in an investigation
| Field | XML / Sentinel | What it tells you |
|---|---|---|
| Account Name | SubjectUserName | The name of the account that requested the create user account operation — the administrator, service or attacker-controlled identity that made the change. |
| Logon ID | SubjectLogonId | Hexadecimal value that correlates this event with recent events carrying the same Logon ID, such as the 4624 that created the creator's session, so you can trace where that admin session came from. |
| Security ID | TargetSid | SID of the created user account; the identifier that survives a rename and the value you pivot on to find group additions and logons by the new account. |
| Account Domain | TargetDomainName | Domain name of the created user account; for local accounts this field contains the name of the computer the new account belongs to, which is how you tell a local account from a domain one. |
| SAM Account Name | SamAccountName | The pre-Windows 2000 logon name written to the new object. Microsoft's monitoring guidance says this field must contain the user account name, so an empty value or a bare hyphen is an anomaly. |
| User Principal Name | UserPrincipalName | Internet-style login name of the new object. Microsoft notes it should typically not be empty for new user accounts, but that for local users it is not applicable and shows a hyphen. |
| Primary Group ID | PrimaryGroupId | RID of the new object's primary group. Microsoft documents 513 as the typical value for domain and local users and says other values should be monitored. |
| New UAC Value | NewUacValue | Flags that control password, lockout, disable/enable, script, and other behavior for the account — the SAM account flags the object was created with. |
| Script Path | ScriptPath | Path of the account's logon script. Microsoft lists it among the fields that are typically a hyphen for new user accounts, so a populated value at creation is worth chasing. |
| SID History | SidHistory | Previous SIDs carried by the object. Microsoft states this field is always set to a hyphen unless the account was migrated from another domain, making any other value a strong signal. |
What it records
Event 4720 is the Audit User Account Management subcategory recording that a user object was created. Microsoft’s description is deliberately broad: “This event generates every time a new user object is created”, and it “generates on domain controllers, member servers, and workstations”. That means one event covers both a helpdesk creating a domain user in Active Directory Users and Computers and a process creating a local account on a workstation — the Computer field and the new account’s Account Domain are what separate the two cases.
The event has three useful blocks. Subject names who made the change: Security ID, Account Name, Account Domain and Logon ID, the last of which Microsoft describes as a value “that can help you correlate this event with recent events that might contain the same Logon ID”, giving event 4624 as its example. New Account names the object that was created, with its SID, name and domain. Attributes is the snapshot of the object as created: SAM Account Name, Display Name, User Principal Name, Home Directory, Home Drive, Script Path, Profile Path, User Workstations, Password Last Set, Account Expires, Primary Group ID, Allowed To Delegate To, Old UAC Value, New UAC Value, User Parameters, SID History and Logon Hours. Old UAC Value, per the documentation, “is always ‘0x0’ for new accounts”. A final Privileges field lists the user privileges used during the operation, and may appear as a hyphen.
When it matters
Account creation is a normal administrative act in most environments, so severity comes from who did it, where, when, and what the object looks like. Microsoft notes that “Some organizations monitor every 4720 event” — a reasonable position on domain controllers and on servers where no accounts should ever be created.
| Pattern | Reading |
|---|---|
| 4720 on a member server or workstation with no local-account process | A local account created outside your build process, often for persistence |
| 4720 followed within minutes by 4732 adding the new SID to Administrators | Account creation plus privilege grant — treat as one action |
| Creator is an account that never administers users, or a session from an unfamiliar source | Follow the Subject Logon ID back to its 4624 |
| SAM Account Name or User Principal Name empty or a hyphen | Microsoft’s table says the field must contain the user account name, and that an empty value “might indicate an anomaly” |
| Home Directory, Home Drive, Script Path, Profile Path or User Workstations populated | Microsoft: “Typically these fields are - for new user accounts. Other values might indicate an anomaly and should be monitored.” |
| Primary Group ID not 513 | Microsoft: “Typically, the Primary Group value is 513 for domain and local users. Other values should be monitored.” |
| SID History populated when no account was migrated | Microsoft: “This field will always be set to - unless the account was migrated from another domain.” |
| New UAC Value with ‘Server Trust Account’ enabled | Microsoft: “Should never be enabled for user accounts. Applies only to domain controller (computer) accounts.” |
An account created disabled and later used will fail its logons with 0xC0000072, which is a cheap way to find backdoor accounts that were never enabled correctly.
How to investigate
Start with every creation and who performed it:
SecurityEvent
| where TimeGenerated > ago(7d)
| where EventID == 4720
| project TimeGenerated, Computer,
Creator = strcat(SubjectDomainName, "\\", SubjectUserName), SubjectLogonId,
NewAccount = strcat(TargetDomainName, "\\", TargetUserName), TargetSid
| order by TimeGenerated desc
Then apply Microsoft’s attribute recommendations by reading the values out of the event XML, which is where they live:
SecurityEvent
| where TimeGenerated > ago(30d)
| where EventID == 4720
| parse EventData with * 'SamAccountName">' SamName '<' *
| parse EventData with * 'UserPrincipalName">' Upn '<' *
| parse EventData with * 'PrimaryGroupId">' PrimaryGroupId '<' *
| parse EventData with * 'ScriptPath">' ScriptPath '<' *
| parse EventData with * 'SidHistory">' SidHistory '<' *
| parse EventData with * 'NewUacValue">' NewUacValue '<' *
| where SamName in ("", "-") or PrimaryGroupId != "513" or ScriptPath != "-" or SidHistory != "-"
| project TimeGenerated, Computer, SubjectUserName, TargetUserName, TargetDomainName,
SamName, Upn, PrimaryGroupId, ScriptPath, SidHistory, NewUacValue
| order by TimeGenerated desc
Remember that User Principal Name is a hyphen for local users, so filter on it only for domain accounts.
The highest-value pivot is the new account’s SID. Join it to the member additions that followed, which is the creation-plus-privilege pattern:
let created = SecurityEvent
| where TimeGenerated > ago(7d) and EventID == 4720
| project CreateTime = TimeGenerated, Computer, Creator = SubjectUserName,
NewAccount = TargetUserName, NewSid = TargetSid;
SecurityEvent
| where TimeGenerated > ago(7d) and EventID == 4732
| project GroupTime = TimeGenerated, GroupHost = Computer, AddedBy = SubjectUserName,
Group = TargetUserName, MemberSid, MemberName
| join kind=inner created on $left.MemberSid == $right.NewSid
| where GroupTime between (CreateTime .. CreateTime + 1h)
| project CreateTime, GroupTime, Computer, Creator, NewAccount, Group, AddedBy, GroupHost
| order by CreateTime desc
From there, take the Subject Logon ID back to the 4624 that created the administrator’s session and to 4672 if that session held special privileges, and follow the new SID forward through 4722, 4724, 4738 and its first 4624. If the account was deleted again (4726) shortly after use, or the audit log was cleared (1102) around the same window, treat the creation as part of an intrusion rather than an administrative mistake. Without a SIEM, export the Security log as XML from Event Viewer and load it into the free browser log analyzer.
Free tools for this
- userAccountControl decoder →Decode Old/New UAC Value and the %%20xx codes of this event, or any userAccountControl value such as 514 or 66048.
Related events and codes
- Event ID 4624 An account was successfully logged on.
- Event ID 4672 Special privileges assigned to new logon.
- Event ID 4722 A user account was enabled.
- Event ID 4723 An attempt was made to change an account's password.
- Event ID 4724 An attempt was made to reset an account's password.
- Event ID 4725 A user account was disabled.
- Event ID 4726 A user account was deleted.
- Event ID 4732 A member was added to a security-enabled local group.
- Event ID 4738 A user account was changed.
- 0xC0000072 Windows refused the logon because the account is disabled — the name exists, so the useful question is who or what still tries to use it, from where, and why.
Detect it
Frequently Asked Questions
- Does a 4720 mean the new account can log on straight away?
- The event only records that the user object was created. Its state at creation is described by New UAC Value, which Microsoft says "specifies flags that control password, lockout, disable/enable, script, and other behavior for the user or computer account". A later enable is recorded separately as 4722, and a password set or reset as 4723 or 4724, so read the sequence rather than the single event.
- Why do the attribute fields look like %%1794 instead of text?
- Microsoft's own event XML for 4720 shows PasswordLastSet, AccountExpires, UserAccountControl and LogonHours as %%-prefixed values, while the field descriptions describe the text an analyst sees, such as <never> for Password Last Set on a manually created account. If you parse raw XML or the EventData column you will get the numeric form, so normalise it before you compare values across events.
- Which 4720 fields are worth alerting on?
- Microsoft's monitoring table lists SAM Account Name or User Principal Name being empty or a hyphen; Home Directory, Home Drive, Script Path, Profile Path or User Workstations holding anything other than a hyphen; Account Expires other than <never>; Primary Group ID other than 513; Allowed To Delegate To other than a hyphen; Old UAC Value other than 0x0; and SID History other than a hyphen. It also flags account control flags such as 'Don't Require Preauth' and 'Trusted For Delegation' being enabled on a new account.
- Can I tell from 4720 whether the account was created locally or in the domain?
- Yes, from the Account Domain of the new account and the computer that logged the event. For local accounts Microsoft documents that the field contains the name of the computer the account belongs to, and User Principal Name shows a hyphen because it is not applicable; a domain account shows the domain name and the event is written on a domain controller.
Find every 4720 in your own logs
Load a Windows Security event export into the free browser analyzer to group events by account, source address and status, with password spraying, brute force and lockout storms flagged. Nothing is uploaded.
Investigating something right now? LogTriage checks every address in the file against threat intelligence and writes the incident report: 10 analyses a month free. The incident pack adds the in-depth AI analysis and files up to 100 MB: 25 analyses for $19, one payment, no subscription. Pricing
Every query on this site's reference pages, the Sigma rules and a cheat sheet in one download: the Incident Response Kit, $29 once.