Skip to content

Commit 41d325d

Browse files
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
1 parent 7a894b3 commit 41d325d

File tree

2 files changed

+98
-98
lines changed

2 files changed

+98
-98
lines changed

pre_commit_hooks/detect_azure_credentials.py

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,27 @@ class BadFile(NamedTuple):
1515
# Patterns based on https://github.com/gitleaks/gitleaks/pull/1291
1616
# Azure Data Factory SHIR Key format: IR@{GUID}@{resource_name}@{location}@{base64}
1717
AZURE_DATAFACTORY_SHIR_PATTERN = re.compile(
18-
rb"IR@[0-9a-zA-Z-]{36}@[^@\s]+@[0-9a-zA-Z\-=]*@[A-Za-z0-9+/=]{44}",
18+
rb'IR@[0-9a-zA-Z-]{36}@[^@\s]+@[0-9a-zA-Z\-=]*@[A-Za-z0-9+/=]{44}',
1919
)
2020

2121
# CSCAN0020, CSCAN0030 - App service deployment secrets
2222
AZURE_APP_SERVICE_DEPLOYMENT_PATTERN = re.compile(
23-
rb"MII[a-zA-Z0-9=_\-]{200,}",
23+
rb'MII[a-zA-Z0-9=_\-]{200,}',
2424
)
2525

2626
# CSCAN0030, CSCAN0090, CSCAN0150 - Storage credentials (86 char)
2727
AZURE_STORAGE_86CHAR_PATTERN = re.compile(
28-
rb"[ \t]{0,10}[a-zA-Z0-9/+]{86}==",
28+
rb'[ \t]{0,10}[a-zA-Z0-9/+]{86}==',
2929
)
3030

3131
# CSCAN0030, CSCAN0090, CSCAN0150 - Storage credentials (43 char)
3232
AZURE_STORAGE_43CHAR_PATTERN = re.compile(
33-
rb"[a-zA-Z0-9/+]{43}=[^{@\d%\s]",
33+
rb'[a-zA-Z0-9/+]{43}=[^{@\d%\s]',
3434
)
3535

3636
# CSCAN0030, CSCAN0090, CSCAN0150 - SAS/sig tokens
3737
AZURE_STORAGE_SIG_PATTERN = re.compile(
38-
rb"(?:sig|sas|password)=[a-zA-Z0-9%]{43,53}%3[dD]",
38+
rb'(?:sig|sas|password)=[a-zA-Z0-9%]{43,53}%3[dD]',
3939
re.IGNORECASE,
4040
)
4141

@@ -47,7 +47,7 @@ class BadFile(NamedTuple):
4747

4848
# CSCAN0030 - AccountKey with MII prefix
4949
AZURE_STORAGE_ACCOUNTKEY_PATTERN = re.compile(
50-
rb"AccountKey\s*=\s*MII[a-zA-Z0-9/+]{43,}={0,2}",
50+
rb'AccountKey\s*=\s*MII[a-zA-Z0-9/+]{43,}={0,2}',
5151
re.IGNORECASE,
5252
)
5353

@@ -59,13 +59,13 @@ class BadFile(NamedTuple):
5959

6060
# CSCAN0130 - Monitoring Agent credentials
6161
AZURE_STORAGE_MONIKER_PATTERN = re.compile(
62-
rb"Account Moniker\s*=.*?key\s*=",
62+
rb'Account Moniker\s*=.*?key\s*=',
6363
re.IGNORECASE,
6464
)
6565

6666
# CSCAN0110 - Blob URL with SAS token
6767
AZURE_STORAGE_BLOBURL_PATTERN = re.compile(
68-
rb"https://[a-zA-Z0-9-]+\.(?:blob|file|queue|table|dfs|z\d+\.web)\.core\.windows\.net/.*?sig=[a-zA-Z0-9%]{30,}",
68+
rb'https://[a-zA-Z0-9-]+\.(?:blob|file|queue|table|dfs|z\d+\.web)\.core\.windows\.net/.*?sig=[a-zA-Z0-9%]{30,}',
6969
re.IGNORECASE,
7070
)
7171

@@ -101,13 +101,13 @@ class BadFile(NamedTuple):
101101

102102
# CSCAN0160 - NetworkCredential with domain
103103
AZURE_NETWORK_CREDENTIAL_PATTERN = re.compile(
104-
rb"NetworkCredential\([^)]*?(?:corp|europe|middleeast|northamerica|southpacific|southamerica|fareast|africa|redmond|exchange|extranet|partners|extranettest|parttest|noe|ntdev|ntwksta|sys-wingroup|windeploy|wingroup|winse|segroup|xcorp|xrep|phx|gme|usme|cdocidm|mslpa)\)",
104+
rb'NetworkCredential\([^)]*?(?:corp|europe|middleeast|northamerica|southpacific|southamerica|fareast|africa|redmond|exchange|extranet|partners|extranettest|parttest|noe|ntdev|ntwksta|sys-wingroup|windeploy|wingroup|winse|segroup|xcorp|xrep|phx|gme|usme|cdocidm|mslpa)\)',
105105
re.IGNORECASE,
106106
)
107107

