blitzstrike 2.4.63 → 2.4.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,22 @@ All notable changes to Blitz Strike are documented here.
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [2.4.64] — 2026-09-14
9
+
10
+ ### Added — 47-pattern secret format taxonomy (severity + category)
11
+
12
+ - Expanded `SECRET_FORMATS` from ~12 to 47 known secret formats, each now carrying
13
+ a severity (critical/high/medium/low) + category (aws, gcp, github, stripe, slack,
14
+ email_svc, twilio, paas, firebase, jwt, bearer, basic_auth, private_key, generic,
15
+ ai_api, infra_api, package_registry, saas_api, observability, tunneling, bot_token).
16
+ - New formats: AWS session tokens, GCP service accounts, GitHub OAuth/server-to-server,
17
+ Stripe live/test/publishable, Slack webhooks, Heroku, Firebase, bearer/basic-auth,
18
+ RSA/EC/OpenSSH private keys, Anthropic/OpenAI/HuggingFace, Cloudflare/DigitalOcean,
19
+ npm/PyPI/Docker, Atlassian/Linear, NewRelic/Datadog/Sentry, ngrok, Discord/Telegram.
20
+ - `detectHardcodedSecret` Tier 2 now reports the format's own severity + category,
21
+ so a hardcoded secret hit is classified (e.g. Stripe live = critical, Stripe test
22
+ = low) instead of uniformly "high". Redaction patterns expanded to match.
23
+
8
24
  ## [2.4.63] — 2026-09-14
9
25
 
10
26
  ### Added — Variant corpus + detector coverage sweep (data-driven scaling)
