Log Dejargonizer

Windows Security Log · Event 4738

Event 4738: A user account was changed

An attribute on an account was modified. It fires constantly and most of it is meaningless, but a handful of the flags it records are among the clearest attack indicators in Active Directory — particularly the one that disables Kerberos pre-authentication.

Also written as Event ID 4738A user account was changed4738 account changed

What it means for you

On a personal computer

A setting on an account was changed. Windows logs this for almost any account edit, so on its own it rarely means anything.

For an analyst

Only the User Account Control field is worth alerting on. The message shows values that changed and dashes for those that did not, so diffing is done for you. DONT_REQ_PREAUTH being set is close to a standalone alert — it makes the account AS-REP roastable and there is essentially no legitimate reason to enable it.

What it looks like

Sanitised. Addresses come from the RFC 5737 documentation ranges.

Sample
A user account was changed.

Subject:
  Security ID:    CORP\jbrooks-adm
  Account Name:   jbrooks-adm
  Account Domain: CORP
  Logon ID:       0x3E9A11

Target Account:
  Security ID:    CORP\svc-legacy
  Account Name:   svc-legacy
  Account Domain: CORP

Changed Attributes:
  SAM Account Name: svc-legacy
  Display Name:     -
  User Principal Name: -
  Home Directory:   -
  Script Path:      -
  Password Last Set: -
  Account Expires:  -
  User Account Control:
    'Don't Require Preauth' - Enabled

The fields that decide it

Everything else in the log line is context.

TargetUserName
The account that was modified.
SubjectUserName
Who changed it.
User Account Control
The account flags that changed. This is the only part of the event that reliably matters.
  • DONT_REQ_PREAUTHKerberos pre-authentication disabled. Makes the account AS-REP roastable — an attacker can request material to crack offline without ever authenticating. Almost never legitimate.
  • DONT_EXPIRE_PASSWDThe password will never expire. Common for service accounts, and a way to make a compromised credential last indefinitely.
  • PASSWD_NOTREQDThe account may have no password at all. Rarely legitimate.
  • TRUSTED_FOR_DELEGATIONUnconstrained delegation. Lets the host impersonate any user that authenticates to it — a serious escalation route.
  • ENCRYPTED_TEXT_PWD_ALLOWEDReversible encryption for the password, which effectively stores it in a recoverable form.
  • NORMAL_ACCOUNTOrdinary account type. Appears in most of these events and means nothing on its own.
Password Last Set
Shown when the password changed as part of the modification.
SAM Account Name
The account name, which can itself be changed here — worth noticing when it is.
Account Expires
When the account stops working. Extending this on a temporary account deserves a question.

Ordinary reasons this happens

Most of the time it is one of these.

  • Ordinary directory maintenance — job titles, descriptions, group memberships, contact details.
  • Identity management tooling synchronising attributes from an HR system, which produces very high volume.
  • Password changes and resets, each of which also writes a 4738.
  • Enabling or disabling an account, which writes this alongside 4722 or 4725.
  • Service account configuration during a legitimate application deployment.

When it is not ordinary

Making an account AS-REP roastable.

What gives it awayDONT_REQ_PREAUTH appearing in the User Account Control field. The attacker can then request encrypted material for the account and crack it offline without ever needing to authenticate.

ATT&CK T1558.004

Making a compromised credential permanent.

What gives it awayDONT_EXPIRE_PASSWD set on an account that previously rotated, so a stolen password keeps working indefinitely.

ATT&CK T1098

Configuring delegation to escalate privilege.

What gives it awayTRUSTED_FOR_DELEGATION set, which allows impersonation of any account that authenticates to that host.

ATT&CK T1134.001

Storing a password in recoverable form.

What gives it awayENCRYPTED_TEXT_PWD_ALLOWED set, which is effectively reversible storage of the credential.

ATT&CK T1098

Removing the password requirement.

What gives it awayPASSWD_NOTREQD set, allowing the account to have no password at all.

ATT&CK T1098

What to do next

  1. Ignore everything except the User Account Control line. That is where the signal is.
  2. Windows shows a dash for values that did not change, so read only what has an actual value next to it.
  3. Treat DONT_REQ_PREAUTH as a finding until proven otherwise — it has almost no legitimate use.
  4. Check who made the change and whether they administer that account.
  5. For delegation flags, establish what the host is and whether delegation was ever approved.
  6. Correlate with 4768 for the same account — a roastable account is usually requested shortly after being made roastable.

Queries to run

kql The four flag changes that actually matter. In a healthy environment this returns almost nothing.
SecurityEvent | where EventID == 4738 | where RenderedDescription has_any ('DONT_REQ_PREAUTH','PASSWD_NOTREQD','TRUSTED_FOR_DELEGATION','ENCRYPTED_TEXT_PWD_ALLOWED') | project TimeGenerated, Computer, Target = TargetUserName, ChangedBy = SubjectUserName, RenderedDescription
kql AS-REP roasting preparation. Worth alerting on directly.
SecurityEvent | where EventID == 4738 and RenderedDescription contains 'DONT_REQ_PREAUTH' | project TimeGenerated, Computer, TargetUserName, SubjectUserName
powershell The current state rather than the change. Run it periodically — it finds accounts that were made roastable before you started collecting logs.
Get-ADUser -Filter { DoesNotRequirePreAuth -eq $true } -Properties DoesNotRequirePreAuth | Select-Object SamAccountName, DistinguishedName
splunk
index=wineventlog EventCode=4738 ("DONT_REQ_PREAUTH" OR "PASSWD_NOTREQD" OR "TRUSTED_FOR_DELEGATION") | table _time Account_Name Security_ID Message

Common questions

Why does Event 4738 fire so often?

Because almost any modification to an account writes one — password changes, enabling and disabling, attribute updates from HR synchronisation, group changes. In a domain with identity management tooling it is one of the highest-volume account events. Filter to the User Account Control field and the volume collapses to something readable.

What does 'Don't Require Preauth' mean and why does it matter?

It disables Kerberos pre-authentication for that account. With it off, anyone can ask a domain controller for encrypted material for the account and try to crack the password offline, without ever authenticating or triggering a failed logon. It is called AS-REP roasting, and there is almost no legitimate reason to enable the flag — treat it as a finding.

Why are most fields in Event 4738 shown as a dash?

A dash means that attribute did not change. Windows lists the full set of attributes every time and fills in only the ones that were modified, so the dashes are how you tell what the change actually was.

Is 'Password Never Expires' worth alerting on?

It is worth reviewing rather than alerting. It is genuinely common on service accounts where rotation would break an application. What matters is it appearing on a normal user account, or being newly set on an account that previously rotated — that turns a stolen password into permanent access.

Read next

Mentioned by

Vendor documentation

Last reviewed 28 August 2026