pub enum ControlPrimitive {
Show 24 variants
Owns,
WriteDacl,
WriteOwner,
GenericAll,
GenericWrite,
AllExtendedRights,
ForceChangePassword,
AddMember,
AddSelfToGroup,
AddKeyCredential,
WriteRbcd,
WriteSpn,
WriteAltSecurityIdentities,
WriteAllowedToDelegateTo,
WriteGpLink,
ReadGmsaPassword,
ReadLapsPassword,
DcsyncGetChanges,
DcsyncGetChangesAll,
DcsyncGetChangesFiltered,
ReanimateTombstones,
Enroll,
CreateDmsa,
CreateChild(Option<Guid>),
}Expand description
A concrete thing a trustee can do to an object, derived from one ACE.
Variants§
Owns
Owner of the object — can rewrite its DACL at will.
WriteDacl
WRITE_DAC — can grant itself anything else.
WriteOwner
WRITE_OWNER — can take ownership, then rewrite the DACL.
GenericAll
GENERIC_ALL / full control.
GenericWrite
GENERIC_WRITE, or unscoped WRITE_PROP — can write every attribute.
AllExtendedRights
Unscoped CONTROL_ACCESS — holds every extended right, DCSync included.
ForceChangePassword
User-Force-Change-Password.
AddMember
Write member — add any principal to the group.
AddSelfToGroup
Validated write on member — add itself to the group.
AddKeyCredential
Write msDS-KeyCredentialLink — Shadow Credentials.
WriteRbcd
Write msDS-AllowedToActOnBehalfOfOtherIdentity — resource-based constrained delegation.
WriteSpn
Write servicePrincipalName — make the account Kerberoastable (targeted roasting).
WriteAltSecurityIdentities
Write altSecurityIdentities — bind an attacker certificate to the account.
WriteAllowedToDelegateTo
Write msDS-AllowedToDelegateTo — constrained delegation with protocol transition.
WriteGpLink
Write gPLink — attach a hostile GPO to the container.
ReadGmsaPassword
Read the gMSA managed-password blob — derive the account’s keys.
ReadLapsPassword
Read a LAPS password attribute — local administrator on that machine.
DcsyncGetChanges
DS-Replication-Get-Changes.
DcsyncGetChangesAll
DS-Replication-Get-Changes-All — the half that carries secrets.
DcsyncGetChangesFiltered
DS-Replication-Get-Changes-In-Filtered-Set.
ReanimateTombstones
Reanimate-Tombstones — resurrect deleted objects.
Enroll
Certificate-Enrollment / Certificate-AutoEnrollment on a template.
CreateDmsa
Create a delegated MSA under this container (BadSuccessor).
CreateChild(Option<Guid>)
CREATE_CHILD, optionally scoped to one object class GUID.
Implementations§
Source§impl ControlPrimitive
impl ControlPrimitive
Sourcepub fn cost(self) -> u32
pub fn cost(self) -> u32
Attacker cost of traversing this primitive. Lower = cheaper = more dangerous.
0 — already equivalent to control (no action needed).
1 — one write/read and the target is owned.
2 — needs a second step (a coerced auth, a TGT request, a roast).
3 — noisy or slow (offline cracking, waiting for a GPO refresh).
Sourcepub fn impact(self) -> &'static str
pub fn impact(self) -> &'static str
What the attacker gets out of it — the impact line of a report.
Sourcepub fn mitigation(self) -> &'static str
pub fn mitigation(self) -> &'static str
The defensive counterpart — the defence line of a report.
Trait Implementations§
Source§impl Clone for ControlPrimitive
impl Clone for ControlPrimitive
Source§fn clone(&self) -> ControlPrimitive
fn clone(&self) -> ControlPrimitive
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ControlPrimitive
Source§impl Debug for ControlPrimitive
impl Debug for ControlPrimitive
impl Eq for ControlPrimitive
Source§impl From<ControlPrimitive> for EdgeKind
impl From<ControlPrimitive> for EdgeKind
Source§fn from(p: ControlPrimitive) -> Self
fn from(p: ControlPrimitive) -> Self
Source§impl Hash for ControlPrimitive
impl Hash for ControlPrimitive
Source§impl PartialEq for ControlPrimitive
impl PartialEq for ControlPrimitive
impl StructuralPartialEq for ControlPrimitive
Auto Trait Implementations§
impl Freeze for ControlPrimitive
impl RefUnwindSafe for ControlPrimitive
impl Send for ControlPrimitive
impl Sync for ControlPrimitive
impl Unpin for ControlPrimitive
impl UnsafeUnpin for ControlPrimitive
impl UnwindSafe for ControlPrimitive
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.