@blamejs/exceptd-skills 0.12.10 → 0.12.13

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.
@@ -0,0 +1,96 @@
1
+ {
2
+ "_meta": {
3
+ "schema_version": "1.0.0",
4
+ "last_updated": "2026-05-13",
5
+ "attack_version": "v17",
6
+ "attack_version_date": "2025-06-25",
7
+ "source": "https://attack.mitre.org — MITRE ATT&CK Enterprise + ICS. Only techniques currently referenced by shipped exceptd skills and playbooks. The full ATT&CK matrix (~700 techniques) is intentionally not duplicated here; this is a resolution catalog for cross-reference validation, not a substitute for attack.mitre.org. See `npm run refresh-attack-techniques` (v0.13.0+) for the full corpus.",
8
+ "tlp": "CLEAR",
9
+ "source_confidence": {
10
+ "scheme": "Admiralty (A-F + 1-6)",
11
+ "default": "A1",
12
+ "note": "A1 (completely reliable, confirmed) — MITRE ATT&CK is a public reference catalog. Per-entry overrides are not currently used; if an entry's mapping is uncertain it is left out of the catalog rather than carried with reduced confidence."
13
+ },
14
+ "freshness_policy": {
15
+ "default_review_cadence_days": 90,
16
+ "stale_after_days": 180,
17
+ "rebuild_after_days": 365,
18
+ "note": "Catalog must be rebuilt against the upstream ATT&CK release whenever MITRE publishes a new version. AGENTS.md hard rule #8 requires the bump to be intentional, not silent."
19
+ }
20
+ },
21
+ "T0001": { "name": "Authority Spoof", "version": "v17" },
22
+ "T0017": { "name": "Spearphishing Attachment (ICS)", "version": "v17" },
23
+ "T0051": { "name": "Position Tampering", "version": "v17" },
24
+ "T0096": { "name": "Remote System Discovery (ICS)", "version": "v17" },
25
+ "T0853": { "name": "Scripting", "version": "v17" },
26
+ "T0855": { "name": "Unauthorized Command Message", "version": "v17" },
27
+ "T0867": { "name": "Lateral Tool Transfer", "version": "v17" },
28
+ "T0883": { "name": "Internet Accessible Device", "version": "v17" },
29
+ "T1021": { "name": "Remote Services", "version": "v17" },
30
+ "T1027": { "name": "Obfuscated Files or Information", "version": "v17" },
31
+ "T1040": { "name": "Network Sniffing", "version": "v17" },
32
+ "T1041": { "name": "Exfiltration Over C2 Channel", "version": "v17" },
33
+ "T1053.003": { "name": "Scheduled Task/Job: Cron", "version": "v17" },
34
+ "T1055": { "name": "Process Injection", "version": "v17" },
35
+ "T1059": { "name": "Command and Scripting Interpreter", "version": "v17" },
36
+ "T1068": { "name": "Exploitation for Privilege Escalation", "version": "v17" },
37
+ "T1071": { "name": "Application Layer Protocol", "version": "v17" },
38
+ "T1078": { "name": "Valid Accounts", "version": "v17" },
39
+ "T1078.002": { "name": "Valid Accounts: Domain Accounts", "version": "v17" },
40
+ "T1078.003": { "name": "Valid Accounts: Local Accounts", "version": "v17" },
41
+ "T1078.004": { "name": "Valid Accounts: Cloud Accounts", "version": "v17" },
42
+ "T1098": { "name": "Account Manipulation", "version": "v17" },
43
+ "T1102": { "name": "Web Service", "version": "v17" },
44
+ "T1110": { "name": "Brute Force", "version": "v17" },
45
+ "T1110.001": { "name": "Brute Force: Password Guessing", "version": "v17" },
46
+ "T1133": { "name": "External Remote Services", "version": "v17" },
47
+ "T1136.001": { "name": "Create Account: Local Account", "version": "v17" },
48
+ "T1190": { "name": "Exploit Public-Facing Application", "version": "v17" },
49
+ "T1195": { "name": "Supply Chain Compromise", "version": "v17" },
50
+ "T1195.001": { "name": "Supply Chain Compromise: Software Dependencies and Development Tools", "version": "v17" },
51
+ "T1195.002": { "name": "Supply Chain Compromise: Software Supply Chain", "version": "v17" },
52
+ "T1199": { "name": "Trusted Relationship", "version": "v17" },
53
+ "T1203": { "name": "Exploitation for Client Execution", "version": "v17" },
54
+ "T1212": { "name": "Exploitation for Credential Access", "version": "v17" },
55
+ "T1213": { "name": "Data from Information Repositories", "version": "v17" },
56
+ "T1485": { "name": "Data Destruction", "version": "v17" },
57
+ "T1486": { "name": "Data Encrypted for Impact", "version": "v17" },
58
+ "T1505": { "name": "Server Software Component", "version": "v17" },
59
+ "T1518": { "name": "Software Discovery", "version": "v17" },
60
+ "T1525": { "name": "Implant Internal Image", "version": "v17" },
61
+ "T1528": { "name": "Steal Application Access Token", "version": "v17" },
62
+ "T1530": { "name": "Data from Cloud Storage", "version": "v17" },
63
+ "T1543": { "name": "Create or Modify System Process", "version": "v17" },
64
+ "T1546": { "name": "Event Triggered Execution", "version": "v17" },
65
+ "T1547": { "name": "Boot or Logon Autostart Execution", "version": "v17" },
66
+ "T1548.001": { "name": "Abuse Elevation Control Mechanism: Setuid and Setgid", "version": "v17" },
67
+ "T1548.003": { "name": "Abuse Elevation Control Mechanism: Sudo and Sudo Caching", "version": "v17" },
68
+ "T1552": { "name": "Unsecured Credentials", "version": "v17" },
69
+ "T1552.001": { "name": "Unsecured Credentials: Credentials In Files", "version": "v17" },
70
+ "T1552.004": { "name": "Unsecured Credentials: Private Keys", "version": "v17" },
71
+ "T1552.005": { "name": "Unsecured Credentials: Cloud Instance Metadata API", "version": "v17" },
72
+ "T1552.007": { "name": "Unsecured Credentials: Container API", "version": "v17" },
73
+ "T1554": { "name": "Compromise Host Software Binary", "version": "v17" },
74
+ "T1555": { "name": "Credentials from Password Stores", "version": "v17" },
75
+ "T1556": { "name": "Modify Authentication Process", "version": "v17" },
76
+ "T1557": { "name": "Adversary-in-the-Middle", "version": "v17" },
77
+ "T1562.001": { "name": "Impair Defenses: Disable or Modify Tools", "version": "v17" },
78
+ "T1562.006": { "name": "Impair Defenses: Indicator Blocking", "version": "v17" },
79
+ "T1565": { "name": "Data Manipulation", "version": "v17" },
80
+ "T1566": { "name": "Phishing", "version": "v17" },
81
+ "T1566.001": { "name": "Phishing: Spearphishing Attachment", "version": "v17" },
82
+ "T1566.002": { "name": "Phishing: Spearphishing Link", "version": "v17" },
83
+ "T1566.003": { "name": "Phishing: Spearphishing via Service", "version": "v17" },
84
+ "T1567": { "name": "Exfiltration Over Web Service", "version": "v17" },
85
+ "T1568": { "name": "Dynamic Resolution", "version": "v17" },
86
+ "T1570": { "name": "Lateral Tool Transfer", "version": "v17" },
87
+ "T1573": { "name": "Encrypted Channel", "version": "v17" },
88
+ "T1574": { "name": "Hijack Execution Flow", "version": "v17" },
89
+ "T1574.005": { "name": "Hijack Execution Flow: Executable Installer File Permissions Weakness", "version": "v17" },
90
+ "T1595": { "name": "Active Scanning", "version": "v17" },
91
+ "T1600": { "name": "Weaken Encryption", "version": "v17" },
92
+ "T1606.001": { "name": "Forge Web Credentials: Web Cookies", "version": "v17" },
93
+ "T1610": { "name": "Deploy Container", "version": "v17" },
94
+ "T1611": { "name": "Escape to Host", "version": "v17" },
95
+ "T1613": { "name": "Container and Resource Discovery", "version": "v17" }
96
+ }
@@ -708,11 +708,11 @@
708
708
  "Set npm registry cooldown: .npmrc `before=72h` (npm 11+) or `minimumReleaseAge=4320` to refuse any fresh-publish under 72 hours"