package/dist/index.js CHANGED
@@ -7409,18 +7409,53 @@ function redactSecrets(text) {
7409
7409
  var SECRET_FIELDS = "api[_-]?key|apikey|api[_-]?secret|access[_-]?key|access[_-]?token|secret[_-]?key|secret[_-]?access[_-]?key|auth[_-]?token|client[_-]?secret|consumer[_-]?secret|consumer[_-]?key|private[_-]?key|db[_-]?password|database[_-]?password|db[_-]?pass|passwd|password|jwt[_-]?secret|encryption[_-]?key|encryption[_-]?password|github[_-]?token|gitlab[_-]?token|stripe[_-]?key|sendgrid[_-]?api[_-]?key|datadog[_-]?api[_-]?key|cloudflare[_-]?api[_-]?key|slack[_-]?token|aws[_-]?access[_-]?key[_-]?id|aws[_-]?secret[_-]?access[_-]?key|aws[_-]?session[_-]?token|bot[_-]?token", SECRET_FORMATS, REDACTION_PATTERNS;
7410
7410
  var init_secrets = __esm(() => {
7411
7411
  SECRET_FORMATS = [
7412
- { name: "JWT", re: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}/g },
7413
- { name: "AWS access key", re: /\bAKIA[0-9A-Z]{16}\b/g },
7414
- { name: "GitHub PAT (classic)", re: /\bghp_[A-Za-z0-9]{20,}\b/g },
7415
- { name: "GitHub PAT (fine-grained)", re: /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g },
7416
- { name: "OpenAI/Stripe key", re: /\bsk-[A-Za-z0-9]{20,}\b/g },
7417
- { name: "Stripe live/test key", re: /\b(?:sk|pk|rk)_(?:live|test)_[0-9a-zA-Z]{10,}\b/g },
7418
- { name: "Slack token", re: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g },
7419
- { name: "Google API key", re: /\bAIza[0-9A-Za-z_-]{35}\b/g },
7420
- { name: "Twilio account SID", re: /\bAC[0-9a-f]{32}\b/g },
7421
- { name: "SendGrid API key", re: /\bSG\.[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{16,}\b/g },
7422
- { name: "Mailgun API key", re: /\bkey-[0-9a-zA-Z]{32}\b/g },
7423
- { name: "PEM private key", re: /-----BEGIN [A-Z ]*PRIVATE KEY-----/g }
7412
+ { name: "AWS access key ID", re: /\bAKIA[0-9A-Z]{16}\b/g, severity: "critical", category: "aws" },
7413
+ { name: "AWS session token (temporary)", re: /\bASIA[0-9A-Z]{16}\b/g, severity: "critical", category: "aws" },
7414
+ { name: "AWS secret access key", re: /aws[_-]?secret[_-]?access[_-]?key['"\s:=]+([A-Za-z0-9/+=]{40})/gi, severity: "critical", category: "aws" },
7415
+ { name: "GCP service account key", re: /"type"\s*:\s*"service_account"/g, severity: "critical", category: "gcp" },
7416
+ { name: "Google API key", re: /\bAIza[0-9A-Za-z_-]{35}\b/g, severity: "high", category: "gcp" },
7417
+ { name: "GitHub PAT (classic)", re: /\bghp_[A-Za-z0-9]{20,}\b/g, severity: "critical", category: "github" },
7418
+ { name: "GitHub PAT (fine-grained)", re: /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g, severity: "critical", category: "github" },
7419
+ { name: "GitHub OAuth token", re: /\bgho_[A-Za-z0-9]{20,}\b/g, severity: "high", category: "github" },
7420
+ { name: "GitHub server-to-server token", re: /\bgh[usr]_[A-Za-z0-9]{20,}\b/g, severity: "high", category: "github" },
7421
+ { name: "Stripe live key", re: /\bsk_live_[0-9A-Za-z]{16,}\b/g, severity: "critical", category: "stripe" },
7422
+ { name: "Stripe test key", re: /\bsk_test_[0-9A-Za-z]{16,}\b/g, severity: "low", category: "stripe" },
7423
+ { name: "Stripe publishable key", re: /\bpk_(?:live|test)_[0-9A-Za-z]{16,}\b/g, severity: "low", category: "stripe" },
7424
+ { name: "Slack token", re: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, severity: "high", category: "slack" },
7425
+ { name: "Slack webhook URL", re: /https:\/\/hooks\.slack\.com\/services\/T[A-Z0-9]+\/B[A-Z0-9]+\/[A-Za-z0-9]+/g, severity: "medium", category: "slack" },
7426
+ { name: "SendGrid API key", re: /\bSG\.[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{16,}\b/g, severity: "high", category: "email_svc" },
7427
+ { name: "Mailgun API key", re: /\bkey-[0-9a-zA-Z]{32}\b/g, severity: "high", category: "email_svc" },
7428
+ { name: "Twilio API key", re: /\bSK[0-9a-fA-F]{32}\b/g, severity: "high", category: "twilio" },
7429
+ { name: "Twilio account SID", re: /\bAC[0-9a-f]{32}\b/g, severity: "medium", category: "twilio" },
7430
+ { name: "Twilio auth token", re: /twilio(.{0,20})?(auth|token)['"=: ]+([a-f0-9]{32})/gi, severity: "high", category: "twilio" },
7431
+ { name: "Heroku API key", re: /heroku(.{0,20})?api['"=: ]+([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi, severity: "medium", category: "paas" },
7432
+ { name: "Firebase URL", re: /\bhttps?:\/\/[a-z0-9-]+\.firebaseio\.com\b/g, severity: "low", category: "firebase" },
7433
+ { name: "JWT", re: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}/g, severity: "medium", category: "jwt" },
7434
+ { name: "Bearer token", re: /authorization['"=: ]+bearer\s+[A-Za-z0-9._-]{20,}/gi, severity: "medium", category: "bearer" },
7435
+ { name: "Basic auth URL", re: /https?:\/\/[^/\s:@]+:[^/\s:@]+@[^/\s]+/g, severity: "medium", category: "basic_auth" },
7436
+ { name: "RSA private key", re: /-----BEGIN RSA PRIVATE KEY-----/g, severity: "critical", category: "private_key" },
7437
+ { name: "EC private key", re: /-----BEGIN EC PRIVATE KEY-----/g, severity: "critical", category: "private_key" },
7438
+ { name: "OpenSSH private key", re: /-----BEGIN OPENSSH PRIVATE KEY-----/g, severity: "critical", category: "private_key" },
7439
+ { name: "Generic private key", re: /-----BEGIN (DSA |PGP |)PRIVATE KEY-----/g, severity: "critical", category: "private_key" },
7440
+ { name: "Generic API key / token", re: /(?:api[_-]?key|apikey|api_secret|access_token|secret[_-]?token)['"\s:=]+["']([A-Za-z0-9+/=_-]{24,})["']/gi, severity: "medium", category: "generic" },
7441
+ { name: "Anthropic API key", re: /\bsk-ant-(?:api03|admin01)-[A-Za-z0-9_-]{20,}\b/g, severity: "critical", category: "ai_api" },
7442
+ { name: "OpenAI API key (legacy)", re: /\bsk-[A-Za-z0-9]{20}T3BlbkFJ[A-Za-z0-9]{20}\b/g, severity: "critical", category: "ai_api" },
7443
+ { name: "OpenAI project key", re: /\bsk-proj-[A-Za-z0-9_-]{20,}T3BlbkFJ[A-Za-z0-9_-]{20,}\b/g, severity: "critical", category: "ai_api" },
7444
+ { name: "OpenAI session token", re: /\bsess-[A-Za-z0-9]{40}\b/g, severity: "high", category: "ai_api" },
7445
+ { name: "Hugging Face token", re: /\bhf_[A-Za-z0-9]{30,}\b/g, severity: "high", category: "ai_api" },
7446
+ { name: "Cloudflare API key", re: /cf[_-]?api[_-]?key['"\s:=]+([a-f0-9]{37})/gi, severity: "critical", category: "infra_api" },
7447
+ { name: "DigitalOcean token", re: /\bdop_v1_[a-f0-9]{64}\b/g, severity: "high", category: "infra_api" },
7448
+ { name: "npm token", re: /\bnpm_[A-Za-z0-9]{36}\b/g, severity: "high", category: "package_registry" },
7449
+ { name: "PyPI token", re: /\bpypi-AgENdGV[A-Za-z0-9_-]+\b/g, severity: "high", category: "package_registry" },
7450
+ { name: "Docker Hub PAT", re: /\bdckr_pat_[A-Za-z0-9_-]{27,}\b/g, severity: "high", category: "package_registry" },
7451
+ { name: "Atlassian API token", re: /\bATATT3xFfGF0[A-Za-z0-9_-]{20,}\b/g, severity: "high", category: "saas_api" },
7452
+ { name: "Linear API key", re: /\blin_api_[A-Za-z0-9]{40}\b/g, severity: "medium", category: "saas_api" },
7453
+ { name: "New Relic license key", re: /\b(?:NRAA|NRAK|NRBR)-[A-F0-9]{27}\b/g, severity: "medium", category: "observability" },
7454
+ { name: "Datadog API key", re: /dd[_-]?api[_-]?key['"\s:=]+([a-f0-9]{32})/gi, severity: "high", category: "observability" },
7455
+ { name: "Sentry DSN", re: /https:\/\/[a-f0-9]+@o[0-9]+\.ingest\.sentry\.io\/[0-9]+/g, severity: "low", category: "observability" },
7456
+ { name: "ngrok auth token", re: /\b[12][A-Za-z0-9]{26}_[A-Za-z0-9]{32,}\b/g, severity: "medium", category: "tunneling" },
7457
+ { name: "Discord bot token", re: /\b[MN][A-Za-z\d]{23}\.[\w-]{6}\.[\w-]{27}\b/g, severity: "high", category: "bot_token" },
7458
+ { name: "Telegram bot token", re: /\b\d{8,10}:[A-Za-z0-9_-]{35}\b/g, severity: "high", category: "bot_token" }
7424
7459
  ];
7425
7460
  REDACTION_PATTERNS = [
7426
7461
  [/(authorization\s*[:=]\s*)(bearer\s+)?[A-Za-z0-9._~+/=-]{8,}/gi, "$1$2[REDACTED]"],
@@ -7433,17 +7468,34 @@ var init_secrets = __esm(() => {
7433
7468
  [/(session\s*[:=]\s*)["']?[A-Za-z0-9._-]{12,}["']?/gi, "$1[REDACTED]"],
7434
7469
  [/(cookie\s*[:=]\s*)["']?[A-Za-z0-9._-]{12,}["']?/gi, "$1[REDACTED]"],
7435
7470
  [/(set-cookie\s*:\s*)[^\r\n]+/gi, "$1[REDACTED]"],
7436
- [/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}/g, "[REDACTED]"],
7437
- [/AKIA[0-9A-Z]{16}/g, "[REDACTED]"],
7438
- [/ghp_[A-Za-z0-9]{20,}/g, "[REDACTED]"],
7439
- [/github_pat_[A-Za-z0-9_]{20,}/g, "[REDACTED]"],
7440
- [/sk-[A-Za-z0-9]{20,}/g, "[REDACTED]"],
7441
- [/\b(?:sk|pk|rk)_(?:live|test)_[0-9a-zA-Z]{10,}\b/g, "[REDACTED]"],
7471
+ [/\bAKIA[0-9A-Z]{16}\b/g, "[REDACTED]"],
7472
+ [/\bASIA[0-9A-Z]{16}\b/g, "[REDACTED]"],
7473
+ [/\bghp_[A-Za-z0-9]{20,}\b/g, "[REDACTED]"],
7474
+ [/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g, "[REDACTED]"],
7475
+ [/\bgho_[A-Za-z0-9]{20,}\b/g, "[REDACTED]"],
7476
+ [/\bgh[usr]_[A-Za-z0-9]{20,}\b/g, "[REDACTED]"],
7477
+ [/\bsk_live_[0-9A-Za-z]{16,}\b/g, "[REDACTED]"],
7478
+ [/\bsk_test_[0-9A-Za-z]{16,}\b/g, "[REDACTED]"],
7479
+ [/\bpk_(?:live|test)_[0-9A-Za-z]{16,}\b/g, "[REDACTED]"],
7442
7480
  [/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, "[REDACTED]"],
7443
7481
  [/\bAIza[0-9A-Za-z_-]{35}\b/g, "[REDACTED]"],
7444
7482
  [/\bAC[0-9a-f]{32}\b/g, "[REDACTED]"],
7483
+ [/\bSK[0-9a-fA-F]{32}\b/g, "[REDACTED]"],
7445
7484
  [/\bSG\.[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{16,}\b/g, "[REDACTED]"],
7446
7485
  [/\bkey-[0-9a-zA-Z]{32}\b/g, "[REDACTED]"],
7486
+ [/\bsk-ant-(?:api03|admin01)-[A-Za-z0-9_-]{20,}\b/g, "[REDACTED]"],
7487
+ [/\bsk-proj-[A-Za-z0-9_-]{20,}T3BlbkFJ[A-Za-z0-9_-]{20,}\b/g, "[REDACTED]"],
7488
+ [/\bsess-[A-Za-z0-9]{40}\b/g, "[REDACTED]"],
7489
+ [/\bhf_[A-Za-z0-9]{30,}\b/g, "[REDACTED]"],
7490
+ [/\bdop_v1_[a-f0-9]{64}\b/g, "[REDACTED]"],
7491
+ [/\bnpm_[A-Za-z0-9]{36}\b/g, "[REDACTED]"],
7492
+ [/\bpypi-AgENdGV[A-Za-z0-9_-]+\b/g, "[REDACTED]"],
7493
+ [/\bdckr_pat_[A-Za-z0-9_-]{27,}\b/g, "[REDACTED]"],
7494
+ [/\bATATT3xFfGF0[A-Za-z0-9_-]{20,}\b/g, "[REDACTED]"],
7495
+ [/\blin_api_[A-Za-z0-9]{40}\b/g, "[REDACTED]"],
7496
+ [/\b(?:NRAA|NRAK|NRBR)-[A-F0-9]{27}\b/g, "[REDACTED]"],
7497
+ [/\b\d{8,10}:[A-Za-z0-9_-]{35}\b/g, "[REDACTED]"],
7498
+ [/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}/g, "[REDACTED]"],
7447
7499
  [/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g, "[REDACTED]"]
7448
7500
  ];
7449
7501
  });
@@ -16487,10 +16539,10 @@ function detectHardcodedSecret(code, file, out) {
16487
16539
  file,
16488
16540
  line: ln,
16489
16541
  type: "hardcoded_secret",
16490
- category: "Hardcoded secret (known format)",
16491
- severity: "high",
16542
+ category: `Hardcoded secret (${fmt.category}: ${fmt.name})`,
16543
+ severity: fmt.severity,
16492
16544
  evidence: (ls[ln - 1] ?? "").trim(),
16493
- detail: `A ${fmt.name} was found hardcoded in source — the credential is exposed to anyone with code access (CWE-798). Rotate it and load from the environment instead.`
16545
+ detail: `${fmt.name} was found hardcoded in source — the credential is exposed to anyone with code access (CWE-798, severity ${fmt.severity}). Rotate it and load from the environment instead.`
16494
16546
  });
16495
16547
  }
16496
16548
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.63",
3
+ "version": "2.4.64",
4
4
  "description": "Blitz Strike — a universal MCP security-audit toolbelt. BLITZ sweeps the attack surface, EAGLE-EYE traces source-to-sink, STRIKE verifies live. 57 attack chains, 130-tool catalog, intelligence data layer. One server, every agent.",
5
5
  "type": "module",
6
6
  "bin": {