@@ -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}
1717AZURE_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
2222AZURE_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)
2727AZURE_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)
3232AZURE_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
3737AZURE_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
4949AZURE_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
6161AZURE_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
6767AZURE_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
103103AZURE_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
109109AZURE_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
121121AZURE_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
137137PEM_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
142142SECURITY_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
157157GIT_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
167167SLACK_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
172172JWT_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
176176REFRESH_TOKEN_PATTERN = re .compile (
@@ -179,7 +179,7 @@ class BadFile(NamedTuple):
179179
180180# CSCAN0260 - Ansible Vault (corrected from CSCAN0270)
181181ANSIBLE_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
191191DEFAULT_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
196196PATTERNS = [
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
269269def 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