709
709
  ],
710
710
  "framework_control_gaps": {
711
- "SLSA-L3": "FIRST documented npm package shipping valid SLSA provenance while being malicious — provenance only proves WHICH pipeline built the artifact, not that the pipeline BEHAVED AS INTENDED. SLSA L3 build integrity is necessary but insufficient against cache-poisoning attacks within the build.",
711
+ "SLSA-v1.0-Build-L3": "FIRST documented npm package shipping valid SLSA provenance while being malicious — provenance only proves WHICH pipeline built the artifact, not that the pipeline BEHAVED AS INTENDED. SLSA L3 build integrity is necessary but insufficient against cache-poisoning attacks within the build.",
712
712
  "NIST-800-53-SA-12": "Supply chain protection treats provenance + signing as the trust anchor. CVE-2026-45321 demonstrates both can be intact on a malicious package.",
713
713
  "NIST-800-218-SSDF": "PS.3 + PO.3 don't address cache poisoning between sibling workflows in the same repo. SSDF presumes per-workflow trust isolation that GitHub Actions' shared actions/cache breaks.",
714
714
  "EU-CRA-Art13": "Required vulnerability handling doesn't cover the case where the upstream maintainer is unwitting — the maintainer was a victim, not a participant.",
715
- "NIS2-Art21-2d": "Supply chain risk management presumes detectable signal at consumption. Valid provenance neutralizes the standard consumer-side check.",
715
+ "NIS2-Art21-patch-management": "Supply chain risk management presumes detectable signal at consumption. Valid provenance neutralizes the standard consumer-side check.",
716
716
  "DORA-Art28": "ICT third-party risk doesn't cover transitive cache poisoning in upstream CI/CD."
717
717
  },
