Skip to content

Commit 2f8624b

Browse files
authored
[engsys][credscan] review and improve suppression list (Azure#23304)
CredScan tool has a limitation/issue that it would suppress the whole line if any part of the line matches a suppression pattern. It failed to detected real leak that might be in the form of ``` <variable_whose_name_matches_suppression_pattern> = "<real secret value>"; ``` This PR improves the suppression list (not perfect but should be better): - Remove patterns that is likely to be in variable name, e.g., "password" - Make patterns more specific thus less likely to mask real secrets, e.g., `"SecretBaseUnion;"` => `"password: SecretBaseUnion;"` - Move fake test secrets into separate files and suppress the files instead. - Add some fake test secrets in test-utils so that they can be re-used. Packages that have secrets specific to them still use their own test secret files.
1 parent a2272b8 commit 2f8624b

File tree

21 files changed

+221
-192
lines changed

21 files changed

+221
-192
lines changed

documentation/next-generation-quickstart.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ async function createVirtualMachines() {
544544
osProfile: {
545545
adminUsername: "testuser",
546546
computerName: "myVM",
547-
adminPassword: "p@55wOrd",
547+
adminPassword: "Placeholder",
548548
windowsConfiguration: {
549549
enableAutomaticUpdates: true // need automatic update for reimage
550550
}
@@ -607,7 +607,7 @@ async function createVirtualMachines() {
607607
osProfile: {
608608
adminUsername: "testuser",
609609
computerName: "myVM",
610-
adminPassword: "p@55wOrd",
610+
adminPassword: "Placeholder",
611611
windowsConfiguration: {
612612
enableAutomaticUpdates: true // need automatic update for reimage
613613
}

eng/CredScanSuppression.json

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,42 @@
11
{
22
"tool": "Credential Scanner",
33
"suppressions": [
4-
{
5-
"hash": "5ETIzLYe9aa9Xx5512Uy6gJiCZ/CL2QzS3nDfN51nz8=",
6-
"_justification": "Secret used by test code"
7-
},
84
{
95
"placeholder": [
10-
"SharedKey fakestorageaccount:pass123",
11-
"1cb763e7c4b9a3c4811c4560af6827c2",
12-
"009fea5280ed80b780d40e4d0f6012dee17b86c49ef4eee29ad5e59008fc551e",
13-
"AJ/qUoDtgLeA1A5ND2AS3uF7hsSe9O7imtXlkAj8VR4=",
14-
"79f43c3b9c23fbdf293bdba80dab38ba194fc1da79187091b3d3760dad840bf8",
15-
"efQ8O5wj+98pO9uoDas4uhlPwdp5GHCRs9N2Da2EC/g=",
166
"`$`{NPM_TOKEN`}",
17-
"azure_client_secret&scope=https%3A%2F%2Fsanitized%2F",
18-
"azure_client_secret&scope=https%3A%2F%2Fattest.azure.net%2F.default",
19-
"azure_client_secret&scope=https%3A%2F%2Fcognitiveservices.azure.com%2F.default",
20-
"SecretBaseUnion",
21-
"SecureString",
22-
"azure_client_secret&scope=https%3A%2F%2Feventhubs.azure.net%2F.default",
23-
"azure_client_secret&scope=https%3A%2F%2Fcognitiveservices.azure.com%2F.default",
24-
"azure_client_secret&scope=https%3A%2F%2Fdigitaltwins.azure.net%2F.default",
25-
"azure_client_secret",
26-
"p@55wOrd",
27-
"password",
28-
"nodesdk",
29-
"liilef#$DdRGSa_ewkjh",
30-
"kt#_gahr!@aGERDXA",
31-
"YmFzZTY0X3BsYWNlaG9sZGVy",
32-
"SecretPlaceholder",
7+
"credential: new UsernamePasswordCredential(\"tenant\", \"client\", \"[email protected]\", password),",
338
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjM2MDB9.adM-ddBZZlQ1WlN3pdPBOF5G4Wh9iZpxNP_fSvpF4cWs",
34-
"Resource",
35-
"sanitized.${expiryReplacement}.sanitized",
36-
"123456789"
9+
"apiKey: \"123456789\"",
10+
"password: SecretBaseUnion;",
11+
"password: SecureString;",
12+
"secret: SecretFragment,",
13+
"password: fakeTestSecretPlaceholder",
14+
"\\\"password\\\":\\\"SecretPlaceholder\\\"",
15+
"azure_client_secret&scope=https%3A%2F%2Fsanitized%2F"
3716
],
38-
"_justification": "Secret used by test code, it is fake."
17+
"_justification": "Secret used by test code, it is fake and for testing purpose."
3918
},
4019
{
4120
"file": [
4221
"eng/common/testproxy/dotnet-devcert.pfx",
4322
"sdk/identity/identity/test/azure-identity-chain-test.crt",
4423
"sdk/identity/identity/test/azure-identity-test.crt",
45-
"sdk/keyvault/keyvault-certificates/ca.key",
4624
"sdk/identity/identity/assets/fake-cert.pem",
25+
"sdk/keyvault/keyvault-certificates/ca.key"
26+
],
27+
"_justification": "File contains private key used by test code."
28+
},
29+
{
30+
"file": [
31+
"sdk/batch/arm-batch/test/fakeTestSecrets.ts",
32+
"sdk/batch/batch/test/fakeTestSecrets.ts",
33+
"sdk/cosmosdb/cosmos/test/public/common/_fakeTestSecrets.ts",
4734
"sdk/storage/storage-blob/test/utils/fakeTestSecrets.ts",
4835
"sdk/servicebus/service-bus/test/public/fakeTestSecrets.ts",
49-
"sdk/cosmosdb/cosmos/test/public/common/_fakeTestSecrets.ts",
5036
"sdk/tables/data-tables/test/internal/fakeTestSecrets.ts",
51-
"sdk/tables/data-tables/test/internal/node/generateSas.spec.ts"
37+
"sdk/test-utils/test-utils/src/fakeTestSecrets.ts"
5238
],
53-
"_justification": "File contains private key used by test code."
39+
"_justification": "File contains fake credentials used by test code."
5440
}
5541
]
5642
}

sdk/batch/arm-batch/test/batch_examples.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { createTestCredential } from "@azure-tools/test-credential";
1717
import { assert } from "chai";
1818
import { Context } from "mocha";
1919
import { BatchManagementClient } from "../src/batchManagementClient";
20+
import { fakeTestPasswordPlaceholder, fakeTestCertData } from "./fakeTestSecrets";
2021
import { StorageManagementClient, StorageAccountCreateParameters } from "@azure/arm-storage";
2122

2223
const replaceableVariables: Record<string, string> = {
@@ -157,9 +158,9 @@ describe("Batch test", () => {
157158
const res = await client.certificateOperations.create(resourceGroup, accountName, certificateName, {
158159
thumbprint: 'cff2ab63c8c955aaf71989efa641b906558d9fb7',
159160
thumbprintAlgorithm: 'sha1',
160-
data: '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',
161+
data: fakeTestCertData,
161162
format: "Pfx",
162-
password: "nodesdk"
163+
password: fakeTestPasswordPlaceholder
163164
});
164165
assert.equal(res.name, certificateName);
165166
});
@@ -179,9 +180,8 @@ describe("Batch test", () => {
179180

180181
it("certificateOperations update test", async function () {
181182
const res = await client.certificateOperations.update(resourceGroup, accountName, certificateName, {
182-
data: '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',
183-
password: "nodesdk"
184-
183+
data: fakeTestCertData,
184+
password: fakeTestPasswordPlaceholder
185185
});
186186
assert.equal(res.type, "Microsoft.Batch/batchAccounts/certificates");
187187
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT license.
3+
4+
// Centralized location for test/fake secrets so that suppressions
5+
// are easier to maintain properly
6+
export const fakeTestPasswordPlaceholder = "nodesdk";
7+
export const fakeTestCertData = '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';

0 commit comments

Comments
 (0)