Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System;

namespace SharpHoundCommonLib.OutputTypes
{
public class StringArrayRegistryAPIResult : APIResult
{
public String[] Data { get; set; } = Array.Empty<String>();
}
}
1 change: 1 addition & 0 deletions src/CommonLib/OutputTypes/CARegistryData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ public class CARegistryData
public EnrollmentAgentRegistryAPIResult EnrollmentAgentRestrictions { get; set; }
public BoolRegistryAPIResult IsUserSpecifiesSanEnabled { get; set; }
public BoolRegistryAPIResult RoleSeparationEnabled { get; set; }
public StringArrayRegistryAPIResult DisabledExtensions { get; set; }
}
}
73 changes: 68 additions & 5 deletions src/CommonLib/Processors/CertAbuseProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,10 @@ private RegistryResult GetEnrollmentAgentRights(string target, string caName)
public BoolRegistryAPIResult IsUserSpecifiesSanEnabled(string target, string caName)
{
var ret = new BoolRegistryAPIResult();
var activePolicy = "CertificateAuthority_MicrosoftDefault.Policy";
var subKey =
$"SYSTEM\\CurrentControlSet\\Services\\CertSvc\\Configuration\\{caName}\\PolicyModules\\CertificateAuthority_MicrosoftDefault.Policy";
const string subValue = "EditFlags";
$"SYSTEM\\CurrentControlSet\\Services\\CertSvc\\Configuration\\{caName}\\PolicyModules";
const string subValue = "Active";
var data = Helpers.GetRegistryKeyData(target, subKey, subValue, _log);

ret.Collected = data.Collected;
Expand All @@ -266,17 +267,79 @@ public BoolRegistryAPIResult IsUserSpecifiesSanEnabled(string target, string caN
return ret;
}

if (data.Value == null)
if (data.Value != null)
{
activePolicy = (string)data.Value;
}

var subKey2 =
$"SYSTEM\\CurrentControlSet\\Services\\CertSvc\\Configuration\\{caName}\\PolicyModules\\{activePolicy}";
const string subValue2 = "EditFlags";
var data2 = Helpers.GetRegistryKeyData(target, subKey2, subValue2, _log);

ret.Collected = data2.Collected;
if (!data2.Collected)
{
ret.FailureReason = data2.FailureReason;
return ret;
}

var editFlags = (int)data.Value;
if (data2.Value == null)
{
return ret;
}

var editFlags = (int)data2.Value;
ret.Value = (editFlags & 0x00040000) == 0x00040000;

return ret;
}

[ExcludeFromCodeCoverage]
public StringArrayRegistryAPIResult DisabledExtensions(string target, string caName)
{
var ret = new StringArrayRegistryAPIResult();
var activePolicy = "CertificateAuthority_MicrosoftDefault.Policy";
var subKey =
$"SYSTEM\\CurrentControlSet\\Services\\CertSvc\\Configuration\\{caName}\\PolicyModules";
const string subValue = "Active";
var data = Helpers.GetRegistryKeyData(target, subKey, subValue, _log);

ret.Collected = data.Collected;
if (!data.Collected)
{
ret.FailureReason = data.FailureReason;
return ret;
}

if (data.Value != null)
{
activePolicy = (string)data.Value;
}

var subKey2 =
$"SYSTEM\\CurrentControlSet\\Services\\CertSvc\\Configuration\\{caName}\\PolicyModules\\{activePolicy}";
const string subValue2 = "DisableExtensionList";
var data2 = Helpers.GetRegistryKeyData(target, subKey2, subValue2, _log);

ret.Collected = data2.Collected;
if (!data2.Collected)
{
ret.FailureReason = data2.FailureReason;
return ret;
}

if (data2.Value == null)
{
return ret;
}

var disableExtensionList = (string[])data2.Value;
ret.Data = disableExtensionList;

return ret;
}

/// <summary>
/// This function checks a registry setting on the target host for the specified CA to see if role seperation is enabled.
/// If enabled, you cannot perform any CA actions if you have both ManageCA and ManageCertificates permissions. Only CA admins can modify the setting.
Expand Down Expand Up @@ -479,4 +542,4 @@ public class CertRegistryResult
public byte[] Value { get; set; }
public string FailureReason { get; set; }
}
}
}
Loading