From cfe7788ac60c330a8cb5b599752ae79f1212ff2d Mon Sep 17 00:00:00 2001 From: Val Alexander Date: Sat, 22 Aug 2026 18:57:43 -0500 Subject: [PATCH 1/5] fix(security): redact all GitHub token families --- deploy/coven-github/coven_github_adapter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/coven-github/coven_github_adapter.py b/deploy/coven-github/coven_github_adapter.py index d066c4b..ca684a5 100644 --- a/deploy/coven-github/coven_github_adapter.py +++ b/deploy/coven-github/coven_github_adapter.py @@ -1652,7 +1652,7 @@ def redacted_command_result(result): def redact_tokenish(text): if not text: return text - markers = ["ghs_", "ghu_", "github_pat_", "x-access-token:"] + markers = ["ghp_", "gho_", "ghr_", "ghs_", "ghu_", "github_pat_", "x-access-token:"] redacted = text for marker in markers: while marker in redacted: From 57b085b31f35c2f9e4493842901c0466193e2c68 Mon Sep 17 00:00:00 2001 From: Val Alexander Date: Sat, 22 Aug 2026 18:58:37 -0500 Subject: [PATCH 2/5] test(security): cover classic GitHub token prefixes --- .../test_github_token_redaction.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 deploy/coven-github/test_github_token_redaction.py diff --git a/deploy/coven-github/test_github_token_redaction.py b/deploy/coven-github/test_github_token_redaction.py new file mode 100644 index 0000000..3f01324 --- /dev/null +++ b/deploy/coven-github/test_github_token_redaction.py @@ -0,0 +1,38 @@ +import unittest + +from coven_github_adapter import redact_secrets, redact_tokenish + + +class GithubTokenRedactionTests(unittest.TestCase): + def test_redact_tokenish_covers_all_supported_github_token_families(self): + tokens = [ + "ghp_" + "p" * 36, + "gho_" + "o" * 36, + "ghr_" + "r" * 36, + "ghs_" + "s" * 36, + "ghu_" + "u" * 36, + "github_pat_" + "a" * 82, + ] + payload = " ".join(tokens) + redacted = redact_tokenish(payload) + + for token in tokens: + self.assertNotIn(token, redacted) + for prefix in ("ghp_", "gho_", "ghr_", "ghs_", "ghu_", "github_pat_"): + self.assertIn(prefix + "[redacted]", redacted) + + def test_redact_secrets_covers_classic_token_families_in_publication_text(self): + tokens = [ + "ghp_" + "p" * 36, + "gho_" + "o" * 36, + "ghr_" + "r" * 36, + ] + redacted = redact_secrets("diagnostic: " + "|".join(tokens)) + + for token in tokens: + self.assertNotIn(token, redacted) + self.assertEqual(redacted.count("[redacted]"), len(tokens)) + + +if __name__ == "__main__": + unittest.main() From d2924f9aeb5981f4697e474b99aeadba7b398189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Val=20Alexander=20=F0=9F=91=91?= Date: Sun, 30 Aug 2026 09:16:09 -0500 Subject: [PATCH 3/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- deploy/coven-github/test_github_token_redaction.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/deploy/coven-github/test_github_token_redaction.py b/deploy/coven-github/test_github_token_redaction.py index 3f01324..82542e4 100644 --- a/deploy/coven-github/test_github_token_redaction.py +++ b/deploy/coven-github/test_github_token_redaction.py @@ -1,7 +1,19 @@ +import importlib.util import unittest +from pathlib import Path -from coven_github_adapter import redact_secrets, redact_tokenish +def load_adapter(): + path = Path(__file__).with_name("coven_github_adapter.py") + spec = importlib.util.spec_from_file_location("coven_github_adapter", path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +_adapter = load_adapter() +redact_secrets = _adapter.redact_secrets +redact_tokenish = _adapter.redact_tokenish class GithubTokenRedactionTests(unittest.TestCase): def test_redact_tokenish_covers_all_supported_github_token_families(self): From 6b00a386f3c795786ce5e127c1285dece81b6769 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 30 Aug 2026 14:22:59 +0000 Subject: [PATCH 4/5] Initial plan for review fixes Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com> --- .../coven_github_adapter.cpython-312.pyc | Bin 0 -> 80599 bytes .../test_coven_github_adapter.cpython-312.pyc | Bin 0 -> 13334 bytes .../test_github_token_redaction.cpython-312.pyc | Bin 0 -> 2947 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 deploy/coven-github/__pycache__/coven_github_adapter.cpython-312.pyc create mode 100644 deploy/coven-github/__pycache__/test_coven_github_adapter.cpython-312.pyc create mode 100644 deploy/coven-github/__pycache__/test_github_token_redaction.cpython-312.pyc diff --git a/deploy/coven-github/__pycache__/coven_github_adapter.cpython-312.pyc b/deploy/coven-github/__pycache__/coven_github_adapter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13a7d1048c972771df253a860d7441788e7d0182 GIT binary patch literal 80599 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
    lEqO>beY;V{9tlPy+=>2k7q%=q)zxZ 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 literal 0 HcmV?d00001 diff --git a/deploy/coven-github/__pycache__/test_coven_github_adapter.cpython-312.pyc b/deploy/coven-github/__pycache__/test_coven_github_adapter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92d661f6cb52f8e8f8a66fc5174ffbe08d0c73a0 GIT binary patch literal 13334 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 X9OJ%y^20OlpZT-#ypdvB$QS)D7z-4v literal 0 HcmV?d00001 diff --git a/deploy/coven-github/__pycache__/test_github_token_redaction.cpython-312.pyc b/deploy/coven-github/__pycache__/test_github_token_redaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e5212364d5b350790e6ab4eb461c8066291ecab GIT binary patch literal 2947 zcmb_e-)j_C6uvWacQeWE=Eo++BuZJLwOOkPQL18W3QdfPB$hUPaEngIok=q5?9TSi zY<1HOtY9%>K?*|Br-nXR0>#ooedr%hXdm2eWy5Ge=u_XKkv`<9=gjPNlA;*e9@um5 zJ@=e@&)ogKd+yJ%SQ7ym8M>9}2@~=M4!DHsowXmKvp_VW2_{JiUMr?VXhl=X(i9bl zCS4_|kVy2_Mlys{C=uQk7(hG zeT1+$>?mfs0w3PvSqP*k6oq8NpExm*6kPg_>dd6M8@3dFxboUxpcaTDK;wxc^4@aY zmf<>=ma3fncr`)jTXuA!0wTLWoWxl2x z@}}Hyp6OG@Wg964WCme)VYzR4r2NNr3i6uSifWpQUC84lqidU)JEdj~)6nhNvoGX9 z|9@P%9rCj^P-XH&Y=}3_hgVxkd*?#m=Y5NZs`1|WhKKFFONXoNug}Ymw(WRAgvS2) z<15kDT6AY6x^waUrIYug`&T6}Kk6LE>7n^Cn7%oFeSC4x(y>aIa-suDstCi*O#w+@yhLJwfl|l?YoD*`{cen;-POM8Nxb`r5);g zlTxqB(2pt#p0Yo~1|T1H2-Mfai}Q%gwxJaj7ET+VFjpbxme9~zZ&PSg@I7%J_sFVn zno2U}Ha~kp^y3SH;d9EB3pvBVKM3y=X9nIE-Xp{-$q-$Cv#hDs`{Ww(`kq Q<5$K%J+mqi+T&&LH)fOy&j0`b literal 0 HcmV?d00001 From b0b39ab5e807c62d03f7bc0d99c8c998b9d76707 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 30 Aug 2026 14:23:59 +0000 Subject: [PATCH 5/5] fix: terminate redact_tokenish scan on non-token chars to avoid infinite loop Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com> --- .../coven_github_adapter.cpython-312.pyc | Bin 80599 -> 80224 bytes deploy/coven-github/coven_github_adapter.py | 15 +++++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/deploy/coven-github/__pycache__/coven_github_adapter.cpython-312.pyc b/deploy/coven-github/__pycache__/coven_github_adapter.cpython-312.pyc index 13a7d1048c972771df253a860d7441788e7d0182..c98d55bc4dd200d46699c1412b28bd1f8ec3941d 100644 GIT binary patch delta 304 zcmccqmF2-F7QWNGyj%=G@X}^VmiFgHzO8(W3-x#{fFjcwY8Z-{Y8Zm2H!?FS)~5iO ztC>Mc85n{YG@1RXoHf!jOEOB6;tLW>;%m|~3P40Yh$sRP#UP?IzNSJqF*!N4xLCI& zKRY$gN;BF~H!4xL%0SmLK32PmC&nmBLiUSR`G;n!;SgOF$0?iXO%u>6&_`6owiWDWJt5 z3sYD?BuG&TgA@bU2}}?t7cusv_T;eu<$@VBS^YHGZ?U9j6vTtbd@xxACX2yjY5Xnj z^vsfs(xmu;#FF?b{tDg1TRUZn5Vk7G0^VTHX)D~)sADG#I4*I~yz$4P&Kl$xH>FFEw8P~EF{Q~-CdX@oW wCu8&WF9wYDjEobuml!d6Gc)pRKVZt($1KFdDDqj3i;?ZK6dR*JQ9RJo0M2T=c>n+a diff --git a/deploy/coven-github/coven_github_adapter.py b/deploy/coven-github/coven_github_adapter.py index ca684a5..2ae2a2c 100644 --- a/deploy/coven-github/coven_github_adapter.py +++ b/deploy/coven-github/coven_github_adapter.py @@ -1652,16 +1652,11 @@ def redacted_command_result(result): def redact_tokenish(text): if not text: return text - markers = ["ghp_", "gho_", "ghr_", "ghs_", "ghu_", "github_pat_", "x-access-token:"] - redacted = text - for marker in markers: - while marker in redacted: - index = redacted.find(marker) - end = index + len(marker) - while end < len(redacted) and redacted[end] not in " \n\r\t'\"": - end += 1 - redacted = redacted[:index] + marker + "[redacted]" + redacted[end:] - return redacted + return re.sub( + r"(github_pat_|ghp_|gho_|ghr_|ghs_|ghu_|x-access-token:)[A-Za-z0-9_]+", + r"\1[redacted]", + text, + ) def redact_secrets(text, secret_values=()):