@blamejs/exceptd-skills 0.12.32 → 0.12.33
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 +29 -0
- package/data/_indexes/_meta.json +10 -10
- package/data/_indexes/activity-feed.json +3 -3
- package/data/_indexes/catalog-summaries.json +3 -3
- package/data/_indexes/chains.json +16 -0
- package/data/_indexes/frequency.json +1 -0
- package/data/_indexes/section-offsets.json +9 -9
- package/data/_indexes/token-budget.json +20 -20
- package/data/cve-catalog.json +129 -1
- package/data/cwe-catalog.json +8 -3
- package/data/d3fend-catalog.json +46 -0
- package/data/playbooks/cloud-iam-incident.json +0 -6
- package/data/playbooks/idp-incident.json +1 -7
- package/data/zeroday-lessons.json +108 -0
- package/manifest-snapshot.json +1 -1
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +47 -47
- package/package.json +1 -1
- package/sbom.cdx.json +21 -21
- package/skills/cloud-iam-incident/skill.md +1 -1
- package/skills/idp-incident-response/skill.md +1 -1
- package/skills/ransomware-response/skill.md +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.12.33 — 2026-05-15
|
|
4
|
+
|
|
5
|
+
Same-day CVE intake (node-ipc supply-chain compromise) + cycle 13 audit fixes. Closes the long-standing `cred-stores` skill-vs-playbook semantic confusion that's surfaced in every audit since cycle 9.
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
**`MAL-2026-NODE-IPC-STEALER` — npm node-ipc supply-chain compromise (2026-05-14).** Three malicious versions (`9.1.6`, `9.2.3`, `12.0.1`) published by `atiertant`. Novel attack class: not credential theft, not typosquat, not lifecycle-hook worm — the attacker re-registered the maintainer's expired email domain (`atlantis-software.net`, expired and grabbed via Namecheap PrivateEmail on 2026-05-07) and abused npm's email-based password-reset flow to gain publish rights. 80 KB obfuscated IIFE in `node-ipc.cjs` fires on every `require()` (no hooks needed) and exfiltrates AWS / GCP / Azure / SSH / Kubernetes / Vault / Claude AI / Kiro IDE credentials via DNS TXT queries to an Azure-lookalike spoofed domain. 3.35M monthly downloads. Carries `kev_scope_note` per the cycle 11 ecosystem-package CISA-KEV-scope precedent. RWEP 43.
|
|
10
|
+
|
|
11
|
+
**Three new control requirements in `zeroday-lessons`** capture the structural lesson: **NEW-CTRL-047 PACKAGE-MAINTAINER-DOMAIN-EXPIRY-MONITORING** (continuous WHOIS expiry monitoring on every critical-path maintainer email domain + dual-factor account recovery); **NEW-CTRL-048 NPM-MAINTAINER-MFA-ENFORCEMENT** (registry-side mandatory MFA on publish-enabled accounts); **NEW-CTRL-049 LOCKFILE-INTEGRITY-VERIFIED-AT-CI-BOOT** (`npm ci` / `--frozen-lockfile` / `--immutable` catches the swap even after a successful publish — `--ignore-scripts` does NOT mitigate because the payload ships in the main module, not a postinstall hook).
|
|
12
|
+
|
|
13
|
+
**`D3-EFA` (Executable File Analysis) added to D3FEND catalog.** `sector-telecom` skill cited it but the entry didn't exist — cycle 13 finding. Distinct from `D3-EAL` (Executable Allowlisting): EAL blocks at execute-time; EFA inspects bytes at file-write / image-pull / artifact-fetch time and gates the allowlist decision itself.
|
|
14
|
+
|
|
15
|
+
**CLI envelope-shape contract tests.** `tests/cli-output-envelope-shape.test.js` pins the EXACT top-level key set on `attest list --json`, `attest verify --json` (error path), and `version`. A contributor adding a new top-level field to these verbs now gets a forcing-function test failure that requires updating the contract. Expanded coverage to `run` / `ci` / `discover` / `brief` / `doctor` / `watchlist` deferred to future cycles as their shapes stabilize.
|
|
16
|
+
|
|
17
|
+
### Bugs
|
|
18
|
+
|
|
19
|
+
**`cred-stores` skill-vs-playbook semantic finally cleaned up.** Cycles 9, 12, and 13 all flagged that the 3 IR playbooks and 3 IR skills referenced `cred-stores` in `skill_preload` / `skill_chain` / Hand-Off sections as if it were a skill — but it's actually a playbook. Operators (and any tooling resolving these refs against `manifest.json.skills`) failed. Fixes: removed `cred-stores` from `data/playbooks/{idp-incident,cloud-iam-incident}.json` `skill_preload` + `skill_chain` (hand-off is via `_meta.feeds_into`, which was already present); annotated `cred-stores` / `framework` references in `skills/{idp-incident-response,cloud-iam-incident,ransomware-response}/skill.md` Hand-Off sections as *(playbook chain, not a skill)* with the explicit note that hand-off is via the playbook chain, not a skill load. Predeploy playbook validator now warning-free (was 6 warnings every release).
|
|
20
|
+
|
|
21
|
+
### Internal
|
|
22
|
+
|
|
23
|
+
- CVE catalog 36 → 37 entries; zeroday-lessons 21 → 22 entries.
|
|
24
|
+
- AI-discovery rate stays at 16.2% (one more vendor/ecosystem-discovered entry dilutes the observed rate; floor remains 0.15).
|
|
25
|
+
- D3FEND catalog 28 → 29 entries.
|
|
26
|
+
- `tests/v0_12_33-node-ipc-coverage.test.js` pins MAL-2026-NODE-IPC-STEALER entry shape (iocs object with ≥1 category, kev_scope_note presence, NEW-CTRL-047 in lessons).
|
|
27
|
+
- Reverse-ref regen: 3 CWE entries updated with the new MAL-* CVE evidence; 1 D3FEND skill_referencing prune (sector-telecom now correctly anchored against D3-EFA).
|
|
28
|
+
- Test count 1109 → 1119.
|
|
29
|
+
- 14/14 predeploy gates green.
|
|
30
|
+
|
|
31
|
+
|
|
3
32
|
## 0.12.32 — 2026-05-15
|
|
4
33
|
|
|
5
34
|
Cycle 11 CLI polish + cycle 12 catalog hardening. The headline closes a silent regression where the 6 CVEs advertised by v0.12.31 were shipped as `_draft: true` and therefore invisible to default `cross-ref-api` queries — operators running `exceptd` against Exchange would have gotten a clean bill on CVE-2026-42897.
|
package/data/_indexes/_meta.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.1.0",
|
|
3
|
-
"generated_at": "2026-05-16T04:
|
|
3
|
+
"generated_at": "2026-05-16T04:40:25.150Z",
|
|
4
4
|
"generator": "scripts/build-indexes.js",
|
|
5
5
|
"source_count": 54,
|
|
6
6
|
"source_hashes": {
|
|
7
|
-
"manifest.json": "
|
|
7
|
+
"manifest.json": "e7956bcec2b7aee7f469013be4aff46698c0cb269786775ad54a5096fd348920",
|
|
8
8
|
"data/atlas-ttps.json": "259e76e4252c7a56c17bbe96982a5e37ac89131c2d37a547fe38d64dcacfd763",
|
|
9
9
|
"data/attack-techniques.json": "51f60819aef36e960fd768e44dcc725e137781534fbbb028e5ef6baa21defa1d",
|
|
10
|
-
"data/cve-catalog.json": "
|
|
11
|
-
"data/cwe-catalog.json": "
|
|
12
|
-
"data/d3fend-catalog.json": "
|
|
10
|
+
"data/cve-catalog.json": "55aa571423fd254e6581b22a189a1c0eeb76d467b0ef645d1dfa39f74b28c569",
|
|
11
|
+
"data/cwe-catalog.json": "6e7349a0fac39bdf9c4cb4598e101e51400f67d64c5d653bbca462f28bc1a0cb",
|
|
12
|
+
"data/d3fend-catalog.json": "a1fc2827ceb344669e148d55197dbf1b0e5b20bcc618e90517639c17d67ee82d",
|
|
13
13
|
"data/dlp-controls.json": "d2406c482dddd30e49203879999dc4b3a7fd4d0494d6a61d86b91ee76415df19",
|
|
14
14
|
"data/exploit-availability.json": "a9eeda95d24b56c28a0d0178fc601b531653e2ba7dc857160b35ad23ad6c7471",
|
|
15
15
|
"data/framework-control-gaps.json": "f88c5757553e3626981546ad1772189c6d40f9ddc24f730def949414cbab9cd0",
|
|
16
16
|
"data/global-frameworks.json": "0168825497e03f079274c9da2e5529310a2ba5bd7c7da7c93acd0b66ed845b8a",
|
|
17
17
|
"data/rfc-references.json": "e253a548c8a829d178d5aea601e268724b85c936ccbfa51c2e5d80c5f8efe2b0",
|
|
18
|
-
"data/zeroday-lessons.json": "
|
|
18
|
+
"data/zeroday-lessons.json": "c927653e6d9d86d1a36c23a3d782b099a49675ccd928cdc204887c79b0cfbbf1",
|
|
19
19
|
"skills/kernel-lpe-triage/skill.md": "8e94bfd38d6db47342fbbe95a0c8df8f7c38743982c13e9de6a1c59cd3783d33",
|
|
20
20
|
"skills/ai-attack-surface/skill.md": "13e543fc92b9b27cdb647dce96a9eeb44919e0fa92ec41e8265a9981a23e7b79",
|
|
21
21
|
"skills/mcp-agent-trust/skill.md": "3cec1dce668deec44cb7330e165e89cee8379dd90833519004d566baf72c038c",
|
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
"skills/container-runtime-security/skill.md": "f06260f0c468d6a4f0409294899017edab45c98d71db1fedd7a630fe6a7bf53a",
|
|
54
54
|
"skills/mlops-security/skill.md": "e6a296fc67724aa3b026c0039f44867b44cf0926eade4fe616bfd0a4c77310bf",
|
|
55
55
|
"skills/incident-response-playbook/skill.md": "8ef7ce1246dc1329b6df3cc9de8d79d35e2c02c703dcef20f35b312b1c24fd52",
|
|
56
|
-
"skills/ransomware-response/skill.md": "
|
|
56
|
+
"skills/ransomware-response/skill.md": "603126d81f6c3619f0b2f6d81ea1d6b64f9c8c1296f877ad2e6d802ddab09165",
|
|
57
57
|
"skills/email-security-anti-phishing/skill.md": "b5a7693b3ddbd6cd83303d092bc5e324db431245d25c4945d9f65fcffa1995e7",
|
|
58
58
|
"skills/age-gates-child-safety/skill.md": "c741d7dca9da0abb09bdebb8a02e803ce4ae9fb9a6904fb8df3ec19cae83917d",
|
|
59
|
-
"skills/cloud-iam-incident/skill.md": "
|
|
60
|
-
"skills/idp-incident-response/skill.md": "
|
|
59
|
+
"skills/cloud-iam-incident/skill.md": "10e2af2cf8292f457cd3877bcee37f6ee30c80037a3ef5b367fba25195c7a791",
|
|
60
|
+
"skills/idp-incident-response/skill.md": "3d75d7a0fc5b9a3c584ac5c6510f8b6bd63b7b780488541eb193250ae795b4e2"
|
|
61
61
|
},
|
|
62
62
|
"skill_count": 42,
|
|
63
63
|
"catalog_count": 11,
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"handoff_dag_nodes": 42,
|
|
79
79
|
"summary_cards": 42,
|
|
80
80
|
"section_offsets_skills": 42,
|
|
81
|
-
"token_budget_total_approx":
|
|
81
|
+
"token_budget_total_approx": 397485,
|
|
82
82
|
"recipes": 8,
|
|
83
83
|
"jurisdiction_clocks": 29,
|
|
84
84
|
"did_ladders": 8,
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"artifact": "data/zeroday-lessons.json",
|
|
88
88
|
"path": "data/zeroday-lessons.json",
|
|
89
89
|
"schema_version": "1.1.0",
|
|
90
|
-
"entry_count":
|
|
90
|
+
"entry_count": 22
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"date": "2026-05-15",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"artifact": "data/cve-catalog.json",
|
|
103
103
|
"path": "data/cve-catalog.json",
|
|
104
104
|
"schema_version": "1.0.0",
|
|
105
|
-
"entry_count":
|
|
105
|
+
"entry_count": 37
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
108
|
"date": "2026-05-13",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"artifact": "data/d3fend-catalog.json",
|
|
119
119
|
"path": "data/d3fend-catalog.json",
|
|
120
120
|
"schema_version": "1.0.0",
|
|
121
|
-
"entry_count":
|
|
121
|
+
"entry_count": 29
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
124
|
"date": "2026-05-11",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"rebuild_after_days": 365,
|
|
63
63
|
"note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
|
|
64
64
|
},
|
|
65
|
-
"entry_count":
|
|
65
|
+
"entry_count": 37,
|
|
66
66
|
"sample_keys": [
|
|
67
67
|
"CVE-2025-53773",
|
|
68
68
|
"CVE-2026-30615",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"rebuild_after_days": 365,
|
|
107
107
|
"note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
|
|
108
108
|
},
|
|
109
|
-
"entry_count":
|
|
109
|
+
"entry_count": 29,
|
|
110
110
|
"sample_keys": [
|
|
111
111
|
"D3-EAL",
|
|
112
112
|
"D3-EHB",
|
|
@@ -238,7 +238,7 @@
|
|
|
238
238
|
"rebuild_after_days": 365,
|
|
239
239
|
"note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
|
|
240
240
|
},
|
|
241
|
-
"entry_count":
|
|
241
|
+
"entry_count": 22,
|
|
242
242
|
"sample_keys": [
|
|
243
243
|
"CVE-2026-31431",
|
|
244
244
|
"CVE-2025-53773",
|
|
@@ -3041,6 +3041,22 @@
|
|
|
3041
3041
|
]
|
|
3042
3042
|
}
|
|
3043
3043
|
},
|
|
3044
|
+
"MAL-2026-NODE-IPC-STEALER": {
|
|
3045
|
+
"name": "node-ipc credential-stealer (expired-domain account-recovery compromise)",
|
|
3046
|
+
"rwep": 43,
|
|
3047
|
+
"cvss": 9.8,
|
|
3048
|
+
"cisa_kev": false,
|
|
3049
|
+
"epss_score": null,
|
|
3050
|
+
"referencing_skills": [],
|
|
3051
|
+
"chain": {
|
|
3052
|
+
"cwes": [],
|
|
3053
|
+
"atlas": [],
|
|
3054
|
+
"d3fend": [],
|
|
3055
|
+
"framework_gaps": [],
|
|
3056
|
+
"attack_refs": [],
|
|
3057
|
+
"rfc_refs": []
|
|
3058
|
+
}
|
|
3059
|
+
},
|
|
3044
3060
|
"CWE-20": {
|
|
3045
3061
|
"name": "Improper Input Validation",
|
|
3046
3062
|
"category": "Validation",
|
|
@@ -3731,7 +3731,7 @@
|
|
|
3731
3731
|
},
|
|
3732
3732
|
"ransomware-response": {
|
|
3733
3733
|
"path": "skills/ransomware-response/skill.md",
|
|
3734
|
-
"total_bytes":
|
|
3734
|
+
"total_bytes": 48543,
|
|
3735
3735
|
"total_lines": 375,
|
|
3736
3736
|
"frontmatter": {
|
|
3737
3737
|
"line_start": 1,
|
|
@@ -3817,8 +3817,8 @@
|
|
|
3817
3817
|
"normalized_name": "hand-off",
|
|
3818
3818
|
"line": 360,
|
|
3819
3819
|
"byte_start": 44725,
|
|
3820
|
-
"byte_end":
|
|
3821
|
-
"bytes":
|
|
3820
|
+
"byte_end": 48543,
|
|
3821
|
+
"bytes": 3818,
|
|
3822
3822
|
"h3_count": 0
|
|
3823
3823
|
}
|
|
3824
3824
|
]
|
|
@@ -4013,7 +4013,7 @@
|
|
|
4013
4013
|
},
|
|
4014
4014
|
"cloud-iam-incident": {
|
|
4015
4015
|
"path": "skills/cloud-iam-incident/skill.md",
|
|
4016
|
-
"total_bytes":
|
|
4016
|
+
"total_bytes": 44569,
|
|
4017
4017
|
"total_lines": 420,
|
|
4018
4018
|
"frontmatter": {
|
|
4019
4019
|
"line_start": 1,
|
|
@@ -4099,15 +4099,15 @@
|
|
|
4099
4099
|
"normalized_name": "hand-off",
|
|
4100
4100
|
"line": 400,
|
|
4101
4101
|
"byte_start": 41396,
|
|
4102
|
-
"byte_end":
|
|
4103
|
-
"bytes":
|
|
4102
|
+
"byte_end": 44569,
|
|
4103
|
+
"bytes": 3173,
|
|
4104
4104
|
"h3_count": 0
|
|
4105
4105
|
}
|
|
4106
4106
|
]
|
|
4107
4107
|
},
|
|
4108
4108
|
"idp-incident-response": {
|
|
4109
4109
|
"path": "skills/idp-incident-response/skill.md",
|
|
4110
|
-
"total_bytes":
|
|
4110
|
+
"total_bytes": 46352,
|
|
4111
4111
|
"total_lines": 353,
|
|
4112
4112
|
"frontmatter": {
|
|
4113
4113
|
"line_start": 1,
|
|
@@ -4193,8 +4193,8 @@
|
|
|
4193
4193
|
"normalized_name": "hand-off",
|
|
4194
4194
|
"line": 335,
|
|
4195
4195
|
"byte_start": 42384,
|
|
4196
|
-
"byte_end":
|
|
4197
|
-
"bytes":
|
|
4196
|
+
"byte_end": 46352,
|
|
4197
|
+
"bytes": 3968,
|
|
4198
4198
|
"h3_count": 0
|
|
4199
4199
|
}
|
|
4200
4200
|
]
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"schema_version": "1.0.0",
|
|
4
4
|
"tokenizer_note": "Character-density approximation: 1 token ≈ 4 chars. This is the canonical rule-of-thumb for OpenAI tokenizers on English+technical text. Claude's tokenizer is typically more efficient on prose; treat this as an upper-bound budget for both. Consumers with stricter precision needs should re-tokenize with their own tokenizer.",
|
|
5
5
|
"approx_chars_per_token": 4,
|
|
6
|
-
"total_chars":
|
|
7
|
-
"total_approx_tokens":
|
|
6
|
+
"total_chars": 1589917,
|
|
7
|
+
"total_approx_tokens": 397485,
|
|
8
8
|
"skill_count": 42
|
|
9
9
|
},
|
|
10
10
|
"skills": {
|
|
@@ -2175,10 +2175,10 @@
|
|
|
2175
2175
|
},
|
|
2176
2176
|
"ransomware-response": {
|
|
2177
2177
|
"path": "skills/ransomware-response/skill.md",
|
|
2178
|
-
"bytes":
|
|
2179
|
-
"chars":
|
|
2178
|
+
"bytes": 48543,
|
|
2179
|
+
"chars": 48363,
|
|
2180
2180
|
"lines": 375,
|
|
2181
|
-
"approx_tokens":
|
|
2181
|
+
"approx_tokens": 12091,
|
|
2182
2182
|
"approx_chars_per_token": 4,
|
|
2183
2183
|
"sections": {
|
|
2184
2184
|
"threat-context": {
|
|
@@ -2222,9 +2222,9 @@
|
|
|
2222
2222
|
"approx_tokens": 945
|
|
2223
2223
|
},
|
|
2224
2224
|
"hand-off": {
|
|
2225
|
-
"bytes":
|
|
2226
|
-
"chars":
|
|
2227
|
-
"approx_tokens":
|
|
2225
|
+
"bytes": 3818,
|
|
2226
|
+
"chars": 3790,
|
|
2227
|
+
"approx_tokens": 948
|
|
2228
2228
|
}
|
|
2229
2229
|
}
|
|
2230
2230
|
},
|
|
@@ -2340,10 +2340,10 @@
|
|
|
2340
2340
|
},
|
|
2341
2341
|
"cloud-iam-incident": {
|
|
2342
2342
|
"path": "skills/cloud-iam-incident/skill.md",
|
|
2343
|
-
"bytes":
|
|
2344
|
-
"chars":
|
|
2343
|
+
"bytes": 44569,
|
|
2344
|
+
"chars": 44411,
|
|
2345
2345
|
"lines": 420,
|
|
2346
|
-
"approx_tokens":
|
|
2346
|
+
"approx_tokens": 11103,
|
|
2347
2347
|
"approx_chars_per_token": 4,
|
|
2348
2348
|
"sections": {
|
|
2349
2349
|
"threat-context": {
|
|
@@ -2387,18 +2387,18 @@
|
|
|
2387
2387
|
"approx_tokens": 1017
|
|
2388
2388
|
},
|
|
2389
2389
|
"hand-off": {
|
|
2390
|
-
"bytes":
|
|
2391
|
-
"chars":
|
|
2392
|
-
"approx_tokens":
|
|
2390
|
+
"bytes": 3173,
|
|
2391
|
+
"chars": 3145,
|
|
2392
|
+
"approx_tokens": 786
|
|
2393
2393
|
}
|
|
2394
2394
|
}
|
|
2395
2395
|
},
|
|
2396
2396
|
"idp-incident-response": {
|
|
2397
2397
|
"path": "skills/idp-incident-response/skill.md",
|
|
2398
|
-
"bytes":
|
|
2399
|
-
"chars":
|
|
2398
|
+
"bytes": 46352,
|
|
2399
|
+
"chars": 46222,
|
|
2400
2400
|
"lines": 353,
|
|
2401
|
-
"approx_tokens":
|
|
2401
|
+
"approx_tokens": 11556,
|
|
2402
2402
|
"approx_chars_per_token": 4,
|
|
2403
2403
|
"sections": {
|
|
2404
2404
|
"threat-context": {
|
|
@@ -2442,9 +2442,9 @@
|
|
|
2442
2442
|
"approx_tokens": 1130
|
|
2443
2443
|
},
|
|
2444
2444
|
"hand-off": {
|
|
2445
|
-
"bytes":
|
|
2446
|
-
"chars":
|
|
2447
|
-
"approx_tokens":
|
|
2445
|
+
"bytes": 3968,
|
|
2446
|
+
"chars": 3944,
|
|
2447
|
+
"approx_tokens": 986
|
|
2448
2448
|
}
|
|
2449
2449
|
}
|
|
2450
2450
|
}
|
package/data/cve-catalog.json
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"ai_discovery_methodology": {
|
|
40
40
|
"field_added": "2026-05-15",
|
|
41
41
|
"agents_md_target": "Hard Rule #7 — '41% of 2025 zero-days were AI-discovered'. Catalog target rate floor: 0.40.",
|
|
42
|
-
"current_rate": 0.
|
|
42
|
+
"current_rate": 0.162,
|
|
43
43
|
"current_floor_enforced_by_test": 0.15,
|
|
44
44
|
"ladder_to_target": [
|
|
45
45
|
0.15,
|
|
@@ -3441,5 +3441,133 @@
|
|
|
3441
3441
|
"discovery_attribution_note": "Picus Security ('BlueHammer' / RedSun research) published a working PoC before Microsoft released the patch — true zero-day disclosure 2026-04-22; CISA KEV listed same day with a 14-day due date. No AI-tool credit on the discovery; conventional Windows-Defender internals research. Source: https://www.picussecurity.com/resource/blog/bluehammer-redsun-windows-defender-cve-2026-33825-zero-day-vulnerability-explained and https://www.cisa.gov/known-exploited-vulnerabilities-catalog.",
|
|
3442
3442
|
"_editorial_promoted": "2026-05-15",
|
|
3443
3443
|
"_editorial_note": "Promoted from draft v0.12.32 (cycle 12 F1 fix): cycle 11 audit confirmed all required fields populated (iocs, vendor_advisories, verification_sources, complexity, affected_versions); RWEP factors satisfy Shape B invariant; discovery_attribution_note cites a researcher / team with URL. Editorial gate: passed."
|
|
3444
|
+
},
|
|
3445
|
+
"MAL-2026-NODE-IPC-STEALER": {
|
|
3446
|
+
"name": "node-ipc credential-stealer (expired-domain account-recovery compromise)",
|
|
3447
|
+
"type": "supply-chain-credential-stealer",
|
|
3448
|
+
"cvss_score": 9.8,
|
|
3449
|
+
"cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H",
|
|
3450
|
+
"cvss_correction_note": "No NVD CVE assigned as of 2026-05-15; CVSS synthesized per OSSF Malicious-Packages convention: unauthenticated code execution on `require('node-ipc')` against a 3.35M-monthly-download package with confirmed credential exfiltration. AV:N because the malicious payload reaches the victim over the npm registry network channel; UI:R because a developer / CI must invoke `npm install`; S:C because exfiltrated AWS / GCP / Azure / SSH / kubeconfig / Vault material extends the blast radius beyond the consuming process.",
|
|
3451
|
+
"cisa_kev": false,
|
|
3452
|
+
"cisa_kev_date": null,
|
|
3453
|
+
"kev_scope_note": "CISA KEV historically excludes ecosystem-package compromises (npm / PyPI / RubyGems malicious-package events) — its scope is federally-deployable products with assigned CVE identifiers. The node-ipc 2026-05-14 publish event is OSSF-MAL-catalogued (MAL-2026-NODE-IPC-STEALER) without a NVD CVE as of 2026-05-15; `cisa_kev: false` is correct, and `active_exploitation: confirmed` reflects the live malicious payload in the registry. Operators should consume CISA-KEV-equivalent guidance from the OpenSSF MAL feed + ecosystem-specific advisories (Socket, StepSecurity, Semgrep, Datadog Security Labs, Snyk) for this class.",
|
|
3454
|
+
"poc_available": true,
|
|
3455
|
+
"poc_description": "Live payload — three malicious versions (node-ipc 9.1.6, 9.2.3, 12.0.1) were published to the public npm registry by attacker-controlled account `atiertant` on 2026-05-14 and remained installable for the exposure window before npm yank. The malicious build IS the PoC.",
|
|
3456
|
+
"ai_discovered": false,
|
|
3457
|
+
"ai_discovery_source": "vendor_research",
|
|
3458
|
+
"ai_discovery_notes": "No AI-tool credited for discovery. Concurrent ecosystem telemetry detection by Socket, StepSecurity, Semgrep, and Datadog Security Labs within hours of publication; The Hacker News surfaced the consolidated report. ai_discovery_source set to `vendor_research` because the enum does not include an `ecosystem_detection` value; the attribution note records the actual provenance.",
|
|
3459
|
+
"ai_assisted_weaponization": false,
|
|
3460
|
+
"ai_assisted_notes": "No AI-tooling credit on the payload-development side. The 80 KB obfuscated IIFE follows a conventional minifier-plus-string-encoding pattern; no AI-generated code fingerprint reported by the responding firms.",
|
|
3461
|
+
"active_exploitation": "confirmed",
|
|
3462
|
+
"active_exploitation_notes": "The three malicious versions executed credential harvesting on every `require('node-ipc')` against installed hosts during the exposure window. Datadog Security Labs and Socket each observed real consumer-side installs of the malicious versions before yank.",
|
|
3463
|
+
"affected": "node-ipc package on npm — versions 9.1.6, 9.2.3, 12.0.1 published 2026-05-14 by publisher `atiertant` (contact `a.tiertant@atlantis-software.net`). Package carries approximately 3.35M monthly downloads per npm registry telemetry; secondary reports cite 822K weekly (Socket) and 10M weekly (The Hacker News) — see source-data ambiguity note in verification_sources. Architectural impact reaches every transitive consumer that resolves any of the three malicious versions during the exposure window.",
|
|
3464
|
+
"affected_versions": [
|
|
3465
|
+
"node-ipc == 9.1.6 (malicious, published 2026-05-14)",
|
|
3466
|
+
"node-ipc == 9.2.3 (malicious, published 2026-05-14)",
|
|
3467
|
+
"node-ipc == 12.0.1 (malicious, published 2026-05-14)"
|
|
3468
|
+
],
|
|
3469
|
+
"vector": "Novel supply-chain account-recovery abuse via expired maintainer email domain. (1) `atlantis-software.net` — the email domain associated with the legitimate node-ipc maintainer account — lapsed and was re-registered by the attacker on 2026-05-07 via Namecheap PrivateEmail. (2) Attacker invoked the npm password-reset flow, which delivered the reset link to the now-attacker-controlled mailbox. (3) Attacker published three malicious versions (9.1.6, 9.2.3, 12.0.1) with an 80 KB obfuscated IIFE appended to `node-ipc.cjs` that fires on every `require('node-ipc')` — no lifecycle / postinstall hook required, so consumer-side `--ignore-scripts` does NOT mitigate. (4) Payload exfiltrates AWS credentials, GCP service-account keys, Azure tokens, SSH private keys, Kubernetes kubeconfig, HashiCorp Vault tokens, Claude AI configs, and Kiro IDE configs via DNS TXT queries to an Azure-lookalike spoofed domain controlled by the attacker. Class: registry-side account-recovery abuse mediated by DNS lifecycle, NOT credential-dump or token-theft.",
|
|
3470
|
+
"complexity": "low",
|
|
3471
|
+
"complexity_notes": "Consumer-side exploitation is automatic on any process that calls `require('node-ipc')` from a malicious version. No race condition, no user interaction beyond `npm install` resolving to a malicious version. The novel attack precondition (expired-domain re-registration + npm password reset) is itself low-complexity for any attacker who monitors maintainer-email-domain expirations.",
|
|
3472
|
+
"patch_available": true,
|
|
3473
|
+
"patch_required_reboot": false,
|
|
3474
|
+
"live_patch_available": true,
|
|
3475
|
+
"live_patch_tools": [
|
|
3476
|
+
"npm audit (yank-aware after npm registry-side removal of the malicious versions)",
|
|
3477
|
+
"Socket (registry-side install-time blocking)",
|
|
3478
|
+
"StepSecurity Harden-Runner (CI-side egress + install-time blocking)",
|
|
3479
|
+
"Snyk (advisory-driven CI policy block)",
|
|
3480
|
+
"Datadog Security Labs CI integrations (telemetry-driven block)",
|
|
3481
|
+
"Semgrep Supply Chain (lockfile audit against the malicious version set)"
|
|
3482
|
+
],
|
|
3483
|
+
"vendor_update_paths": [
|
|
3484
|
+
"npm yanked the three malicious versions 2026-05-14",
|
|
3485
|
+
"Pin to node-ipc <= 9.1.5 OR >= the post-yank clean republication (consult package security tab on npm for the current clean version range)",
|
|
3486
|
+
"Lockfile audit: scan package-lock.json / yarn.lock / pnpm-lock.yaml for resolved tarball SHAs matching the three malicious version IDs; rotate any credentials reachable from a host that resolved them during the exposure window"
|
|
3487
|
+
],
|
|
3488
|
+
"framework_control_gaps": {
|
|
3489
|
+
"NIST-800-218-SSDF": "Reused-OSS-component control assumes maintainer-account integrity; does not address maintainer-email-domain expiry as a supply-chain risk class.",
|
|
3490
|
+
"EU-CRA-Art13": "SBOM requirement does not address freshness-of-published-version OR maintainer-account-recovery integrity — pinning to a malicious version is SBOM-compliant.",
|
|
3491
|
+
"NIS2-Art21-supply-chain": "Generic supply chain controls without npm-ecosystem-specific guidance (postinstall vs main-module payload distinction, maintainer-domain-expiry monitoring, registry-account MFA enforcement).",
|
|
3492
|
+
"NIST-800-53-IA-5-Federated": "Authenticator-management control covers operator-side credentials but does not extend to upstream-maintainer-account recovery flow on third-party package registries.",
|
|
3493
|
+
"SLSA-v1.0-Build-L3": "Source / build provenance attestations do not address account-takeover-via-domain-expiry — provenance asserts who built, not whether `who` is still the legitimate maintainer."
|
|
3494
|
+
},
|
|
3495
|
+
"atlas_refs": [
|
|
3496
|
+
"AML.T0010",
|
|
3497
|
+
"AML.T0020"
|
|
3498
|
+
],
|
|
3499
|
+
"attack_refs": [
|
|
3500
|
+
"T1195.001",
|
|
3501
|
+
"T1195.002",
|
|
3502
|
+
"T1078",
|
|
3503
|
+
"T1552.001",
|
|
3504
|
+
"T1059.007"
|
|
3505
|
+
],
|
|
3506
|
+
"rwep_score": 43,
|
|
3507
|
+
"rwep_factors": {
|
|
3508
|
+
"cisa_kev": 0,
|
|
3509
|
+
"poc_available": 20,
|
|
3510
|
+
"ai_factor": 0,
|
|
3511
|
+
"active_exploitation": 20,
|
|
3512
|
+
"blast_radius": 28,
|
|
3513
|
+
"patch_available": -15,
|
|
3514
|
+
"live_patch_available": -10,
|
|
3515
|
+
"reboot_required": 0
|
|
3516
|
+
},
|
|
3517
|
+
"epss_score": null,
|
|
3518
|
+
"epss_date": "2026-05-15",
|
|
3519
|
+
"epss_note": "EPSS coverage does not extend to non-CVE OSSF-MAL identifiers as of 2026-05-15.",
|
|
3520
|
+
"cwe_refs": [
|
|
3521
|
+
"CWE-506",
|
|
3522
|
+
"CWE-829",
|
|
3523
|
+
"CWE-1357"
|
|
3524
|
+
],
|
|
3525
|
+
"source_verified": "2026-05-15",
|
|
3526
|
+
"verification_sources": [
|
|
3527
|
+
"https://thehackernews.com/2026/05/stealer-backdoor-found-in-3-node-ipc.html",
|
|
3528
|
+
"https://socket.dev/blog/node-ipc-package-compromised",
|
|
3529
|
+
"https://www.stepsecurity.io/blog/node-ipc-npm-supply-chain-attack",
|
|
3530
|
+
"https://semgrep.dev/blog/2026/not-your-ipc-but-node-ipc-npm-hit-again-with-supply-chain-attack-but-this-time-its-not-a-worm/",
|
|
3531
|
+
"https://securitylabs.datadoghq.com/articles/node-ipc-npm-malware-analysis/"
|
|
3532
|
+
],
|
|
3533
|
+
"vendor_advisories": [
|
|
3534
|
+
{
|
|
3535
|
+
"vendor": "npm (GitHub Advisory Database)",
|
|
3536
|
+
"advisory_id": null,
|
|
3537
|
+
"url": "https://github.com/advisories?query=node-ipc",
|
|
3538
|
+
"severity": "critical",
|
|
3539
|
+
"published_date": "2026-05-14"
|
|
3540
|
+
},
|
|
3541
|
+
{
|
|
3542
|
+
"vendor": "Socket",
|
|
3543
|
+
"advisory_id": null,
|
|
3544
|
+
"url": "https://socket.dev/blog/node-ipc-package-compromised",
|
|
3545
|
+
"severity": "critical",
|
|
3546
|
+
"published_date": "2026-05-14"
|
|
3547
|
+
}
|
|
3548
|
+
],
|
|
3549
|
+
"iocs": {
|
|
3550
|
+
"payload_artifacts": [
|
|
3551
|
+
"node-ipc.cjs file SHA / size diff vs the prior clean version — three malicious versions (9.1.6, 9.2.3, 12.0.1) ship an 80 KB obfuscated IIFE appended to the main module export. Lockfile-resolved tarball integrity hash for any of these three versions IS the primary artifact IoC.",
|
|
3552
|
+
"package.json publisher metadata: `_npmUser.name == 'atiertant'` OR maintainer email `a.tiertant@atlantis-software.net` on a node-ipc tarball — both are attacker-controlled and distinct from the legitimate historical publisher account."
|
|
3553
|
+
],
|
|
3554
|
+
"behavioral": [
|
|
3555
|
+
"Process executing `require('node-ipc')` issues outbound DNS TXT queries to an Azure-lookalike domain controlled by the attacker — high-entropy subdomain labels carrying base64 / hex chunks of harvested credential material. DNS-layer telemetry (Resolved, Cloudflare DNS, internal Unbound logs) captures the exfil channel even when HTTP egress is blocked.",
|
|
3556
|
+
"Process executing `require('node-ipc')` performs read access to ANY of: ~/.aws/credentials, ~/.aws/config, ~/.config/gcloud/, ~/.azure/, ~/.ssh/id_*, ~/.kube/config, ~/.vault-token, ~/.config/Claude/, ~/.kiro/ — read pattern is the credential-harvest fingerprint regardless of whether the exfil channel succeeded.",
|
|
3557
|
+
"node binary parent-process executes a `require('node-ipc')` call path AND opens a non-process-typical egress connection within the same scheduler tick — temporal correlation between module load and exfil DNS lookup is near-deterministic on first invocation."
|
|
3558
|
+
],
|
|
3559
|
+
"version_exposure": [
|
|
3560
|
+
"Lockfile (package-lock.json / yarn.lock / pnpm-lock.yaml) contains a `node-ipc` entry resolved to version 9.1.6, 9.2.3, or 12.0.1 — exact-version match is sufficient; the integrity hash will also differ from any pre-2026-05-14 cache.",
|
|
3561
|
+
"package.json declares a node-ipc dependency range that includes any of the three malicious versions AND the lockfile was regenerated during the 2026-05-14 exposure window (lockfile mtime + node-ipc resolution check)."
|
|
3562
|
+
],
|
|
3563
|
+
"registry_account_recovery": [
|
|
3564
|
+
"npm account audit: any maintainer account whose primary contact email domain has WHOIS expiry within 90 days. Cross-reference with `npm whoami` + `npm owner ls <package>` for every critical-path dependency. This is the upstream IoC class — once it fires, the package is recoverable by any attacker who registers the domain before the legitimate maintainer renews."
|
|
3565
|
+
],
|
|
3566
|
+
"forensic_note": "DNS TXT exfiltration is invisible to HTTP egress filtering and to most network IDS rules tuned for HTTPS. Defenders investigating suspected compromise should pull DNS resolver logs for the full exposure window — the exfil channel is the only telemetry that proves the payload fired AND succeeded (file-read alone does not prove successful exfil). Snapshot node_modules/node-ipc tarball before remediating; the tarball IS the primary forensic artifact."
|
|
3567
|
+
},
|
|
3568
|
+
"last_updated": "2026-05-15",
|
|
3569
|
+
"discovery_attribution_note": "Concurrent ecosystem-detection by Socket (https://socket.dev/blog/node-ipc-package-compromised), StepSecurity (https://www.stepsecurity.io/blog/node-ipc-npm-supply-chain-attack), Semgrep (https://semgrep.dev/blog/2026/not-your-ipc-but-node-ipc-npm-hit-again-with-supply-chain-attack-but-this-time-its-not-a-worm/), and Datadog Security Labs (https://securitylabs.datadoghq.com/articles/node-ipc-npm-malware-analysis/) within hours of the 2026-05-14 publish window. Consolidated coverage by The Hacker News (https://thehackernews.com/2026/05/stealer-backdoor-found-in-3-node-ipc.html). No single human researcher credited; no AI-tool credit on the defender side. Discovery class: ecosystem-detection (telemetry-driven, no AI tool). Source-data ambiguity noted: monthly-download figure reported as 3.35M (npm registry direct) but Socket cited 822K weekly and The Hacker News cited 10M weekly — npm-registry-direct figure carried in the affected description; alternative figures retained in this note so future audits can reconcile against npm's API once the live counter rolls forward past the yank.",
|
|
3570
|
+
"_editorial_promoted": "2026-05-15",
|
|
3571
|
+
"_editorial_note": "Cycle 13 intake (v0.12.33): cycle 13 agent C surfaced node-ipc 2026-05-14 publish event in the 24h-window check. Novel attack precondition (expired-domain re-registration + npm password-reset abuse) makes this a distinct supply-chain class from the Shai-Hulud (token-compromise) and elementary-data (typosquat + orphan-commit) precedents; warrants its own NEW-CTRL-047 in zeroday-lessons.json. RWEP factors satisfy Shape B invariant (0 + 20 + 0 + 20 + 28 - 15 - 10 + 0 = 43); discovery_attribution_note cites multiple firms with URLs."
|
|
3444
3572
|
}
|
|
3445
3573
|
}
|
package/data/cwe-catalog.json
CHANGED
|
@@ -1127,7 +1127,8 @@
|
|
|
1127
1127
|
],
|
|
1128
1128
|
"skills_referencing": [],
|
|
1129
1129
|
"evidence_cves": [
|
|
1130
|
-
"MAL-2026-3083"
|
|
1130
|
+
"MAL-2026-3083",
|
|
1131
|
+
"MAL-2026-NODE-IPC-STEALER"
|
|
1131
1132
|
],
|
|
1132
1133
|
"framework_controls_partially_addressing": [
|
|
1133
1134
|
"NIST-800-53-SA-12",
|
|
@@ -1413,7 +1414,9 @@
|
|
|
1413
1414
|
"sector-federal-government",
|
|
1414
1415
|
"supply-chain-integrity"
|
|
1415
1416
|
],
|
|
1416
|
-
"evidence_cves": [
|
|
1417
|
+
"evidence_cves": [
|
|
1418
|
+
"MAL-2026-NODE-IPC-STEALER"
|
|
1419
|
+
],
|
|
1417
1420
|
"framework_controls_partially_addressing": [
|
|
1418
1421
|
"NIST-800-53-SA-12",
|
|
1419
1422
|
"ISO-27001-2022-A.8.30"
|
|
@@ -1652,7 +1655,9 @@
|
|
|
1652
1655
|
"sector-federal-government",
|
|
1653
1656
|
"supply-chain-integrity"
|
|
1654
1657
|
],
|
|
1655
|
-
"evidence_cves": [
|
|
1658
|
+
"evidence_cves": [
|
|
1659
|
+
"MAL-2026-NODE-IPC-STEALER"
|
|
1660
|
+
],
|
|
1656
1661
|
"framework_controls_partially_addressing": [
|
|
1657
1662
|
"NIST-800-53-SA-12",
|
|
1658
1663
|
"ISO-27001-2022-A.5.21",
|
package/data/d3fend-catalog.json
CHANGED
|
@@ -1043,5 +1043,51 @@
|
|
|
1043
1043
|
"ai_pipeline_applicability": "Self-managed AI hosts: standard FIM applies to MCP server configs, ~/.claude, ~/.cursor settings. Serverless: equivalent is image-immutability + read-only rootfs (modifications outside writable tmpfs are structurally impossible).",
|
|
1044
1044
|
"lag_notes": "SI-7 covers software/firmware integrity; user-space configuration FIM is implicit not explicit. Framework audits accept 'FIM is deployed' without sampling whether the rule set covers AI-assistant config paths that have become high-value targets.",
|
|
1045
1045
|
"last_verified": "2026-05-13"
|
|
1046
|
+
},
|
|
1047
|
+
"D3-EFA": {
|
|
1048
|
+
"id": "D3-EFA",
|
|
1049
|
+
"name": "Executable File Analysis",
|
|
1050
|
+
"tactic": "Detect",
|
|
1051
|
+
"subtactic": "File Analysis",
|
|
1052
|
+
"description": "Analyzing the format, contents, or static characteristics of an executable file to determine whether it warrants further investigation. Covers PE/ELF/Mach-O header inspection, embedded-string + import-table review, entropy + packer detection, and YARA-rule matching against known malicious patterns. Distinct from D3-DA (Dynamic Analysis): no execution occurs.",
|
|
1053
|
+
"counters_attack_techniques": [
|
|
1054
|
+
"T1027",
|
|
1055
|
+
"T1027.002",
|
|
1056
|
+
"T1059",
|
|
1057
|
+
"T1078",
|
|
1058
|
+
"T1195.002",
|
|
1059
|
+
"T1204",
|
|
1060
|
+
"T1505.003",
|
|
1061
|
+
"T1546.014",
|
|
1062
|
+
"AML.T0010",
|
|
1063
|
+
"AML.T0019"
|
|
1064
|
+
],
|
|
1065
|
+
"digital_artifacts_addressed": [
|
|
1066
|
+
"Executable Binary",
|
|
1067
|
+
"Executable Script",
|
|
1068
|
+
"Firmware",
|
|
1069
|
+
"OS Image"
|
|
1070
|
+
],
|
|
1071
|
+
"skills_referencing": [],
|
|
1072
|
+
"implementation_examples": [
|
|
1073
|
+
"YARA",
|
|
1074
|
+
"PEStudio / PEiD",
|
|
1075
|
+
"radare2 / Cutter / Ghidra (static-only mode)",
|
|
1076
|
+
"ssdeep + sdhash fuzzy-hash matching",
|
|
1077
|
+
"Mandiant CAPA capability detection",
|
|
1078
|
+
"Sigstore cosign verify on container image manifests",
|
|
1079
|
+
"OEM firmware-image signature verification at provisioning time"
|
|
1080
|
+
],
|
|
1081
|
+
"framework_controls_partially_mapped": [
|
|
1082
|
+
"NIST-800-53-SI-3",
|
|
1083
|
+
"NIST-800-53-SI-7",
|
|
1084
|
+
"NIST-800-53-SI-7(6)",
|
|
1085
|
+
"ISO-27001-2022-A.8.7",
|
|
1086
|
+
"PCI-DSS-v4-5.2.3",
|
|
1087
|
+
"CIS-Controls-v8-10.5"
|
|
1088
|
+
],
|
|
1089
|
+
"ai_pipeline_applicability": "Directly applicable to model-artifact ingestion paths (pickle/safetensors/ONNX): static analysis of serialized weights can surface malicious __reduce__ payloads (D3-EFA on the pickle stream) before any deserialization occurs. For MCP-server binaries shipped via npm/PyPI, D3-EFA pairs with D3-EAL — analyze first to gate the allowlist decision rather than allow-by-publisher.",
|
|
1090
|
+
"lag_notes": "NIST SI-3 prescribes \"malicious code protection\" without binding the control to static-file-analysis specifically; auditors routinely accept signature-AV deployment as the entire SI-3 implementation, missing the analyze-before-load posture that catches packed / encoder-obfuscated payloads. Distinct from D3-EAL: allowlisting blocks a binary at execute-time; D3-EFA inspects the bytes at file-write / image-pull / artifact-fetch time and gates the allowlist itself.",
|
|
1091
|
+
"last_verified": "2026-05-15"
|
|
1046
1092
|
}
|
|
1047
1093
|
}
|
|
@@ -347,7 +347,6 @@
|
|
|
347
347
|
},
|
|
348
348
|
"skill_preload": [
|
|
349
349
|
"cloud-security",
|
|
350
|
-
"cred-stores",
|
|
351
350
|
"incident-response-playbook",
|
|
352
351
|
"identity-assurance",
|
|
353
352
|
"framework-gap-analysis",
|
|
@@ -368,11 +367,6 @@
|
|
|
368
367
|
"purpose": "Cloud-provider-specific IAM construct inventory and trust-policy hygiene assessment (AWS IAM + STS, GCP IAM + Workload Identity Federation, Azure AD + managed identities).",
|
|
369
368
|
"required": true
|
|
370
369
|
},
|
|
371
|
-
{
|
|
372
|
-
"skill": "cred-stores",
|
|
373
|
-
"purpose": "Cloud-provider key-store posture (KMS / Cloud KMS / Key Vault) and access-key rotation hygiene; cross-walk with credential-store playbook for any compromised principal whose blast radius >= 4.",
|
|
374
|
-
"required": true
|
|
375
|
-
},
|
|
376
370
|
{
|
|
377
371
|
"skill": "identity-assurance",
|
|
378
372
|
"purpose": "AAL/IAL/FAL assessment of human-principal MFA posture, federated-identity assurance levels, and step-up authentication coverage on cloud admin actions.",
|
|
@@ -314,8 +314,7 @@
|
|
|
314
314
|
},
|
|
315
315
|
"skill_preload": [
|
|
316
316
|
"idp-incident-response",
|
|
317
|
-
"identity-assurance"
|
|
318
|
-
"cred-stores"
|
|
317
|
+
"identity-assurance"
|
|
319
318
|
]
|
|
320
319
|
},
|
|
321
320
|
"direct": {
|
|
@@ -337,11 +336,6 @@
|
|
|
337
336
|
"purpose": "AAL / IAL / FAL assurance constructs, FIDO2 / WebAuthn / phishing-resistant factor enrolment validation, federated-trust signing-key posture.",
|
|
338
337
|
"required": true
|
|
339
338
|
},
|
|
340
|
-
{
|
|
341
|
-
"skill": "cred-stores",
|
|
342
|
-
"purpose": "Downstream containment — rotate management-API tokens, downstream service-account credentials, session tokens; audit Vault / Secrets Manager for IdP-derived credentials.",
|
|
343
|
-
"required": true
|
|
344
|
-
},
|
|
345
339
|
{
|
|
346
340
|
"skill": "framework-gap-analysis",
|
|
347
341
|
"purpose": "Per-framework reconciliation of IdP-tenant control-plane coverage gaps.",
|