Skip to content

Commit dbc9284

Browse files
authored
SNOW-1657037: Remove secrets from debug logs. (#2058)
1 parent 7ddbf31 commit dbc9284

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

src/snowflake/connector/auth/_auth.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,18 @@
112112
ID_TOKEN = "ID_TOKEN"
113113
MFA_TOKEN = "MFATOKEN"
114114

115+
AUTHENTICATION_REQUEST_KEY_WHITELIST = {
116+
"ACCOUNT_NAME",
117+
"AUTHENTICATOR",
118+
"CLIENT_APP_ID",
119+
"CLIENT_APP_VERSION",
120+
"CLIENT_ENVIRONMENT",
121+
"EXT_AUTHN_DUO_METHOD",
122+
"LOGIN_NAME",
123+
"SESSION_PARAMETERS",
124+
"SVN_REVISION",
125+
}
126+
115127

116128
class Auth:
117129
"""Snowflake Authenticator."""
@@ -205,7 +217,6 @@ def authenticate(
205217

206218
body = copy.deepcopy(body_template)
207219
# updating request body
208-
logger.debug("assertion content: %s", auth_instance.assertion_content)
209220
auth_instance.update_body(body)
210221

211222
logger.debug(
@@ -243,7 +254,10 @@ def authenticate(
243254

244255
logger.debug(
245256
"body['data']: %s",
246-
{k: v for (k, v) in body["data"].items() if k != "PASSWORD"},
257+
{
258+
k: v if k in AUTHENTICATION_REQUEST_KEY_WHITELIST else "******"
259+
for (k, v) in body["data"].items()
260+
},
247261
)
248262

249263
try:

src/snowflake/connector/secret_detector.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ class SecretDetector(logging.Formatter):
3333
flags=re.IGNORECASE,
3434
)
3535
PRIVATE_KEY_PATTERN = re.compile(
36-
r"-----BEGIN PRIVATE KEY-----\\n([a-z0-9/+=\\n]{32,})\\n-----END PRIVATE KEY-----",
36+
r"-{3,}BEGIN [A-Z ]*PRIVATE KEY-{3,}\n([\s\S]*?)\n-{3,}END [A-Z ]*PRIVATE KEY-{3,}",
3737
flags=re.MULTILINE | re.IGNORECASE,
3838
)
3939
PRIVATE_KEY_DATA_PATTERN = re.compile(
4040
r'"privateKeyData": "([a-z0-9/+=\\n]{10,})"', flags=re.MULTILINE | re.IGNORECASE
4141
)
4242
CONNECTION_TOKEN_PATTERN = re.compile(
43-
r"(token|assertion content)" r"([\'\"\s:=]+)" r"([a-z0-9=/_\-\+]{8,})",
43+
r"(token|assertion content)" r"([\'\"\s:=]+)" r"([a-z0-9=/_\-\+\.]{8,})",
4444
flags=re.IGNORECASE,
4545
)
4646

test/unit/test_log_secret_detector.py

+30
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,31 @@ def test_mask_token():
9292
"XdJYuI8vhg=f0bKSq7AhQ2Bh"
9393
)
9494

95+
rsa_key = (
96+
"-----BEGIN RSA PRIVATE KEY-----\n"
97+
"MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA0pCa0rw1n4GBjylx\n"
98+
"sBJPVCrsKO7SowkgJ52Lc8K3hMHNKXvYiqwgizbXFBQA27kvpEVSeRQVC3FAPRU5\n"
99+
"gjtLRwIDAQABAkBHZbz5o9PS6AjUUEs6VpsLgRpersxBeACtLiBw+h9cJfUerR//\n"
100+
"tTmNsQ9LlamMu2lOlfbO3R2J45ybF7z94A+hAiEA8piucvAlo9YJ4VViQGRTVvr+\n"
101+
"xZKekSEYRJBn2czeP+kCIQDeMt1PVk/p0NEcNvQMbO0vJ3+U+lITJRwmtJ9Fs1Lj\n"
102+
"rwIgJeTdkwyaBI6BepY4w7AoKHUKaNgvNqJBxSv9XNMYgEkCIG2rl1YgWOMkAQI3\n"
103+
"EW/Ml6jtiugiQT5X07Q69F33q5LbAiEArZM7htafpt0RVia+nC9aY+73wpW0Be9e\n"
104+
"pDz0yVv8s/Q=\n"
105+
"-----END RSA PRIVATE KEY-----\n"
106+
)
107+
108+
json_token = (
109+
"{'TOKEN': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFt"
110+
"ZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'}"
111+
)
112+
113+
masked, masked_str, err_str = SecretDetector.mask_secrets(rsa_key)
114+
assert masked
115+
assert err_str is None
116+
assert (
117+
masked_str == "-----BEGIN PRIVATE KEY-----\\nXXXX\\n-----END PRIVATE KEY-----\n"
118+
)
119+
95120
token_str_w_prefix = "Token =" + long_token
96121
masked, masked_str, err_str = SecretDetector.mask_secrets(token_str_w_prefix)
97122
assert masked
@@ -122,6 +147,11 @@ def test_mask_token():
122147
assert err_str is None
123148
assert masked_str == "assertion content:****"
124149

150+
masked, masked_str, err_str = SecretDetector.mask_secrets(json_token)
151+
assert masked
152+
assert err_str is None
153+
assert masked_str == "{'TOKEN': '****'}"
154+
125155

126156
def test_token_false_positives():
127157
false_positive_token_str = (

0 commit comments

Comments
 (0)