AD-INF-016: Trusts unchanged for over 40 days¶
low medium Infrastructure MITRE ATT&CK T1558 Reads: LDAP
A trust object has not changed for over 40 days although trust passwords change every 30, so the partner is probably gone.
Also known as: stale-trust, inactive-trust
Why it matters¶
Domains in a trust share a password, kept in the trusted domain object. As part of account maintenance the trusting side changes it every 30 days, which needs a secure channel to the other side. A trust object that has not changed for much longer than that usually means the partner was decommissioned, or cannot be reached.
A trust nobody removed is not harmless. The secret stays valid here, and whoever got it from the old partner, or from one of its backups, can forge inter-realm tickets. PingCastle calls this a backdoor.
How ad-doctor detects it¶
ad-doctor reads whenChanged of each trustedDomain object and lists the trust when it
is more than 40 days older than the snapshot. That is PingCastle's T-Inactive rule: 30
days of rotation plus a margin. Each object shows the date, for example
partner.example (last changed 2026-03-02), so a finding keeps its fingerprint from
scan to scan.
The trust with Microsoft Entra Kerberos (trustType 5, or the partner
kerberos.microsoftonline.com) is skipped. A realm trust (trustType 3) is listed with
the word review.
If whenChanged cannot be read, a note names the trust and it is not judged. An older
snapshot has no dates: the check does not run, and a note says so.
Attributes and probes read
trustPartnertrustTypewhenChanged
Severity¶
Medium for a trust between Windows domains. Low when every listed trust is a Kerberos realm trust: those have no Netlogon secure channel, so their age says little.
False positives and limits¶
- Partner down for a while. A long outage looks the same as a dead partner.
- Realm trusts to MIT Kerberos have no rotation by Netlogon. Change the key by hand on a schedule, and accept the finding with that schedule as the reason.
- False negatives.
whenChangedmoves with any write to the object, such as an administrator editing the trust, so a recent date does not prove the partner is alive.
Fix¶
-
Test the trust, which only reads its state:
-
If the partner still exists, fix DNS, firewalls or the secure channel, and watch
whenChangedmove on the next rotation. -
If it is gone, remove the trust, on both sides if a side is left.
netdom trusthas no dry-run mode, so read the command before running it:
Verify¶
To accept the risk instead, add an entry to the file passed with --accept (see accepted risks):
[[accept]]
check = "AD-INF-016"
objects = ["..."] # optional; without it the whole check is accepted
reason = "..."
expires = 2027-03-31
Related checks¶
References¶
Microsoft and vendors
Tools
MITRE ATT&CK
Available since 0.1.4.