|
11 | 11 | using System.Management.Automation.Security; |
12 | 12 | using System.Security; |
13 | 13 | using System.Security.Cryptography.X509Certificates; |
| 14 | +using System.Text; |
14 | 15 |
|
15 | 16 | using Dbg = System.Management.Automation; |
16 | 17 |
|
@@ -516,15 +517,28 @@ private static void UntrustPublisher(Signature signature) |
516 | 517 | } |
517 | 518 | } |
518 | 519 |
|
| 520 | + // Check the signature via the SIP which should never erroneously validate an invalid signature |
| 521 | + // or altered script. |
519 | 522 | private static Signature GetSignatureWithEncodingRetry(string path, ExternalScriptInfo script) |
520 | 523 | { |
521 | | - string verificationContents = System.Text.Encoding.Unicode.GetString(script.OriginalEncoding.GetPreamble()) + script.ScriptContents; |
522 | | - Signature signature = SignatureHelper.GetSignature(path, verificationContents); |
| 524 | + // Invoke the SIP directly with the most simple method |
| 525 | + Signature signature = SignatureHelper.GetSignature(path, fileContent: null); |
| 526 | + if (signature.Status == SignatureStatus.Valid) |
| 527 | + { |
| 528 | + return signature; |
| 529 | + } |
| 530 | + |
| 531 | + // try harder to validate the signature by being explicit about encoding |
| 532 | + // and providing the script contents |
| 533 | + string verificationContents = Encoding.Unicode.GetString(script.OriginalEncoding.GetPreamble()) + script.ScriptContents; |
| 534 | + signature = SignatureHelper.GetSignature(path, verificationContents); |
523 | 535 |
|
| 536 | + // A last ditch effort - |
524 | 537 | // If the file was originally ASCII or UTF8, the SIP may have added the Unicode BOM |
525 | | - if ((signature.Status != SignatureStatus.Valid) && (script.OriginalEncoding != System.Text.Encoding.Unicode)) |
| 538 | + if (signature.Status != SignatureStatus.Valid |
| 539 | + && script.OriginalEncoding != Encoding.Unicode) |
526 | 540 | { |
527 | | - verificationContents = System.Text.Encoding.Unicode.GetString(System.Text.Encoding.Unicode.GetPreamble()) + script.ScriptContents; |
| 541 | + verificationContents = Encoding.Unicode.GetString(Encoding.Unicode.GetPreamble()) + script.ScriptContents; |
528 | 542 | Signature fallbackSignature = SignatureHelper.GetSignature(path, verificationContents); |
529 | 543 |
|
530 | 544 | if (fallbackSignature.Status == SignatureStatus.Valid) |
|
0 commit comments