chainwall 0.1.0
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/LICENSE +21 -0
- package/README.md +278 -0
- package/commands/security-scan.md +35 -0
- package/dist/auditor/access-mapper.d.ts +3 -0
- package/dist/auditor/access-mapper.d.ts.map +1 -0
- package/dist/auditor/access-mapper.js +15 -0
- package/dist/auditor/access-mapper.js.map +1 -0
- package/dist/auditor/cli-detector.d.ts +7 -0
- package/dist/auditor/cli-detector.d.ts.map +1 -0
- package/dist/auditor/cli-detector.js +63 -0
- package/dist/auditor/cli-detector.js.map +1 -0
- package/dist/auditor/cross-reference.d.ts +4 -0
- package/dist/auditor/cross-reference.d.ts.map +1 -0
- package/dist/auditor/cross-reference.js +16 -0
- package/dist/auditor/cross-reference.js.map +1 -0
- package/dist/auditor/env-auditor.d.ts +9 -0
- package/dist/auditor/env-auditor.d.ts.map +1 -0
- package/dist/auditor/env-auditor.js +83 -0
- package/dist/auditor/env-auditor.js.map +1 -0
- package/dist/auditor/mcp-analyzer.d.ts +11 -0
- package/dist/auditor/mcp-analyzer.d.ts.map +1 -0
- package/dist/auditor/mcp-analyzer.js +145 -0
- package/dist/auditor/mcp-analyzer.js.map +1 -0
- package/dist/auditor/mcp-detector.d.ts +17 -0
- package/dist/auditor/mcp-detector.d.ts.map +1 -0
- package/dist/auditor/mcp-detector.js +86 -0
- package/dist/auditor/mcp-detector.js.map +1 -0
- package/dist/auditor/remediation.d.ts +26 -0
- package/dist/auditor/remediation.d.ts.map +1 -0
- package/dist/auditor/remediation.js +222 -0
- package/dist/auditor/remediation.js.map +1 -0
- package/dist/auditor/tool-detector.d.ts +15 -0
- package/dist/auditor/tool-detector.d.ts.map +1 -0
- package/dist/auditor/tool-detector.js +241 -0
- package/dist/auditor/tool-detector.js.map +1 -0
- package/dist/auditor/types.d.ts +31 -0
- package/dist/auditor/types.d.ts.map +1 -0
- package/dist/auditor/types.js +2 -0
- package/dist/auditor/types.js.map +1 -0
- package/dist/auditor/vscode-extension-scanner.d.ts +8 -0
- package/dist/auditor/vscode-extension-scanner.d.ts.map +1 -0
- package/dist/auditor/vscode-extension-scanner.js +51 -0
- package/dist/auditor/vscode-extension-scanner.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +159 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/audit.d.ts +8 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +151 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +34 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/remediate-cli.d.ts +3 -0
- package/dist/commands/remediate-cli.d.ts.map +1 -0
- package/dist/commands/remediate-cli.js +96 -0
- package/dist/commands/remediate-cli.js.map +1 -0
- package/dist/commands/scan.d.ts +11 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +138 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/watch.d.ts +6 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +203 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +235 -0
- package/dist/config.js.map +1 -0
- package/dist/mcp-server/index.d.ts +3 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +69 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/mcp-server/schemas.d.ts +13 -0
- package/dist/mcp-server/schemas.d.ts.map +1 -0
- package/dist/mcp-server/schemas.js +13 -0
- package/dist/mcp-server/schemas.js.map +1 -0
- package/dist/mcp-server/tools/audit-status.d.ts +3 -0
- package/dist/mcp-server/tools/audit-status.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit-status.js +46 -0
- package/dist/mcp-server/tools/audit-status.js.map +1 -0
- package/dist/mcp-server/tools/check-command.d.ts +4 -0
- package/dist/mcp-server/tools/check-command.d.ts.map +1 -0
- package/dist/mcp-server/tools/check-command.js +30 -0
- package/dist/mcp-server/tools/check-command.js.map +1 -0
- package/dist/mcp-server/tools/scan-content.d.ts +4 -0
- package/dist/mcp-server/tools/scan-content.d.ts.map +1 -0
- package/dist/mcp-server/tools/scan-content.js +18 -0
- package/dist/mcp-server/tools/scan-content.js.map +1 -0
- package/dist/mcp-server/tools/scan-file.d.ts +4 -0
- package/dist/mcp-server/tools/scan-file.d.ts.map +1 -0
- package/dist/mcp-server/tools/scan-file.js +48 -0
- package/dist/mcp-server/tools/scan-file.js.map +1 -0
- package/dist/mcp-server/types.d.ts +15 -0
- package/dist/mcp-server/types.d.ts.map +1 -0
- package/dist/mcp-server/types.js +2 -0
- package/dist/mcp-server/types.js.map +1 -0
- package/dist/reporter/audit-report.d.ts +4 -0
- package/dist/reporter/audit-report.d.ts.map +1 -0
- package/dist/reporter/audit-report.js +186 -0
- package/dist/reporter/audit-report.js.map +1 -0
- package/dist/reporter/json-report.d.ts +3 -0
- package/dist/reporter/json-report.d.ts.map +1 -0
- package/dist/reporter/json-report.js +4 -0
- package/dist/reporter/json-report.js.map +1 -0
- package/dist/reporter/remediation-text.d.ts +3 -0
- package/dist/reporter/remediation-text.d.ts.map +1 -0
- package/dist/reporter/remediation-text.js +12 -0
- package/dist/reporter/remediation-text.js.map +1 -0
- package/dist/reporter/risk-scorer.d.ts +8 -0
- package/dist/reporter/risk-scorer.d.ts.map +1 -0
- package/dist/reporter/risk-scorer.js +40 -0
- package/dist/reporter/risk-scorer.js.map +1 -0
- package/dist/reporter/sarif-report.d.ts +3 -0
- package/dist/reporter/sarif-report.d.ts.map +1 -0
- package/dist/reporter/sarif-report.js +80 -0
- package/dist/reporter/sarif-report.js.map +1 -0
- package/dist/reporter/shared.d.ts +11 -0
- package/dist/reporter/shared.d.ts.map +1 -0
- package/dist/reporter/shared.js +85 -0
- package/dist/reporter/shared.js.map +1 -0
- package/dist/reporter/summary-generator.d.ts +16 -0
- package/dist/reporter/summary-generator.d.ts.map +1 -0
- package/dist/reporter/summary-generator.js +89 -0
- package/dist/reporter/summary-generator.js.map +1 -0
- package/dist/reporter/terminal-report.d.ts +4 -0
- package/dist/reporter/terminal-report.d.ts.map +1 -0
- package/dist/reporter/terminal-report.js +135 -0
- package/dist/reporter/terminal-report.js.map +1 -0
- package/dist/rules/crypto-rules.d.ts +3 -0
- package/dist/rules/crypto-rules.d.ts.map +1 -0
- package/dist/rules/crypto-rules.js +252 -0
- package/dist/rules/crypto-rules.js.map +1 -0
- package/dist/rules/default-rules.d.ts +9 -0
- package/dist/rules/default-rules.d.ts.map +1 -0
- package/dist/rules/default-rules.js +1319 -0
- package/dist/rules/default-rules.js.map +1 -0
- package/dist/rules/index.d.ts +7 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +7 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/injection-rules.d.ts +8 -0
- package/dist/rules/injection-rules.d.ts.map +1 -0
- package/dist/rules/injection-rules.js +108 -0
- package/dist/rules/injection-rules.js.map +1 -0
- package/dist/rules/types.d.ts +52 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/scanner/filesystem-scanner.d.ts +26 -0
- package/dist/scanner/filesystem-scanner.d.ts.map +1 -0
- package/dist/scanner/filesystem-scanner.js +369 -0
- package/dist/scanner/filesystem-scanner.js.map +1 -0
- package/dist/scanner/injection-scanner.d.ts +12 -0
- package/dist/scanner/injection-scanner.d.ts.map +1 -0
- package/dist/scanner/injection-scanner.js +136 -0
- package/dist/scanner/injection-scanner.js.map +1 -0
- package/dist/scanner/permission-checker.d.ts +4 -0
- package/dist/scanner/permission-checker.d.ts.map +1 -0
- package/dist/scanner/permission-checker.js +37 -0
- package/dist/scanner/permission-checker.js.map +1 -0
- package/dist/scanner/redact.d.ts +3 -0
- package/dist/scanner/redact.d.ts.map +1 -0
- package/dist/scanner/redact.js +17 -0
- package/dist/scanner/redact.js.map +1 -0
- package/dist/scanner/rule-engine.d.ts +9 -0
- package/dist/scanner/rule-engine.d.ts.map +1 -0
- package/dist/scanner/rule-engine.js +129 -0
- package/dist/scanner/rule-engine.js.map +1 -0
- package/dist/scanner/system-targets.d.ts +17 -0
- package/dist/scanner/system-targets.d.ts.map +1 -0
- package/dist/scanner/system-targets.js +81 -0
- package/dist/scanner/system-targets.js.map +1 -0
- package/dist/tui/App.d.ts +6 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +224 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/BootSequence.d.ts +6 -0
- package/dist/tui/components/BootSequence.d.ts.map +1 -0
- package/dist/tui/components/BootSequence.js +40 -0
- package/dist/tui/components/BootSequence.js.map +1 -0
- package/dist/tui/components/BorderedSection.d.ts +12 -0
- package/dist/tui/components/BorderedSection.d.ts.map +1 -0
- package/dist/tui/components/BorderedSection.js +7 -0
- package/dist/tui/components/BorderedSection.js.map +1 -0
- package/dist/tui/components/ErrorBoundary.d.ts +18 -0
- package/dist/tui/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/tui/components/ErrorBoundary.js +36 -0
- package/dist/tui/components/ErrorBoundary.js.map +1 -0
- package/dist/tui/components/FirstUseHint.d.ts +7 -0
- package/dist/tui/components/FirstUseHint.d.ts.map +1 -0
- package/dist/tui/components/FirstUseHint.js +20 -0
- package/dist/tui/components/FirstUseHint.js.map +1 -0
- package/dist/tui/components/Footer.d.ts +10 -0
- package/dist/tui/components/Footer.d.ts.map +1 -0
- package/dist/tui/components/Footer.js +51 -0
- package/dist/tui/components/Footer.js.map +1 -0
- package/dist/tui/components/MetricCard.d.ts +11 -0
- package/dist/tui/components/MetricCard.d.ts.map +1 -0
- package/dist/tui/components/MetricCard.js +8 -0
- package/dist/tui/components/MetricCard.js.map +1 -0
- package/dist/tui/components/Panel.d.ts +15 -0
- package/dist/tui/components/Panel.d.ts.map +1 -0
- package/dist/tui/components/Panel.js +25 -0
- package/dist/tui/components/Panel.js.map +1 -0
- package/dist/tui/components/RemediationMenu.d.ts +10 -0
- package/dist/tui/components/RemediationMenu.d.ts.map +1 -0
- package/dist/tui/components/RemediationMenu.js +84 -0
- package/dist/tui/components/RemediationMenu.js.map +1 -0
- package/dist/tui/components/RiskGauge.d.ts +7 -0
- package/dist/tui/components/RiskGauge.d.ts.map +1 -0
- package/dist/tui/components/RiskGauge.js +55 -0
- package/dist/tui/components/RiskGauge.js.map +1 -0
- package/dist/tui/components/ScrollableList.d.ts +11 -0
- package/dist/tui/components/ScrollableList.d.ts.map +1 -0
- package/dist/tui/components/ScrollableList.js +14 -0
- package/dist/tui/components/ScrollableList.js.map +1 -0
- package/dist/tui/components/Section.d.ts +9 -0
- package/dist/tui/components/Section.d.ts.map +1 -0
- package/dist/tui/components/Section.js +7 -0
- package/dist/tui/components/Section.js.map +1 -0
- package/dist/tui/components/SectionHeader.d.ts +8 -0
- package/dist/tui/components/SectionHeader.d.ts.map +1 -0
- package/dist/tui/components/SectionHeader.js +15 -0
- package/dist/tui/components/SectionHeader.js.map +1 -0
- package/dist/tui/components/SeverityBadge.d.ts +5 -0
- package/dist/tui/components/SeverityBadge.d.ts.map +1 -0
- package/dist/tui/components/SeverityBadge.js +7 -0
- package/dist/tui/components/SeverityBadge.js.map +1 -0
- package/dist/tui/components/Sidebar.d.ts +2 -0
- package/dist/tui/components/Sidebar.d.ts.map +1 -0
- package/dist/tui/components/Sidebar.js +40 -0
- package/dist/tui/components/Sidebar.js.map +1 -0
- package/dist/tui/components/StatusIndicator.d.ts +8 -0
- package/dist/tui/components/StatusIndicator.d.ts.map +1 -0
- package/dist/tui/components/StatusIndicator.js +15 -0
- package/dist/tui/components/StatusIndicator.js.map +1 -0
- package/dist/tui/components/Table.d.ts +21 -0
- package/dist/tui/components/Table.d.ts.map +1 -0
- package/dist/tui/components/Table.js +38 -0
- package/dist/tui/components/Table.js.map +1 -0
- package/dist/tui/components/Transition.d.ts +8 -0
- package/dist/tui/components/Transition.d.ts.map +1 -0
- package/dist/tui/components/Transition.js +38 -0
- package/dist/tui/components/Transition.js.map +1 -0
- package/dist/tui/components/WelcomeScreen.d.ts +6 -0
- package/dist/tui/components/WelcomeScreen.d.ts.map +1 -0
- package/dist/tui/components/WelcomeScreen.js +14 -0
- package/dist/tui/components/WelcomeScreen.js.map +1 -0
- package/dist/tui/educational.d.ts +32 -0
- package/dist/tui/educational.d.ts.map +1 -0
- package/dist/tui/educational.js +117 -0
- package/dist/tui/educational.js.map +1 -0
- package/dist/tui/hooks/useAudit.d.ts +24 -0
- package/dist/tui/hooks/useAudit.d.ts.map +1 -0
- package/dist/tui/hooks/useAudit.js +263 -0
- package/dist/tui/hooks/useAudit.js.map +1 -0
- package/dist/tui/hooks/useConfig.d.ts +18 -0
- package/dist/tui/hooks/useConfig.d.ts.map +1 -0
- package/dist/tui/hooks/useConfig.js +85 -0
- package/dist/tui/hooks/useConfig.js.map +1 -0
- package/dist/tui/hooks/useHookStatus.d.ts +10 -0
- package/dist/tui/hooks/useHookStatus.d.ts.map +1 -0
- package/dist/tui/hooks/useHookStatus.js +59 -0
- package/dist/tui/hooks/useHookStatus.js.map +1 -0
- package/dist/tui/hooks/useLogs.d.ts +42 -0
- package/dist/tui/hooks/useLogs.d.ts.map +1 -0
- package/dist/tui/hooks/useLogs.js +105 -0
- package/dist/tui/hooks/useLogs.js.map +1 -0
- package/dist/tui/hooks/useScan.d.ts +39 -0
- package/dist/tui/hooks/useScan.d.ts.map +1 -0
- package/dist/tui/hooks/useScan.js +255 -0
- package/dist/tui/hooks/useScan.js.map +1 -0
- package/dist/tui/hooks/useTerminalSize.d.ts +10 -0
- package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/tui/hooks/useTerminalSize.js +27 -0
- package/dist/tui/hooks/useTerminalSize.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/AuditPanel.d.ts +7 -0
- package/dist/tui/screens/AuditPanel.d.ts.map +1 -0
- package/dist/tui/screens/AuditPanel.js +467 -0
- package/dist/tui/screens/AuditPanel.js.map +1 -0
- package/dist/tui/screens/LogsPanel.d.ts +2 -0
- package/dist/tui/screens/LogsPanel.d.ts.map +1 -0
- package/dist/tui/screens/LogsPanel.js +127 -0
- package/dist/tui/screens/LogsPanel.js.map +1 -0
- package/dist/tui/screens/OverviewPanel.d.ts +2 -0
- package/dist/tui/screens/OverviewPanel.d.ts.map +1 -0
- package/dist/tui/screens/OverviewPanel.js +84 -0
- package/dist/tui/screens/OverviewPanel.js.map +1 -0
- package/dist/tui/screens/ScanPanel.d.ts +2 -0
- package/dist/tui/screens/ScanPanel.d.ts.map +1 -0
- package/dist/tui/screens/ScanPanel.js +188 -0
- package/dist/tui/screens/ScanPanel.js.map +1 -0
- package/dist/tui/screens/ScanResultsPanel.d.ts +2 -0
- package/dist/tui/screens/ScanResultsPanel.d.ts.map +1 -0
- package/dist/tui/screens/ScanResultsPanel.js +394 -0
- package/dist/tui/screens/ScanResultsPanel.js.map +1 -0
- package/dist/tui/screens/SettingsPanel.d.ts +2 -0
- package/dist/tui/screens/SettingsPanel.d.ts.map +1 -0
- package/dist/tui/screens/SettingsPanel.js +353 -0
- package/dist/tui/screens/SettingsPanel.js.map +1 -0
- package/dist/tui/state.d.ts +35 -0
- package/dist/tui/state.d.ts.map +1 -0
- package/dist/tui/state.js +13 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/theme.d.ts +58 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +80 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/hooks/audit-logger.sh +74 -0
- package/hooks/detection-lib.sh +301 -0
- package/hooks/git-pre-commit.sh +195 -0
- package/hooks/git-pre-push.sh +125 -0
- package/hooks/git-safety.sh +152 -0
- package/hooks/security-scanner.sh +527 -0
- package/install.sh +543 -0
- package/package.json +67 -0
- package/patterns/credentials.yaml +317 -0
- package/patterns/dangerous-commands.yaml +167 -0
- package/patterns/pii.yaml +95 -0
- package/patterns/prompt-injection.yaml +131 -0
- package/patterns/supply-chain.yaml +119 -0
- package/rules/AGENTS.md +60 -0
- package/rules/SECURITY-RULES.md +177 -0
- package/rules/claude.md +9 -0
- package/rules/clinerules +29 -0
- package/rules/continuerules +29 -0
- package/rules/copilot-instructions.md +9 -0
- package/rules/cursor-security.mdc +14 -0
- package/rules/gemini.md +9 -0
- package/rules/kiro-security.md +29 -0
- package/rules/roocode-security.md +29 -0
- package/rules/trae-security.md +29 -0
- package/rules/windsurfrules +9 -0
- package/skill/llm-antivirus/SKILL.md +73 -0
- package/skill/llm-antivirus/references/threat-patterns.yaml +82 -0
- package/skill/llm-antivirus/scripts/security-audit.sh +244 -0
- package/uninstall.sh +215 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# ChainWall — Credential Detection Patterns
|
|
2
|
+
#
|
|
3
|
+
# 50+ patterns for API keys, tokens, and secrets from major providers.
|
|
4
|
+
# Reference database. Consumed by security-audit.sh for project scanning.
|
|
5
|
+
# Critical patterns are hardcoded in hooks for real-time enforcement.
|
|
6
|
+
#
|
|
7
|
+
# Fields:
|
|
8
|
+
# name: Human-readable pattern name
|
|
9
|
+
# regex: POSIX ERE with `(?i)` prefix convention (stripped by scanner, replaced with -i flag)
|
|
10
|
+
# severity: critical | high | medium
|
|
11
|
+
# description: What this pattern detects and why it matters
|
|
12
|
+
#
|
|
13
|
+
# Severity guide:
|
|
14
|
+
# critical — Live production credentials, immediate exploitation risk
|
|
15
|
+
# high — API keys/tokens with significant access scope
|
|
16
|
+
# medium — Keys with limited scope or test-mode indicators
|
|
17
|
+
|
|
18
|
+
patterns:
|
|
19
|
+
|
|
20
|
+
# ── AWS ──────────────────────────────────────────────────────────────
|
|
21
|
+
- name: AWS Access Key ID
|
|
22
|
+
regex: "AKIA[0-9A-Z]{16}"
|
|
23
|
+
severity: critical
|
|
24
|
+
description: AWS IAM access key — grants programmatic access to AWS services
|
|
25
|
+
|
|
26
|
+
- name: AWS Secret Access Key
|
|
27
|
+
regex: "(?i)aws_secret_access_key[\"'\\s=:]+[A-Za-z0-9/+=]{40}"
|
|
28
|
+
severity: critical
|
|
29
|
+
description: AWS secret key paired with access key ID
|
|
30
|
+
|
|
31
|
+
- name: AWS Session Token
|
|
32
|
+
regex: "(?i)aws_session_token[\"'\\s=:]+[A-Za-z0-9/+=]{100,}"
|
|
33
|
+
severity: critical
|
|
34
|
+
description: Temporary AWS session token from STS
|
|
35
|
+
|
|
36
|
+
# ── GCP / Google ─────────────────────────────────────────────────────
|
|
37
|
+
- name: Google API Key
|
|
38
|
+
regex: "AIza[0-9A-Za-z_-]{35}"
|
|
39
|
+
severity: high
|
|
40
|
+
description: Google Cloud / Maps / Firebase API key
|
|
41
|
+
|
|
42
|
+
- name: GCP Service Account Key
|
|
43
|
+
regex: "\"type\":\\s*\"service_account\""
|
|
44
|
+
severity: critical
|
|
45
|
+
description: GCP service account JSON key file marker
|
|
46
|
+
|
|
47
|
+
- name: Google OAuth Client Secret
|
|
48
|
+
regex: "(?i)client_secret[\"'\\s=:]+[A-Za-z0-9_-]{24,}"
|
|
49
|
+
severity: high
|
|
50
|
+
description: Google OAuth2 client secret
|
|
51
|
+
|
|
52
|
+
# ── Azure ────────────────────────────────────────────────────────────
|
|
53
|
+
- name: Azure Storage Account Key
|
|
54
|
+
regex: "(?i)(AccountKey|azure_storage_key)[\"'\\s=:]+[A-Za-z0-9/+=]{86,88}=="
|
|
55
|
+
severity: critical
|
|
56
|
+
description: Azure Storage account access key
|
|
57
|
+
|
|
58
|
+
- name: Azure AD Client Secret
|
|
59
|
+
regex: "(?i)(client_secret|azure_client_secret)[\"'\\s=:]+[A-Za-z0-9_.~-]{34,}"
|
|
60
|
+
severity: high
|
|
61
|
+
description: Azure Active Directory application secret
|
|
62
|
+
|
|
63
|
+
- name: Azure Connection String
|
|
64
|
+
regex: "DefaultEndpointsProtocol=https;AccountName=[^;]+;AccountKey=[A-Za-z0-9/+=]{86,88}=="
|
|
65
|
+
severity: critical
|
|
66
|
+
description: Azure Storage connection string with embedded key
|
|
67
|
+
|
|
68
|
+
# ── GitHub ───────────────────────────────────────────────────────────
|
|
69
|
+
- name: GitHub Personal Access Token
|
|
70
|
+
regex: "ghp_[a-zA-Z0-9]{36,}"
|
|
71
|
+
severity: critical
|
|
72
|
+
description: GitHub classic personal access token
|
|
73
|
+
|
|
74
|
+
- name: GitHub Fine-Grained Token
|
|
75
|
+
regex: "github_pat_[a-zA-Z0-9]{22,}_[a-zA-Z0-9]{59,}"
|
|
76
|
+
severity: critical
|
|
77
|
+
description: GitHub fine-grained personal access token
|
|
78
|
+
|
|
79
|
+
- name: GitHub OAuth Access Token
|
|
80
|
+
regex: "gho_[a-zA-Z0-9]{36}"
|
|
81
|
+
severity: high
|
|
82
|
+
description: GitHub OAuth access token
|
|
83
|
+
|
|
84
|
+
- name: GitHub App Token
|
|
85
|
+
regex: "(ghu|ghs)_[a-zA-Z0-9]{36}"
|
|
86
|
+
severity: high
|
|
87
|
+
description: GitHub App user-to-server or server-to-server token
|
|
88
|
+
|
|
89
|
+
- name: GitHub App Refresh Token
|
|
90
|
+
regex: "ghr_[a-zA-Z0-9]{36}"
|
|
91
|
+
severity: high
|
|
92
|
+
description: GitHub App refresh token
|
|
93
|
+
|
|
94
|
+
# ── GitLab ───────────────────────────────────────────────────────────
|
|
95
|
+
- name: GitLab Personal Access Token
|
|
96
|
+
regex: "glpat-[a-zA-Z0-9_-]{20,}"
|
|
97
|
+
severity: critical
|
|
98
|
+
description: GitLab personal access token
|
|
99
|
+
|
|
100
|
+
- name: GitLab Pipeline Token
|
|
101
|
+
regex: "glptt-[a-zA-Z0-9_-]{20,}"
|
|
102
|
+
severity: high
|
|
103
|
+
description: GitLab pipeline trigger token
|
|
104
|
+
|
|
105
|
+
- name: GitLab Runner Token
|
|
106
|
+
regex: "glrt-[a-zA-Z0-9_-]{20,}"
|
|
107
|
+
severity: high
|
|
108
|
+
description: GitLab runner registration token
|
|
109
|
+
|
|
110
|
+
# ── Slack ────────────────────────────────────────────────────────────
|
|
111
|
+
- name: Slack Bot/User Token
|
|
112
|
+
regex: "xox[pboa]-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24,}"
|
|
113
|
+
severity: critical
|
|
114
|
+
description: Slack API token (bot, user, app, or OAuth)
|
|
115
|
+
|
|
116
|
+
- name: Slack Webhook URL
|
|
117
|
+
regex: "https://hooks\\.slack\\.com/services/T[A-Z0-9]{8,}/B[A-Z0-9]{8,}/[a-zA-Z0-9]{24,}"
|
|
118
|
+
severity: high
|
|
119
|
+
description: Slack incoming webhook URL
|
|
120
|
+
|
|
121
|
+
# ── Stripe ───────────────────────────────────────────────────────────
|
|
122
|
+
- name: Stripe Secret Key
|
|
123
|
+
regex: "sk_(live|test)_[a-zA-Z0-9]{24,}"
|
|
124
|
+
severity: critical
|
|
125
|
+
description: Stripe API secret key (live or test mode)
|
|
126
|
+
|
|
127
|
+
- name: Stripe Restricted Key
|
|
128
|
+
regex: "rk_(live|test)_[a-zA-Z0-9]{24,}"
|
|
129
|
+
severity: high
|
|
130
|
+
description: Stripe restricted API key
|
|
131
|
+
|
|
132
|
+
- name: Stripe Webhook Secret
|
|
133
|
+
regex: "whsec_[a-zA-Z0-9]{32,}"
|
|
134
|
+
severity: high
|
|
135
|
+
description: Stripe webhook signing secret
|
|
136
|
+
|
|
137
|
+
# ── OpenAI / Anthropic ──────────────────────────────────────────────
|
|
138
|
+
- name: OpenAI API Key
|
|
139
|
+
regex: "sk-[a-zA-Z0-9]{48}"
|
|
140
|
+
severity: critical
|
|
141
|
+
description: OpenAI API key for GPT/DALL-E/Whisper access
|
|
142
|
+
|
|
143
|
+
- name: OpenAI Project Key
|
|
144
|
+
regex: "sk-proj-[a-zA-Z0-9_-]{48,}"
|
|
145
|
+
severity: critical
|
|
146
|
+
description: OpenAI project-scoped API key
|
|
147
|
+
|
|
148
|
+
- name: Anthropic API Key
|
|
149
|
+
regex: "sk-ant-[a-zA-Z0-9_-]{40,}"
|
|
150
|
+
severity: critical
|
|
151
|
+
description: Anthropic API key for Claude access
|
|
152
|
+
|
|
153
|
+
# ── Twilio ───────────────────────────────────────────────────────────
|
|
154
|
+
- name: Twilio API Key
|
|
155
|
+
regex: "SK[a-f0-9]{32}"
|
|
156
|
+
severity: high
|
|
157
|
+
description: Twilio API key (SK prefix + 32 hex chars)
|
|
158
|
+
|
|
159
|
+
- name: Twilio Account SID
|
|
160
|
+
regex: "AC[a-f0-9]{32}"
|
|
161
|
+
severity: medium
|
|
162
|
+
description: Twilio Account SID (not secret but sensitive identifier)
|
|
163
|
+
|
|
164
|
+
# ── SendGrid ─────────────────────────────────────────────────────────
|
|
165
|
+
- name: SendGrid API Key
|
|
166
|
+
regex: "SG\\.[a-zA-Z0-9_-]{22}\\.[a-zA-Z0-9_-]{43}"
|
|
167
|
+
severity: critical
|
|
168
|
+
description: SendGrid API key for email sending
|
|
169
|
+
|
|
170
|
+
# ── Supabase ─────────────────────────────────────────────────────────
|
|
171
|
+
- name: Supabase Service Role Key
|
|
172
|
+
regex: "(?i)(supabase_service_role_key|SUPABASE_SERVICE_KEY)[\"'\\s=:]+eyJ[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+"
|
|
173
|
+
severity: critical
|
|
174
|
+
description: Supabase service role JWT — bypasses Row Level Security
|
|
175
|
+
|
|
176
|
+
- name: Supabase Anon Key (exposed)
|
|
177
|
+
regex: "(?i)supabase_anon_key[\"'\\s=:]+eyJ[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+"
|
|
178
|
+
severity: medium
|
|
179
|
+
description: Supabase anonymous key — public but sensitive in server context
|
|
180
|
+
|
|
181
|
+
# ── Firebase ─────────────────────────────────────────────────────────
|
|
182
|
+
- name: Firebase Server Key
|
|
183
|
+
regex: "AAAA[a-zA-Z0-9_-]{7,}:[a-zA-Z0-9_-]{140,}"
|
|
184
|
+
severity: critical
|
|
185
|
+
description: Firebase Cloud Messaging server key
|
|
186
|
+
|
|
187
|
+
# ── Databricks ───────────────────────────────────────────────────────
|
|
188
|
+
- name: Databricks Access Token
|
|
189
|
+
regex: "dapi[a-f0-9]{32}"
|
|
190
|
+
severity: high
|
|
191
|
+
description: Databricks personal access token
|
|
192
|
+
|
|
193
|
+
# ── npm / PyPI / Docker ──────────────────────────────────────────────
|
|
194
|
+
- name: npm Access Token
|
|
195
|
+
regex: "npm_[a-zA-Z0-9]{36}"
|
|
196
|
+
severity: critical
|
|
197
|
+
description: npm registry authentication token
|
|
198
|
+
|
|
199
|
+
- name: PyPI API Token
|
|
200
|
+
regex: "pypi-[a-zA-Z0-9_-]{50,}"
|
|
201
|
+
severity: critical
|
|
202
|
+
description: PyPI package repository API token
|
|
203
|
+
|
|
204
|
+
- name: Docker Hub Access Token
|
|
205
|
+
regex: "dckr_pat_[a-zA-Z0-9_-]{20,}"
|
|
206
|
+
severity: high
|
|
207
|
+
description: Docker Hub personal access token
|
|
208
|
+
|
|
209
|
+
# ── JWT / Bearer ─────────────────────────────────────────────────────
|
|
210
|
+
- name: JSON Web Token
|
|
211
|
+
regex: "eyJ[a-zA-Z0-9_-]{10,}\\.[a-zA-Z0-9_-]{10,}\\.[a-zA-Z0-9_-]{10,}"
|
|
212
|
+
severity: medium
|
|
213
|
+
description: JWT token (may contain sensitive claims)
|
|
214
|
+
|
|
215
|
+
- name: Bearer Token
|
|
216
|
+
regex: "Bearer\\s+[a-zA-Z0-9_-]{20,}"
|
|
217
|
+
severity: medium
|
|
218
|
+
description: Authorization Bearer token in header format (entropy-validated in TypeScript layer)
|
|
219
|
+
|
|
220
|
+
# ── SSH / PGP ────────────────────────────────────────────────────────
|
|
221
|
+
- name: RSA Private Key
|
|
222
|
+
regex: "-----BEGIN RSA PRIVATE KEY-----"
|
|
223
|
+
severity: critical
|
|
224
|
+
description: PEM-encoded RSA private key header
|
|
225
|
+
|
|
226
|
+
- name: DSA Private Key
|
|
227
|
+
regex: "-----BEGIN DSA PRIVATE KEY-----"
|
|
228
|
+
severity: critical
|
|
229
|
+
description: PEM-encoded DSA private key header
|
|
230
|
+
|
|
231
|
+
- name: EC Private Key
|
|
232
|
+
regex: "-----BEGIN EC PRIVATE KEY-----"
|
|
233
|
+
severity: critical
|
|
234
|
+
description: PEM-encoded Elliptic Curve private key header
|
|
235
|
+
|
|
236
|
+
- name: OpenSSH Private Key
|
|
237
|
+
regex: "-----BEGIN OPENSSH PRIVATE KEY-----"
|
|
238
|
+
severity: critical
|
|
239
|
+
description: OpenSSH format private key header
|
|
240
|
+
|
|
241
|
+
- name: PGP Private Key Block
|
|
242
|
+
regex: "-----BEGIN PGP PRIVATE KEY BLOCK-----"
|
|
243
|
+
severity: critical
|
|
244
|
+
description: PGP/GPG private key block header
|
|
245
|
+
|
|
246
|
+
# ── Hashicorp Vault ──────────────────────────────────────────────────
|
|
247
|
+
- name: Vault Token
|
|
248
|
+
regex: "hvs\\.[a-zA-Z0-9_-]{24,}"
|
|
249
|
+
severity: critical
|
|
250
|
+
description: HashiCorp Vault service token
|
|
251
|
+
|
|
252
|
+
- name: Vault Batch Token
|
|
253
|
+
regex: "hvb\\.[a-zA-Z0-9_-]{24,}"
|
|
254
|
+
severity: high
|
|
255
|
+
description: HashiCorp Vault batch token
|
|
256
|
+
|
|
257
|
+
# ── Datadog ──────────────────────────────────────────────────────────
|
|
258
|
+
- name: Datadog API Key
|
|
259
|
+
regex: "(?i)(dd_api_key|datadog_api_key)[\"'\\s=:]+[a-f0-9]{32}"
|
|
260
|
+
severity: high
|
|
261
|
+
description: Datadog API key for monitoring data access
|
|
262
|
+
|
|
263
|
+
# ── Mailgun ──────────────────────────────────────────────────────────
|
|
264
|
+
- name: Mailgun API Key
|
|
265
|
+
regex: "key-[a-f0-9]{32}"
|
|
266
|
+
severity: high
|
|
267
|
+
description: Mailgun API key for email service
|
|
268
|
+
|
|
269
|
+
# ── Heroku ───────────────────────────────────────────────────────────
|
|
270
|
+
- name: Heroku API Key
|
|
271
|
+
regex: "(?i)(heroku_api_key|HEROKU_API_KEY)[\"'\\s=:]+[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
|
|
272
|
+
severity: high
|
|
273
|
+
description: Heroku platform API key (UUID format)
|
|
274
|
+
|
|
275
|
+
# ── Shopify ──────────────────────────────────────────────────────────
|
|
276
|
+
- name: Shopify Access Token
|
|
277
|
+
regex: "shpat_[a-f0-9]{32}"
|
|
278
|
+
severity: high
|
|
279
|
+
description: Shopify Admin API access token
|
|
280
|
+
|
|
281
|
+
- name: Shopify Custom App Token
|
|
282
|
+
regex: "shpca_[a-f0-9]{32}"
|
|
283
|
+
severity: high
|
|
284
|
+
description: Shopify custom app access token
|
|
285
|
+
|
|
286
|
+
- name: Shopify Private App Password
|
|
287
|
+
regex: "shppa_[a-f0-9]{32}"
|
|
288
|
+
severity: high
|
|
289
|
+
description: Shopify private app password
|
|
290
|
+
|
|
291
|
+
# ── Linear ───────────────────────────────────────────────────────────
|
|
292
|
+
- name: Linear API Key
|
|
293
|
+
regex: "lin_api_[a-zA-Z0-9]{40,}"
|
|
294
|
+
severity: high
|
|
295
|
+
description: Linear project management API key
|
|
296
|
+
|
|
297
|
+
# ── Vercel ───────────────────────────────────────────────────────────
|
|
298
|
+
- name: Vercel Access Token
|
|
299
|
+
regex: "(?i)(vercel_token|VERCEL_TOKEN)[\"'\\s=:]+[a-zA-Z0-9]{24,}"
|
|
300
|
+
severity: high
|
|
301
|
+
description: Vercel platform access token
|
|
302
|
+
|
|
303
|
+
# ── Generic High-Entropy Secrets ─────────────────────────────────────
|
|
304
|
+
- name: Generic API Key Assignment
|
|
305
|
+
regex: "(?i)(api_key|apikey|api_secret|secret_key)[\"'\\s=:]+[a-zA-Z0-9_-]{20,}"
|
|
306
|
+
severity: medium
|
|
307
|
+
description: Generic API key or secret in assignment context
|
|
308
|
+
|
|
309
|
+
- name: Password in Config
|
|
310
|
+
regex: "(?i)(password|passwd|pwd)[\"'\\s=:]+[^\\s\"']{8,}"
|
|
311
|
+
severity: medium
|
|
312
|
+
description: Password value in configuration or code
|
|
313
|
+
|
|
314
|
+
- name: Private Key Variable
|
|
315
|
+
regex: "(?i)(private_key|privatekey)[\"'\\s=:]+[a-zA-Z0-9/+=_-]{20,}"
|
|
316
|
+
severity: high
|
|
317
|
+
description: Private key value in variable assignment
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# ChainWall — Dangerous Command Detection Patterns
|
|
2
|
+
#
|
|
3
|
+
# Shell commands that could cause system damage, data loss, or compromise.
|
|
4
|
+
# Reference database. Consumed by security-audit.sh for project scanning.
|
|
5
|
+
# Critical patterns are hardcoded in hooks for real-time enforcement.
|
|
6
|
+
#
|
|
7
|
+
# Fields:
|
|
8
|
+
# name: Human-readable pattern name
|
|
9
|
+
# regex: POSIX ERE with `(?i)` prefix convention (stripped by scanner, replaced with -i flag)
|
|
10
|
+
# severity: critical | high | medium
|
|
11
|
+
# description: What this command does and why it's dangerous
|
|
12
|
+
# scope: command (only checked against tool_input.command)
|
|
13
|
+
|
|
14
|
+
patterns:
|
|
15
|
+
|
|
16
|
+
# ── Destructive File Operations ──────────────────────────────────────
|
|
17
|
+
- name: Recursive Force Delete
|
|
18
|
+
regex: "rm\\s+-[^\\s]*r[^\\s]*f|rm\\s+-[^\\s]*f[^\\s]*r"
|
|
19
|
+
severity: critical
|
|
20
|
+
description: "rm with both -r and -f flags — recursive force deletion, data loss risk"
|
|
21
|
+
scope: command
|
|
22
|
+
|
|
23
|
+
- name: Shred File
|
|
24
|
+
regex: "shred\\s+"
|
|
25
|
+
severity: high
|
|
26
|
+
description: "Securely overwrites file content — irreversible data destruction"
|
|
27
|
+
scope: command
|
|
28
|
+
|
|
29
|
+
# ── Remote Code Execution ────────────────────────────────────────────
|
|
30
|
+
- name: Curl Pipe to Shell
|
|
31
|
+
regex: "(curl|wget)\\s.+\\|\\s*(bash|sh|zsh|ksh|dash|fish|python|perl|ruby|node)"
|
|
32
|
+
severity: critical
|
|
33
|
+
description: "Downloads and executes remote code — classic malware delivery vector"
|
|
34
|
+
scope: command
|
|
35
|
+
|
|
36
|
+
- name: Eval from Variable
|
|
37
|
+
regex: "eval\\s+\\$"
|
|
38
|
+
severity: high
|
|
39
|
+
description: "Evaluates shell variable as code — command injection risk"
|
|
40
|
+
scope: command
|
|
41
|
+
|
|
42
|
+
- name: Base64 Decode Execute
|
|
43
|
+
regex: "base64\\s+(-d|--decode).*\\|\\s*(bash|sh|eval)"
|
|
44
|
+
severity: critical
|
|
45
|
+
description: "Decodes and executes base64 content — obfuscated code execution"
|
|
46
|
+
scope: command
|
|
47
|
+
|
|
48
|
+
# ── Dangerous Permissions ────────────────────────────────────────────
|
|
49
|
+
- name: World-Writable Permissions
|
|
50
|
+
regex: "chmod\\s+777"
|
|
51
|
+
severity: high
|
|
52
|
+
description: "Sets world-readable/writable/executable — security misconfiguration"
|
|
53
|
+
scope: command
|
|
54
|
+
|
|
55
|
+
- name: SetUID Bit
|
|
56
|
+
regex: "chmod\\s+[u+]*s|chmod\\s+[0-7]*4[0-7]{3}"
|
|
57
|
+
severity: critical
|
|
58
|
+
description: "Sets SUID/SGID bit — privilege escalation vector"
|
|
59
|
+
scope: command
|
|
60
|
+
|
|
61
|
+
# ── Disk/Device Operations ───────────────────────────────────────────
|
|
62
|
+
- name: DD to Device
|
|
63
|
+
regex: "dd\\s.+of=/dev/"
|
|
64
|
+
severity: critical
|
|
65
|
+
description: "Writes directly to block device — potential disk destruction"
|
|
66
|
+
scope: command
|
|
67
|
+
|
|
68
|
+
- name: Filesystem Format
|
|
69
|
+
regex: "mkfs"
|
|
70
|
+
severity: critical
|
|
71
|
+
description: "Formats a filesystem — complete data loss on target device"
|
|
72
|
+
scope: command
|
|
73
|
+
|
|
74
|
+
- name: Direct Device Write
|
|
75
|
+
regex: ">/dev/(sd|hd|nvme|vd|xvd)"
|
|
76
|
+
severity: critical
|
|
77
|
+
description: "Redirects output to block device — disk corruption risk"
|
|
78
|
+
scope: command
|
|
79
|
+
|
|
80
|
+
# ── Network Exfiltration ─────────────────────────────────────────────
|
|
81
|
+
- name: Netcat Listener
|
|
82
|
+
regex: "nc\\s+(-l|-p|--listen)"
|
|
83
|
+
severity: high
|
|
84
|
+
description: "Opens network listener — potential reverse shell or data exfiltration"
|
|
85
|
+
scope: command
|
|
86
|
+
|
|
87
|
+
- name: Reverse Shell
|
|
88
|
+
regex: "/dev/tcp/|bash\\s+-i\\s+>&|/dev/udp/"
|
|
89
|
+
severity: critical
|
|
90
|
+
description: "Bash reverse shell pattern — remote access backdoor"
|
|
91
|
+
scope: command
|
|
92
|
+
|
|
93
|
+
- name: SSH Tunnel
|
|
94
|
+
regex: "ssh\\s+.*-[RLD]\\s+[0-9]+:"
|
|
95
|
+
severity: medium
|
|
96
|
+
description: "SSH port forwarding — potential data exfiltration tunnel"
|
|
97
|
+
scope: command
|
|
98
|
+
|
|
99
|
+
# ── System Modification ──────────────────────────────────────────────
|
|
100
|
+
- name: Crontab Modification
|
|
101
|
+
regex: "crontab\\s+(-e|-r|-l)|echo.*>>\\s*/etc/cron"
|
|
102
|
+
severity: high
|
|
103
|
+
description: "Modifies scheduled tasks — persistence mechanism"
|
|
104
|
+
scope: command
|
|
105
|
+
|
|
106
|
+
- name: Hosts File Modification
|
|
107
|
+
regex: ">/etc/hosts|>>\\s*/etc/hosts"
|
|
108
|
+
severity: high
|
|
109
|
+
description: "Modifies DNS resolution — potential traffic hijacking"
|
|
110
|
+
scope: command
|
|
111
|
+
|
|
112
|
+
- name: Sudoers Modification
|
|
113
|
+
regex: "visudo|>/etc/sudoers|>>\\s*/etc/sudoers"
|
|
114
|
+
severity: critical
|
|
115
|
+
description: "Modifies sudo permissions — privilege escalation"
|
|
116
|
+
scope: command
|
|
117
|
+
|
|
118
|
+
- name: Systemd Service Install
|
|
119
|
+
regex: "systemctl\\s+(enable|start).*\\.service|cp.*\\.service.*/etc/systemd/"
|
|
120
|
+
severity: high
|
|
121
|
+
description: "Installs or enables systemd service — persistence mechanism"
|
|
122
|
+
scope: command
|
|
123
|
+
|
|
124
|
+
# ── Container Escape ─────────────────────────────────────────────────
|
|
125
|
+
- name: Docker Socket Mount
|
|
126
|
+
regex: "docker.*-v.*/var/run/docker\\.sock"
|
|
127
|
+
severity: critical
|
|
128
|
+
description: "Mounts Docker socket — container escape / host access"
|
|
129
|
+
scope: command
|
|
130
|
+
|
|
131
|
+
- name: Privileged Container
|
|
132
|
+
regex: "docker\\s+run.*--privileged"
|
|
133
|
+
severity: critical
|
|
134
|
+
description: "Runs container in privileged mode — full host access"
|
|
135
|
+
scope: command
|
|
136
|
+
|
|
137
|
+
# ── Environment Manipulation ─────────────────────────────────────────
|
|
138
|
+
- name: LD_PRELOAD Injection
|
|
139
|
+
regex: "LD_PRELOAD="
|
|
140
|
+
severity: critical
|
|
141
|
+
description: "Sets LD_PRELOAD — shared library injection for code hijacking"
|
|
142
|
+
scope: command
|
|
143
|
+
|
|
144
|
+
- name: PATH Manipulation
|
|
145
|
+
regex: "export\\s+PATH=.*:\\."
|
|
146
|
+
severity: high
|
|
147
|
+
description: "Adds current directory to PATH — binary hijacking risk"
|
|
148
|
+
scope: command
|
|
149
|
+
|
|
150
|
+
# ── History/Log Tampering ────────────────────────────────────────────
|
|
151
|
+
- name: History Deletion
|
|
152
|
+
regex: "history\\s+(-c|-d)|>.*\\.bash_history|>.*\\.zsh_history|unset\\s+HISTFILE"
|
|
153
|
+
severity: high
|
|
154
|
+
description: "Clears or disables shell history — anti-forensics technique"
|
|
155
|
+
scope: command
|
|
156
|
+
|
|
157
|
+
- name: Log Tampering
|
|
158
|
+
regex: ">/var/log/|truncate.*(/var/log/|/var/audit/)"
|
|
159
|
+
severity: high
|
|
160
|
+
description: "Clears system logs — anti-forensics technique"
|
|
161
|
+
scope: command
|
|
162
|
+
|
|
163
|
+
- name: History File Deletion
|
|
164
|
+
regex: "history\\s+-c|>.*\\.bash_history"
|
|
165
|
+
severity: high
|
|
166
|
+
description: "Deletes bash history file — evidence destruction technique"
|
|
167
|
+
scope: command
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# ChainWall — PII Detection Patterns
|
|
2
|
+
#
|
|
3
|
+
# Personally Identifiable Information patterns for Layer 5 detection.
|
|
4
|
+
# Reference database. Consumed by security-audit.sh for project scanning.
|
|
5
|
+
# Critical patterns are hardcoded in hooks for real-time enforcement.
|
|
6
|
+
#
|
|
7
|
+
# Fields:
|
|
8
|
+
# name: Human-readable pattern name
|
|
9
|
+
# regex: POSIX ERE with `(?i)` prefix convention (stripped by scanner, replaced with -i flag)
|
|
10
|
+
# severity: critical | high | medium
|
|
11
|
+
# description: What PII this detects
|
|
12
|
+
# validation: Optional extra validation logic (implemented in scanner)
|
|
13
|
+
|
|
14
|
+
patterns:
|
|
15
|
+
|
|
16
|
+
# ── Government IDs ───────────────────────────────────────────────────
|
|
17
|
+
- name: US Social Security Number
|
|
18
|
+
regex: "[0-9]{3}-[0-9]{2}-[0-9]{4}"
|
|
19
|
+
severity: critical
|
|
20
|
+
description: "US SSN in XXX-XX-XXXX format — identity theft risk"
|
|
21
|
+
validation: "first_group_not_000_666_900plus"
|
|
22
|
+
|
|
23
|
+
- name: US SSN (No Dashes)
|
|
24
|
+
regex: "(?i)(ssn|social.?security)[\"'\\s=:]+[0-9]{9}"
|
|
25
|
+
severity: high
|
|
26
|
+
description: "US SSN as 9 continuous digits in labeled context"
|
|
27
|
+
|
|
28
|
+
- name: US EIN/Tax ID
|
|
29
|
+
regex: "(?i)(ein|tax.?id)[\"'\\s=:]+[0-9]{2}-[0-9]{7}"
|
|
30
|
+
severity: high
|
|
31
|
+
description: "US Employer Identification Number"
|
|
32
|
+
|
|
33
|
+
# ── Financial ────────────────────────────────────────────────────────
|
|
34
|
+
- name: Credit Card Number
|
|
35
|
+
regex: "[0-9]{4}[-\\s]?[0-9]{4}[-\\s]?[0-9]{4}[-\\s]?[0-9]{3,4}"
|
|
36
|
+
severity: critical
|
|
37
|
+
description: "15-16 digit credit/debit card number with optional separators (Amex=15, others=16)"
|
|
38
|
+
|
|
39
|
+
- name: Bank Account Number
|
|
40
|
+
regex: "(?i)(account.?num|acct.?no|bank.?account)[\"'\\s=:]+[0-9]{8,17}"
|
|
41
|
+
severity: high
|
|
42
|
+
description: "Bank account number in labeled context"
|
|
43
|
+
|
|
44
|
+
- name: Routing Number
|
|
45
|
+
regex: "(?i)(routing.?num|aba.?num|routing.?no)[\"'\\s=:]+[0-9]{9}"
|
|
46
|
+
severity: high
|
|
47
|
+
description: "US bank routing number (ABA) in labeled context"
|
|
48
|
+
|
|
49
|
+
- name: IBAN
|
|
50
|
+
regex: "[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}"
|
|
51
|
+
severity: high
|
|
52
|
+
description: "International Bank Account Number"
|
|
53
|
+
|
|
54
|
+
# ── Personal Contact ─────────────────────────────────────────────────
|
|
55
|
+
- name: Email with PII Context
|
|
56
|
+
regex: "(?i)(patient|ssn|medical|diagnosis|prescription).*[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}"
|
|
57
|
+
severity: medium
|
|
58
|
+
description: "Email address in medical/PII context — HIPAA risk"
|
|
59
|
+
|
|
60
|
+
- name: Phone in PII Context
|
|
61
|
+
regex: "(?i)(patient|ssn|medical|dob|birth).*[0-9]{3}[-.]?[0-9]{3}[-.]?[0-9]{4}"
|
|
62
|
+
severity: medium
|
|
63
|
+
description: "Phone number in medical/PII context"
|
|
64
|
+
|
|
65
|
+
# ── Medical/Health ───────────────────────────────────────────────────
|
|
66
|
+
- name: Medical Record Number
|
|
67
|
+
regex: "(?i)(mrn|medical.?record|patient.?id)[\"'\\s=:]+[A-Z0-9]{6,20}"
|
|
68
|
+
severity: high
|
|
69
|
+
description: "Medical record number — HIPAA protected"
|
|
70
|
+
|
|
71
|
+
- name: DEA Number
|
|
72
|
+
regex: "[A-Z][A-Z9][0-9]{7}"
|
|
73
|
+
severity: high
|
|
74
|
+
description: "DEA registration number for controlled substances"
|
|
75
|
+
|
|
76
|
+
# ── Identity Documents ───────────────────────────────────────────────
|
|
77
|
+
- name: Passport Number
|
|
78
|
+
regex: "(?i)(passport)[\"'\\s=:]+[A-Z0-9]{6,12}"
|
|
79
|
+
severity: high
|
|
80
|
+
description: "Passport number in labeled context"
|
|
81
|
+
|
|
82
|
+
- name: Driver License
|
|
83
|
+
regex: "(?i)(driver.?licen[sc]e|dl.?num)[\"'\\s=:]+[A-Z0-9]{5,15}"
|
|
84
|
+
severity: high
|
|
85
|
+
description: "Driver's license number in labeled context"
|
|
86
|
+
|
|
87
|
+
- name: Date of Birth
|
|
88
|
+
regex: "(?i)(dob|date.?of.?birth|birthdate)[\"'\\s=:]+[0-9]{1,4}[-/][0-9]{1,2}[-/][0-9]{1,4}"
|
|
89
|
+
severity: medium
|
|
90
|
+
description: "Date of birth in labeled context"
|
|
91
|
+
|
|
92
|
+
- name: Medicare ID
|
|
93
|
+
regex: "[0-9]{4}-[0-9]{3}-[0-9]{4}-[0-9]{3}"
|
|
94
|
+
severity: high
|
|
95
|
+
description: "US Medicare Beneficiary Identifier — HIPAA protected"
|