718
718
  "atlas_refs": [
@@ -875,11 +875,11 @@
875
875
  "GHCR :latest re-points to clean image; rebuild any image FROM elementary-data:0.23.3"
876
876
  ],
877
877
  "framework_control_gaps": {
878
- "SLSA-L3": "Same shape as CVE-2026-45321 — provenance valid, payload malicious. The publishing pipeline ran on a malicious orphan commit and emitted a legitimate signed release. SLSA-L3 attests WHICH pipeline built the artifact, not that the pipeline was driven by trusted inputs.",
878
+ "SLSA-v1.0-Build-L3": "Same shape as CVE-2026-45321 — provenance valid, payload malicious. The publishing pipeline ran on a malicious orphan commit and emitted a legitimate signed release. SLSA-L3 attests WHICH pipeline built the artifact, not that the pipeline was driven by trusted inputs.",
879
879
  "NIST-800-53-SA-12": "Supply chain protection treats signed release as the trust anchor. The signature was valid; the input to the signing pipeline was attacker-controlled.",
880
- "NIST-800-218-PO.4": "Define and use secure development security checks. Direct interpolation of github.event.* into run: scripts is a documented secure-development anti-pattern (GitHub Actions docs explicitly warn against it) but is not framework-enforced.",
880
+ "NIST-800-218-SSDF": "Define and use secure development security checks. Direct interpolation of github.event.* into run: scripts is a documented secure-development anti-pattern (GitHub Actions docs explicitly warn against it) but is not framework-enforced.",
881
881
  "EU-CRA-Art13": "Required vulnerability handling doesn't address the case where the maintainer was an unwitting publisher.",
882
- "NIS2-Art21-2d": "Supply chain risk management presumes detectable signal at consumption. Valid signature neutralizes consumer-side checks."
882
+ "NIS2-Art21-patch-management": "Supply chain risk management presumes detectable signal at consumption. Valid signature neutralizes consumer-side checks."
883
883
  },