108108
# CSCAN0160 - schtasks with domain credentials
109109
AZURE_NETWORK_SCHTASKS_PATTERN = re.compile(
110-
rb"schtasks.*?/ru\s+(?:corp|europe|middleeast|northamerica|southpacific|southamerica|fareast|africa|redmond|exchange|extranet|partners|extranettest|parttest|noe|ntdev|ntwksta|sys-wingroup|windeploy|wingroup|winse|segroup|xcorp|xrep|phx|gme|usme|cdocidm|mslpa).*?/rp",
110+
rb'schtasks.*?/ru\s+(?:corp|europe|middleeast|northamerica|southpacific|southamerica|fareast|africa|redmond|exchange|extranet|partners|extranettest|parttest|noe|ntdev|ntwksta|sys-wingroup|windeploy|wingroup|winse|segroup|xcorp|xrep|phx|gme|usme|cdocidm|mslpa).*?/rp',
111111
re.IGNORECASE,
112112
)
113113

@@ -119,7 +119,7 @@ class BadFile(NamedTuple):
119119

120120
# CSCAN0200 - DevDiv TFVC credentials
121121
AZURE_DEVTFVC_PATTERN = re.compile(
122-
rb"enc_username=.+[\n\r\s]+enc_password=.{3,}",
122+
rb'enc_username=.+[\n\r\s]+enc_password=.{3,}',
123123
)
124124

125125
# CSCAN0240 - DevOps Personal Access Token
@@ -135,12 +135,12 @@ class BadFile(NamedTuple):
135135

136136
# CSCAN0060 - PEM certificate files with private key
137137
PEM_PRIVATE_KEY_PATTERN = re.compile(
138-
rb"-{5}BEGIN( ([DR]SA|EC|OPENSSH))? PRIVATE KEY-{5}",
138+
rb'-{5}BEGIN( ([DR]SA|EC|OPENSSH))? PRIVATE KEY-{5}',
139139
)
140140

141141
# CSCAN0080 - SecurityConfig XML passwords
142142
SECURITY_CONFIG_PASSWORD_PATTERN = re.compile(
143-
rb"<[pP]ass[wW]ord>[^<]+</[pP]ass[wW]ord>",
143+
rb'<[pP]ass[wW]ord>[^<]+</[pP]ass[wW]ord>',
144144
)
145145

146146
# CSCAN0110 - Script passwords in PowerShell/CMD
@@ -155,7 +155,7 @@ class BadFile(NamedTuple):
155155

156156
# CSCAN0210 - Git credentials
157157
GIT_CREDENTIALS_PATTERN = re.compile(
158-
rb"[hH][tT][tT][pP][sS]?://.+:.+@[^/]+\.[cC][oO][mM]",
158+
rb'[hH][tT][tT][pP][sS]?://.+:.+@[^/]+\.[cC][oO][mM]',
159159
)
160160

161161
# CSCAN0220 - Password contexts (ConvertTo-SecureString, X509Certificate2, etc.)
@@ -165,12 +165,12 @@ class BadFile(NamedTuple):
165165

166166
# CSCAN0230 - Slack tokens
167167
SLACK_TOKEN_PATTERN = re.compile(
168-
rb"xoxp-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+|xoxb-[a-zA-Z0-9]+-[a-zA-Z0-9]+",
168+
rb'xoxp-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+|xoxb-[a-zA-Z0-9]+-[a-zA-Z0-9]+',
169169
)
170170

171171
# CSCAN0250 - OAuth/JWT tokens and refresh tokens
172172
JWT_TOKEN_PATTERN = re.compile(
173-
rb"eyJ[a-zA-Z0-9\-_%]+\.eyJ[a-zA-Z0-9\-_%]+\.[a-zA-Z0-9\-_%]+",
173+
rb'eyJ[a-zA-Z0-9\-_%]+\.eyJ[a-zA-Z0-9\-_%]+\.[a-zA-Z0-9\-_%]+',
174174
)
175175

