From 6dcc3330b3313dd27dd21a2f233e48fee0e8fee5 Mon Sep 17 00:00:00 2001 From: Dilee Date: Mon, 30 Mar 2026 17:54:55 +0300 Subject: [PATCH] fix(security): add missing GitHub OAuth token patterns and snapshot redact flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add gho_, ghu_, ghs_, ghr_ prefix patterns (OAuth, user-to-server, server-to-server, and refresh tokens) — all four types used by GitHub Apps and Copilot auth flows were absent from _PREFIX_PATTERNS - Snapshot HERMES_REDACT_SECRETS at module import time instead of re-reading os.getenv() on every call, preventing runtime env mutations (e.g. LLM-generated export commands) from disabling redaction --- agent/redact.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/agent/redact.py b/agent/redact.py index 895e3265fd..2906d920ea 100644 --- a/agent/redact.py +++ b/agent/redact.py @@ -13,11 +13,19 @@ import re logger = logging.getLogger(__name__) +# Snapshot at import time so runtime env mutations (e.g. LLM-generated +# `export HERMES_REDACT_SECRETS=false`) cannot disable redaction mid-session. +_REDACT_ENABLED = os.getenv("HERMES_REDACT_SECRETS", "").lower() not in ("0", "false", "no", "off") + # Known API key prefixes -- match the prefix + contiguous token chars _PREFIX_PATTERNS = [ r"sk-[A-Za-z0-9_-]{10,}", # OpenAI / OpenRouter / Anthropic (sk-ant-*) r"ghp_[A-Za-z0-9]{10,}", # GitHub PAT (classic) r"github_pat_[A-Za-z0-9_]{10,}", # GitHub PAT (fine-grained) + r"gho_[A-Za-z0-9]{10,}", # GitHub OAuth access token + r"ghu_[A-Za-z0-9]{10,}", # GitHub user-to-server token + r"ghs_[A-Za-z0-9]{10,}", # GitHub server-to-server token + r"ghr_[A-Za-z0-9]{10,}", # GitHub refresh token r"xox[baprs]-[A-Za-z0-9-]{10,}", # Slack tokens r"AIza[A-Za-z0-9_-]{30,}", # Google API keys r"pplx-[A-Za-z0-9]{10,}", # Perplexity @@ -109,7 +117,7 @@ def redact_sensitive_text(text: str) -> str: text = str(text) if not text: return text - if os.getenv("HERMES_REDACT_SECRETS", "").lower() in ("0", "false", "no", "off"): + if not _REDACT_ENABLED: return text # Known prefixes (sk-, ghp_, etc.)