884
884
  "atlas_refs": [
885
885
  "AML.T0010",
@@ -1026,8 +1026,8 @@
1026
1026
  ],
1027
1027
  "framework_control_gaps": {
1028
1028
  "NIST-800-53-SI-10": "Input validation control doesn't address argument-vs-statement distinction in SQL libraries. SI-10 is satisfied by 'we validate inputs' regardless of whether the validation runs before the SQL parameter binding.",
1029
- "OWASP-LLM01": "Prompt injection control set doesn't address the AI-PROXY backend SQL surface — LiteLLM is the substrate that gates LLM API access, not the LLM itself.",
1030
- "NIS2-Art21-2e": "Cryptographic measures control doesn't address application-layer SQL injection.",
1029
+ "OWASP-LLM-Top-10-2025-LLM01": "Prompt injection control set doesn't address the AI-PROXY backend SQL surface — LiteLLM is the substrate that gates LLM API access, not the LLM itself.",
1030
+ "NIS2-Art21-incident-handling": "Cryptographic measures control doesn't address application-layer SQL injection.",
1031
1031
  "EU-AI-Act-Art-15": "Robustness + cybersecurity requirement is undefined operationally for AI gateway infrastructure."
1032
1032
  },
1033
1033
  "atlas_refs": [
@@ -1126,8 +1126,8 @@
1126
1126
  ],
1127
1127
  "framework_control_gaps": {
1128
1128
  "NIST-800-53-SI-10": "Input validation control doesn't address the argv-vs-string boundary that argument injection exploits — many MCP servers concatenate user input into shell commands without registering this as a code-review failure.",
1129
- "OWASP-LLM01": "Prompt-injection-as-access-control gap — the attacker doesn't compromise the MCP server directly; they feed adversarial input that the AI passes through.",
1130
- "NIS2-Art21-2g": "Patch management presumes traditional CVE timelines; MCP plugin ecosystem patch awareness lags."
1129
+ "OWASP-LLM-Top-10-2025-LLM01": "Prompt-injection-as-access-control gap — the attacker doesn't compromise the MCP server directly; they feed adversarial input that the AI passes through.",
1130
+ "NIS2-Art21-patch-management": "Patch management presumes traditional CVE timelines; MCP plugin ecosystem patch awareness lags."
1131
1131
  },