176176
REFRESH_TOKEN_PATTERN = re.compile(
@@ -179,7 +179,7 @@ class BadFile(NamedTuple):
179179

180180
# CSCAN0260 - Ansible Vault (corrected from CSCAN0270)
181181
ANSIBLE_VAULT_PATTERN = re.compile(
182-
rb"\$ANSIBLE_VAULT;[0-9]\.[0-9];AES256[\r\n]+\d+",
182+
rb'\$ANSIBLE_VAULT;[0-9]\.[0-9];AES256[\r\n]+\d+',
183183
)
184184

185185
# CSCAN0270 - Azure PowerShell Token Cache
@@ -189,44 +189,44 @@ class BadFile(NamedTuple):
189189

190190
# CSCAN0140 - Default/known passwords
191191
DEFAULT_PASSWORDS_PATTERN = re.compile(
192-
rb"(T!T@n1130|[pP]0rsche911|[cC]o[mM][mM]ac\!12|[pP][aA]ss@[wW]or[dD]1|[rR]dP[aA]\$\$[wW]0r[dD]|iis6\!dfu|[pP]@ss[wW]or[dD]1|[pP][aA]\$\$[wW]or[dD]1|\!\!123ab|[aA]dmin123|[pP]@ss[wW]0r[dD]1|[uU]ser@123|[aA]bc@123|[pP][aA]ss[wW]or[dD]@123|homerrocks|[pP][aA]\$\$[wW]0r[dD]1?|Y29NbWFjITEy|[pP][aA]ss4Sales|WS2012R2R0cks\!|DSFS0319Test|March2010M2\!|[pP][aA]ss[wW]ord~1|[mM]icr0s0ft|test1test\!|123@tieorg|homerocks|[eE]lvis1)",
192+
rb'(T!T@n1130|[pP]0rsche911|[cC]o[mM][mM]ac\!12|[pP][aA]ss@[wW]or[dD]1|[rR]dP[aA]\$\$[wW]0r[dD]|iis6\!dfu|[pP]@ss[wW]or[dD]1|[pP][aA]\$\$[wW]or[dD]1|\!\!123ab|[aA]dmin123|[pP]@ss[wW]0r[dD]1|[uU]ser@123|[aA]bc@123|[pP][aA]ss[wW]or[dD]@123|homerrocks|[pP][aA]\$\$[wW]0r[dD]1?|Y29NbWFjITEy|[pP][aA]ss4Sales|WS2012R2R0cks\!|DSFS0319Test|March2010M2\!|[pP][aA]ss[wW]ord~1|[mM]icr0s0ft|test1test\!|123@tieorg|homerocks|[eE]lvis1)',
193193
)
194194

195195

196196
PATTERNS = [
197-
("datafactory-shir", AZURE_DATAFACTORY_SHIR_PATTERN),
198-
("app-service-deployment", AZURE_APP_SERVICE_DEPLOYMENT_PATTERN),
199-
("publishsettings-pwd", PUBLISHSETTINGS_PWD_PATTERN),
200-
("storage-86char", AZURE_STORAGE_86CHAR_PATTERN),
201-
("storage-43char", AZURE_STORAGE_43CHAR_PATTERN),
202-
("storage-sig", AZURE_STORAGE_SIG_PATTERN),
203-
("storage-useridpw", AZURE_STORAGE_USERIDPW_PATTERN),
204-
("storage-accountkey", AZURE_STORAGE_ACCOUNTKEY_PATTERN),
205-
("storage-servicebus", AZURE_STORAGE_SERVICEBUS_PATTERN),
206-
("storage-moniker", AZURE_STORAGE_MONIKER_PATTERN),
207-
("storage-bloburl", AZURE_STORAGE_BLOBURL_PATTERN),
208-
("password-machinekey", AZURE_PASSWORD_MACHINEKEY_PATTERN),
209-
("password-addkey", AZURE_PASSWORD_ADDKEY_PATTERN),
210-
("password-connstring", AZURE_PASSWORD_CONNSTRING_PATTERN),
211-
("password-value", AZURE_PASSWORD_VALUE_PATTERN),
212-
("password-uidpw", AZURE_PASSWORD_UIDPW_PATTERN),
213-
("network-credential", AZURE_NETWORK_CREDENTIAL_PATTERN),
214-
("network-schtasks", AZURE_NETWORK_SCHTASKS_PATTERN),
215-
("network-dotnet", AZURE_NETWORK_DOTNET_PATTERN),
216-
("devtfvc-secrets", AZURE_DEVTFVC_PATTERN),
217-
("devops-pat", AZURE_DEVOPS_PAT_PATTERN),
218-
("pem-private-key", PEM_PRIVATE_KEY_PATTERN),
219-
("security-config-password", SECURITY_CONFIG_PASSWORD_PATTERN),
220-
("script-password", SCRIPT_PASSWORD_PATTERN),
221-
("general-password", GENERAL_PASSWORD_PATTERN),
222-
("git-credentials", GIT_CREDENTIALS_PATTERN),
223-
("password-context", PASSWORD_CONTEXT_PATTERN),
224-
("slack-token", SLACK_TOKEN_PATTERN),
225-
("jwt-token", JWT_TOKEN_PATTERN),
226-
("refresh-token", REFRESH_TOKEN_PATTERN),
227-
("ansible-vault", ANSIBLE_VAULT_PATTERN),
228-
("azure-powershell-token", AZURE_POWERSHELL_TOKEN_PATTERN),
229-
("default-passwords", DEFAULT_PASSWORDS_PATTERN),
197+
('datafactory-shir', AZURE_DATAFACTORY_SHIR_PATTERN),
198+
('app-service-deployment', AZURE_APP_SERVICE_DEPLOYMENT_PATTERN),
199+
('publishsettings-pwd', PUBLISHSETTINGS_PWD_PATTERN),
200+
('storage-86char', AZURE_STORAGE_86CHAR_PATTERN),
201+
('storage-43char', AZURE_STORAGE_43CHAR_PATTERN),
202+
('storage-sig', AZURE_STORAGE_SIG_PATTERN),
203+
('storage-useridpw', AZURE_STORAGE_USERIDPW_PATTERN),
204+
('storage-accountkey', AZURE_STORAGE_ACCOUNTKEY_PATTERN),
205+
('storage-servicebus', AZURE_STORAGE_SERVICEBUS_PATTERN),
206+
('storage-moniker', AZURE_STORAGE_MONIKER_PATTERN),
207+
('storage-bloburl', AZURE_STORAGE_BLOBURL_PATTERN),
208+
('password-machinekey', AZURE_PASSWORD_MACHINEKEY_PATTERN),
209+
('password-addkey', AZURE_PASSWORD_ADDKEY_PATTERN),
210+
('password-connstring', AZURE_PASSWORD_CONNSTRING_PATTERN),
211+
('password-value', AZURE_PASSWORD_VALUE_PATTERN),
212+
('password-uidpw', AZURE_PASSWORD_UIDPW_PATTERN),
213+
('network-credential', AZURE_NETWORK_CREDENTIAL_PATTERN),
214+
('network-schtasks', AZURE_NETWORK_SCHTASKS_PATTERN),
215+
('network-dotnet', AZURE_NETWORK_DOTNET_PATTERN),
216+
('devtfvc-secrets', AZURE_DEVTFVC_PATTERN),
217+
('devops-pat', AZURE_DEVOPS_PAT_PATTERN),
218+
('pem-private-key', PEM_PRIVATE_KEY_PATTERN),
219+
('security-config-password', SECURITY_CONFIG_PASSWORD_PATTERN),
220+
('script-password', SCRIPT_PASSWORD_PATTERN),
221+
('general-password', GENERAL_PASSWORD_PATTERN),
222+
('git-credentials', GIT_CREDENTIALS_PATTERN),
223+
('password-context', PASSWORD_CONTEXT_PATTERN),
224+
('slack-token', SLACK_TOKEN_PATTERN),
225+
('jwt-token', JWT_TOKEN_PATTERN),
226+
('refresh-token', REFRESH_TOKEN_PATTERN),
227+
('ansible-vault', ANSIBLE_VAULT_PATTERN),
228+
('azure-powershell-token', AZURE_POWERSHELL_TOKEN_PATTERN),
229+
('default-passwords', DEFAULT_PASSWORDS_PATTERN),
230230
]
231231

232232

@@ -241,7 +241,7 @@ def check_file_for_azure_keys(
241241
bad_files = []
242242

243243
for filename in filenames:
244-
with open(filename, "rb") as content:
244+
with open(filename, 'rb') as content:
245245
text_body = content.read()
246246

247247
# Check all Azure credential patterns
@@ -253,11 +253,11 @@ def check_file_for_azure_keys(
253253
match = match[0]
254254

255255
# Obfuscate the key
256-
key_str = match.decode("utf-8", errors="replace")
256+
key_str = match.decode('utf-8', errors='replace')
257257
if len(key_str) > 20:
258-
key_hidden = key_str[:10] + "***" + key_str[-7:]
258+
key_hidden = key_str[:10] + '***' + key_str[-7:]
259259
else:
260-
key_hidden = key_str[:4] + "***"
260+
key_hidden = key_str[:4] + '***'
261261

262262
bad_files.append(
263263
BadFile(filename, key_hidden, pattern_name),
@@ -268,7 +268,7 @@ def check_file_for_azure_keys(
268268

269269
def main(argv: Sequence[str] | None = None) -> int:
270270
parser = argparse.ArgumentParser()
271-
parser.add_argument("filenames", nargs="+", help="Filenames to run")
271+
parser.add_argument('filenames', nargs='+', help='Filenames to run')
272272
args = parser.parse_args(argv)
273273

274274
bad_filenames = check_file_for_azure_keys(args.filenames)
@@ -283,5 +283,5 @@ def main(argv: Sequence[str] | None = None) -> int:
283283
return 0
284284

285285

286-
if __name__ == "__main__":
286+
if __name__ == '__main__':
287287
raise SystemExit(main())

0 commit comments

Comments
 (0)