diff --git a/src/CommonLib/SecurityDescriptor.cs b/src/CommonLib/SecurityDescriptor.cs index e831a9c7..57ffe36b 100644 --- a/src/CommonLib/SecurityDescriptor.cs +++ b/src/CommonLib/SecurityDescriptor.cs @@ -109,7 +109,7 @@ public virtual string GetOwner(Type targetType) { // Blocking External Call -- Possible blocking through locks, and Translate call // see https://github.com/dotnet/runtime/blob/9d5a6a9aa463d6d10b0b0ba6d5982cc82f363dc3/src/libraries/System.Security.AccessControl/src/System/Security/AccessControl/ObjectSecurity.cs#L336 - return _sd.GetOwner(targetType).Value; + return _sd.GetOwner(targetType)?.Value; } } -} \ No newline at end of file +} diff --git a/test/unit/SecurityDescriptorTests.cs b/test/unit/SecurityDescriptorTests.cs new file mode 100644 index 00000000..c257c432 --- /dev/null +++ b/test/unit/SecurityDescriptorTests.cs @@ -0,0 +1,21 @@ +using System.DirectoryServices; +using System.Runtime.Versioning; +using System.Security.Principal; +using SharpHoundCommonLib; +using Xunit; + +namespace CommonLibTest; + +public class SecurityDescriptorTests +{ + [SupportedOSPlatform("windows")] + [WindowsOnlyFact] + public void GetOwner_SecurityDescriptorWithoutOwner_ReturnsNull() + { + var descriptor = new ActiveDirectorySecurityDescriptor(new ActiveDirectorySecurity()); + + var owner = descriptor.GetOwner(typeof(SecurityIdentifier)); + + Assert.Null(owner); + } +}