1132
1132
  "atlas_refs": [
1133
1133
  "AML.T0053",
@@ -115,7 +115,7 @@
115
115
  "skills_referencing": [
116
116
  "exploit-scoring"
117
117
  ],
118
- "evidence_cves": [],
118
+ "evidence_cves": ["CVE-2026-42208"],
119
119
  "framework_controls_partially_addressing": [
120
120
  "NIST-800-53-SI-10",
121
121
  "ISO-27001-2022-A.8.28",
@@ -247,7 +247,8 @@
247
247
  ],
248
248
  "evidence_cves": [
249
249
  "CVE-2025-53773",
250
- "CVE-2026-30615"
250
+ "CVE-2026-30615",
251
+ "MAL-2026-3083"
251
252
  ],
252
253
  "framework_controls_partially_addressing": [
253
254
  "NIST-800-53-SI-10",
@@ -392,7 +393,7 @@
392
393
  "mcp-agent-trust",
393
394
  "ai-attack-surface"
394
395
  ],
395
- "evidence_cves": [],
396
+ "evidence_cves": ["MAL-2026-3083"],
396
397
  "framework_controls_partially_addressing": [
397
398
  "NIST-800-53-SI-10",
398
399
  "ISO-27001-2022-A.8.28"
@@ -1494,5 +1494,57 @@
1494
1494
  "AML.T0048"
1495
1495
  ],
1496
1496
  "attack_refs": []
1497
+ },
1498
+ "EU-CRA-Art13": {
1499
+ "framework": "EU Cyber Resilience Act (2024/2847)",
1500
+ "control_id": "Art. 13",
1501
+ "control_name": "Essential cybersecurity requirements + technical documentation",
1502
+ "designed_for": "Manufacturers placing products with digital elements on the EU market; sets the essential cybersecurity requirements (Annex I) and the technical-documentation duty",
1503
+ "misses": [
1504
+ "Vulnerability handling clauses presume the maintainer is aware of the vulnerability and able to remediate. The elementary-data PyPI worm (MAL-2026-3083) compromised the publishing pipeline — the maintainer was a victim, not a participant — and the published release carried a valid signature.",
1505
+ "'Technical documentation' obligations do not require the manufacturer to retain or publish the build-pipeline configuration that produced each release. Operators consuming a malicious release have no way to inspect the workflow that built it.",
1506
+ "Art. 14 (24-hour notification of actively-exploited vulnerabilities) clock starts from manufacturer awareness; supply-chain-victim manufacturers may not know they are exploited until consumer-side detection (StepSecurity / Snyk / OSV) surfaces the IoCs."
1507
+ ],
1508
+ "real_requirement": "Manufacturer publishes the canonical build-pipeline definition alongside each release (workflow file hash, runner attestation, scope of secrets accessed). Operators verify the published pipeline matches the pipeline that produced the release-being-installed. Notification clock starts from FIRST awareness — manufacturer's OR competent-authority's OR widely-published security researcher's.",
1509
+ "status": "open",
1510
+ "opened_date": "2026-05-13",
1511
+ "evidence_cves": [
1512
+ "MAL-2026-3083",
1513
+ "CVE-2025-53773"
1514
+ ],
1515
+ "atlas_refs": [
1516
+ "AML.T0010",
1517
+ "AML.T0055"
1518
+ ],
1519
+ "attack_refs": [
1520
+ "T1195.001",
1521
+ "T1195.002"
1522
+ ]
1523
+ },
1524
+ "NIST-800-53-SI-10": {
1525
+ "framework": "NIST SP 800-53 Rev 5",
1526
+ "control_id": "SI-10",
1527
+ "control_name": "Information Input Validation",
1528
+ "designed_for": "Validating untrusted input at system boundaries before consumption by downstream code paths",
1529
+ "misses": [
1530
+ "Treats 'input validation' as a single layer at the trust boundary. Modern injection classes (SQL, argument, command, prompt) live INSIDE the trust boundary — the input is already 'validated' as authentic but the consumer concatenates it into a syntax the original validator did not anticipate (SQL query, kubectl argv, shell command).",
1531
+ "Does not distinguish argv-array vs string-form invocation. CVE-2026-39884 (mcp-server-kubernetes argument injection) and the broader CWE-88 class are invisible to a SI-10-compliant codebase that 'validates' the user-input string for length and character class.",
1532
+ "Does not address parameterised-query vs string-concat distinction. CVE-2026-42208 (LiteLLM SQLi on CISA KEV) is the cardinal recent example — input was validated, then concatenated into SQL during error-handling, which the validator did not gate.",
1533
+ "Auditing for SI-10 typically samples function boundaries; the argument-injection / SQL-injection / prompt-injection failure modes all occur inside the boundary."
1534
+ ],
1535
+ "real_requirement": "Per-injection-class structural controls in addition to boundary validation. Parameterised queries enforced at the ORM/driver level (CWE-89). Argv-array form for spawned subprocesses (CWE-88). Tool-arg / function-call sanitisation in MCP / AI-agent surfaces (CWE-94). Lint rules flagging string-concat into SQL, exec, or AI-tool arguments. SI-10 compliance attestation augmented with a per-class checklist that names the specific structural control.",
1536
+ "status": "open",
1537
+ "opened_date": "2026-05-13",
1538
+ "evidence_cves": [
1539
+ "CVE-2026-42208",
1540
+ "CVE-2026-39884"
1541
+ ],
1542
+ "atlas_refs": [
1543
+ "AML.T0053"
1544
+ ],
1545
+ "attack_refs": [
1546
+ "T1190",
1547
+ "T1059"
1548
+ ]
1497
1549
  }
