Skip to content

Commit 5972e41

Browse files
committed
Fix overeager finding of signatures.
The new implementation of VisitAll in #22 walked the signature tree as deep as possible. The problem with this is that counter signatures from nested signatures will be included as counter signatures from the root signature. This change changes the behavior so that VisitAll only follows nesting of the same type. A new flag on SignatureKind has been added, Universal, so that the visitation keeps the eager behavior when it's really wanted.
1 parent 75ed394 commit 5972e41

11 files changed

+32
-18
lines changed

AuthenticodeLint/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
[assembly: ComVisible(false)]
1313
[assembly: Guid("ff77faed-3274-4c0e-bda0-98d8a5fa831e")]
1414

15-
[assembly: AssemblyVersion("0.4.0.0")]
16-
[assembly: AssemblyFileVersion("0.4.0.0")]
15+
[assembly: AssemblyVersion("0.7.0.0")]
16+
[assembly: AssemblyFileVersion("0.7.0.0")]

AuthenticodeLint/Rules/10002-NoWeakFileDigestAlgorithmsRule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class NoWeakFileDigestAlgorithmsRule : IAuthenticodeSignatureRule
1212

1313
public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verboseWriter, CheckConfiguration configuration)
1414
{
15-
var signatures = graph.VisitAll(SignatureKind.AnySignature);
15+
var signatures = graph.VisitAll(SignatureKind.AnySignature | SignatureKind.Deep);
1616
var result = RuleResult.Pass;
1717
foreach(var signature in signatures)
1818
{

AuthenticodeLint/Rules/10003-TimestampedRule.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Linq;
34

45
namespace AuthenticodeLint.Rules
56
{
@@ -17,7 +18,7 @@ public unsafe RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogg
1718
var pass = true;
1819
foreach (var signature in signatures)
1920
{
20-
var counterSignatures = signature.VisitAll(SignatureKind.AnyCounterSignature);
21+
var counterSignatures = signature.VisitAll(SignatureKind.AnyCounterSignature).ToList();
2122
var isSigned = false;
2223
var strongSign = false;
2324
foreach (var counterSignature in counterSignatures)

AuthenticodeLint/Rules/10004-PublisherInformationRule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class PublisherInformationPresentRule : IAuthenticodeSignatureRule
1313

1414
public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verboseWriter, CheckConfiguration configuration)
1515
{
16-
var signatures = graph.VisitAll(SignatureKind.AnySignature);
16+
var signatures = graph.VisitAll(SignatureKind.AnySignature | SignatureKind.Deep);
1717
var result = RuleResult.Pass;
1818
foreach (var signature in signatures)
1919
{

AuthenticodeLint/Rules/10005-PublisherInformationUrlHttpsRule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class PublisherInformationUrlHttpsRule : IAuthenticodeSignatureRule
1414

1515
public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verboseWriter, CheckConfiguration configuration)
1616
{
17-
var signatures = graph.VisitAll(SignatureKind.AnySignature);
17+
var signatures = graph.VisitAll(SignatureKind.AnySignature | SignatureKind.Deep);
1818
var result = RuleResult.Pass;
1919
foreach(var signature in signatures)
2020
{

AuthenticodeLint/Rules/10010-NoUnknownCertificatesRule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verb
1717
var result = RuleResult.Pass;
1818
//We exclude Authenticode timestamps because they cannot contain "additional" certificates but rather
1919
//Use their parent. Including Authenticode timestamps will produce duplicate warnings.
20-
var signatures = graph.VisitAll(SignatureKind.AnySignature | SignatureKind.Rfc3161Timestamp);
20+
var signatures = graph.VisitAll(SignatureKind.AnySignature | SignatureKind.Rfc3161Timestamp | SignatureKind.Deep);
2121
foreach (var signature in signatures)
2222
{
2323
var allEmbeddedCertificates = signature.AdditionalCertificates.Cast<X509Certificate2>().ToList();

AuthenticodeLint/Rules/10011-StrongKeyLengthRule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class StrongKeyLengthRule : IAuthenticodeSignatureRule
1515

1616
public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verboseWriter, CheckConfiguration configuration)
1717
{
18-
var signatures = graph.VisitAll(SignatureKind.Any);
18+
var signatures = graph.VisitAll(SignatureKind.Any | SignatureKind.Any);
1919
var result = RuleResult.Pass;
2020
foreach (var signature in signatures)
2121
{

AuthenticodeLint/Rules/10013-MaxKeyLengthRule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class MaxKeyLengthRule : IAuthenticodeSignatureRule
1717

1818
public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verboseWriter, CheckConfiguration configuration)
1919
{
20-
var signatures = graph.VisitAll(SignatureKind.Any);
20+
var signatures = graph.VisitAll(SignatureKind.Any | SignatureKind.Deep);
2121
var result = RuleResult.Pass;
2222
foreach (var signature in signatures)
2323
{

AuthenticodeLint/Rules/CertificateChainRuleBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public abstract class CertificateChainRuleBase : IAuthenticodeSignatureRule
1313

1414
public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verboseWriter, CheckConfiguration configuration)
1515
{
16-
var signatures = graph.VisitAll(SignatureKind.AnySignature);
16+
var signatures = graph.VisitAll(SignatureKind.AnySignature | SignatureKind.Deep);
1717
var result = RuleResult.Pass;
1818
foreach (var signature in signatures)
1919
{

AuthenticodeLint/Signature.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ public class AuthenticodeSignature : SignatureBase
121121
public unsafe AuthenticodeSignature(AsnEncodedData data, ISignature owningSignature)
122122
{
123123
OwningSignature = owningSignature;
124+
Kind = SignatureKind.AuthenticodeTimestamp;
124125
AdditionalCertificates = owningSignature.AdditionalCertificates;
125126
fixed (byte* dataPtr = data.RawData)
126127
{

0 commit comments

Comments
 (0)