1498
1550
  }
@@ -760,10 +760,10 @@
760
760
  {
761
761
  "id": "gha-workflow-script-injection-sink",
762
762
  "type": "file_path",
763
- "value": "Within the release-workflows artifact (any file under .github/workflows/*.yml): a `run:` shell script body directly interpolates an attacker-controllable github.event field — ${{ github.event.comment.body }}, ${{ github.event.issue.body }}, ${{ github.event.issue.title }}, ${{ github.event.pull_request.body }}, ${{ github.event.pull_request.title }}, ${{ github.event.review.body }}, ${{ github.event.head_commit.message }}, ${{ github.head_ref }}, ${{ github.event.discussion.body }}, ${{ github.event.discussion.title }} — without first capturing the value into an env: variable. Grep regex (multi-line YAML aware): `run:\\s*\\|[\\s\\S]*?\\$\\{\\{\\s*github\\.(event\\.(comment|issue|pull_request|review|head_commit|discussion)\\.|head_ref)`. Corroborate via the branch-tag-protection artifact: if any workflow with this sink also triggers on `pull_request_target` / `issue_comment` / `pull_request_review_comment` AND its job has `permissions: contents: write` (or unrestricted GITHUB_TOKEN), the sink is exploitable by any GitHub user who can comment on the repo.",
763
+ "value": "Within the release-workflows artifact (any file under .github/workflows/*.yml): a `run:` shell block-scalar (`run: |`) OR single-line (`run: <command>`) — interpolates an attacker-controllable github.event field — ${{ github.event.comment.body }}, ${{ github.event.issue.body }}, ${{ github.event.issue.title }}, ${{ github.event.pull_request.body }}, ${{ github.event.pull_request.title }}, ${{ github.event.review.body }}, ${{ github.event.head_commit.message }}, ${{ github.head_ref }}, ${{ github.event.discussion.body }}, ${{ github.event.discussion.title }} — without first capturing the value into an env: variable. Grep regex (multi-line YAML aware, matches both block-scalar and single-line run: shapes): `run:[\\s\\S]*?\\$\\{\\{\\s*github\\.(event\\.(comment|issue|pull_request|review|head_commit|discussion)\\.|head_ref)`. Corroborate via the branch-tag-protection artifact: if any workflow with this sink also triggers on `pull_request_target` / `issue_comment` / `pull_request_review_comment` AND its job has `permissions: contents: write` (or unrestricted GITHUB_TOKEN), the sink is exploitable by any GitHub user who can comment on the repo.",
764
764
  "description": "GitHub Actions script-injection sink. Elementary-data 0.23.3 (April 2026) was forged via this exact pattern — `${{ github.event.comment.body }}` interpolated into a `run:` block in update_pylon_issue.yml, escalated via the workflow's GITHUB_TOKEN to publish a malicious release. Without this indicator, a publisher account compromise via attacker-controlled comments looks identical to a clean release at the consumer side.",
765
- "confidence": "deterministic",
766
- "deterministic": true,
765
+ "confidence": "high",
766
+ "deterministic": false,
767
767
  "false_positive_checks_required": [
768
768
  "If the run: block reads the github.event field via an `env:` variable first (env: COMMENT_BODY: ${{ github.event.comment.body }}) and then references $COMMENT_BODY in the shell — that is the documented-safe pattern; demote to miss.",
769
769
  "If the workflow only runs in a sandboxed `pull_request` event (not `pull_request_target`) AND has default `permissions: contents: read` AND does not use secrets.* — the sink is not exploitable; demote to miss."