@blamejs/exceptd-skills 0.12.9 → 0.12.11

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.
@@ -35,7 +35,12 @@
35
35
  "note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
36
36
  },
37
37
  "vendor_advisory_field_added": "2026-05-11",
38
- "vendor_advisory_note": "Each CVE carries a structured vendor_advisories array (vendor, advisory_id, url, severity, published_date) for downstream consumers that route by vendor advisory. Unknown advisory IDs are null with the canonical vendor CVE-resolver URL — never fabricated. Existing free-form references are preserved in verification_sources; vendor_advisories is additive."
38
+ "vendor_advisory_note": "Each CVE carries a structured vendor_advisories array (vendor, advisory_id, url, severity, published_date) for downstream consumers that route by vendor advisory. Unknown advisory IDs are null with the canonical vendor CVE-resolver URL — never fabricated. Existing free-form references are preserved in verification_sources; vendor_advisories is additive.",
39
+ "id_conventions": {
40
+ "default": "CVE-YYYY-NNNNN",
41
+ "non_cve_keys_accepted": ["SNYK-*", "GHSA-*"],
42
+ "note": "Catalog keys are CVE-* by default. For pre-CVE-assignment advisories under active operational impact, the project accepts OSV-native identifier shapes as the canonical key, with cross-references retained in `aliases`: MAL-* (OSSF Malicious Packages dataset — published into OSV.dev; primary key for malicious-package compromises), GHSA-* (GitHub Advisory Database; primary key when the package is on GitHub and no CVE has issued yet), and SNYK-* (Snyk advisory dataset; primary key for advisories Snyk catalogued before OSV/GHSA ingested them). When MITRE issues a CVE, the entry is renamed in lockstep with the matching zeroday-lessons key; the previous identifier is retained in `aliases` so historical references continue to resolve. Precedent: MAL-2026-3083 added 2026-05-13 (the elementary-data PyPI worm, 1.1M monthly downloads, OSV/OSSF-cataloged before any CVE issued). EPSS coverage does not extend to non-CVE identifiers; epss_score is null with a documenting epss_note on such entries. Upstream pull from OSV.dev: `exceptd refresh --source osv` (added v0.12.10)."
43
+ }
39
44
  },
40
45
  "CVE-2026-31431": {
41
46
  "name": "Copy Fail",
@@ -703,11 +708,11 @@
703
708
  "Set npm registry cooldown: .npmrc `before=72h` (npm 11+) or `minimumReleaseAge=4320` to refuse any fresh-publish under 72 hours"
704
709
  ],
705
710
  "framework_control_gaps": {
706
- "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.",
707
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.",
708
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.",
709
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.",
710
- "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.",
711
716
  "DORA-Art28": "ICT third-party risk doesn't cover transitive cache poisoning in upstream CI/CD."
712
717
  },
713
718
  "atlas_refs": [
@@ -835,5 +840,350 @@
835
840
  ]
836
841
  },
837
842
  "last_updated": "2026-05-13"
843
+ },
844
+ "MAL-2026-3083": {
845
+ "name": "Elementary-Data PyPI Worm (Forged Release via GitHub Actions Script Injection)",
846
+ "type": "RCE-supply-chain",
847
+ "aliases": [
848
+ "SNYK-PYTHON-ELEMENTARYDATA-16316110",
849
+ "pypi/2026-04-compr-elementary-data/elementary-data"
850
+ ],
851
+ "aliases_note": "Primary key is OSV-native MAL-2026-3083 (OSSF Malicious Packages dataset; first publisher 2026-04-24T22:54Z). Snyk SNYK-PYTHON-ELEMENTARYDATA-16316110 and kam193 campaign id pypi/2026-04-compr-elementary-data are cross-references for operator lookup. MITRE has not assigned a CVE id as of 2026-05-13; if one is issued later the catalog key is renamed and aliases retained.",
852
+ "cvss_score": 9.3,
853
+ "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
854
+ "cisa_kev": false,
855
+ "cisa_kev_date": null,
856
+ "poc_available": true,
857
+ "poc_description": "Public forensic writeups + the malicious orphan commit b1e4b1f3aad0d489ab0e9208031c67402bbb8480 still readable on GitHub. The .pth-file install-time payload mechanism is well-understood; the exfiltration domain (skyhanni.cloud subdomain) was active in the wild during the window 2026-04-24 22:20Z through 2026-04-25 ~06:30Z.",
858
+ "ai_discovered": false,
859
+ "ai_assisted_weaponization": false,
860
+ "active_exploitation": "confirmed",
861
+ "active_exploitation_notes": "1.1M monthly downloads — anyone who pip-installed elementary-data==0.23.3 during the 8-hour exposure window was hit. Window: 2026-04-24 22:20Z → 2026-04-25 ~06:30Z.",
862
+ "affected": "elementary-data (PyPI) — data observability tool inside dbt analytics pipelines. ~1.1M monthly downloads.",
863
+ "affected_versions": [
864
+ "elementary-data == 0.23.3"
865
+ ],
866
+ "vector": "GitHub Actions script-injection sink in `.github/workflows/update_pylon_issue.yml`. Workflow interpolated `${{ github.event.comment.body }}` directly into a `run:` shell script — commenting on any open PR was sufficient to execute attacker-controlled shell with the elevated GITHUB_TOKEN. Attacker forged orphan commit b1e4b1f3aad0d489ab0e9208031c67402bbb8480, tagged v0.23.3, and dispatched the legitimate publishing pipeline — producing a properly-signed release pointing at code the maintainers never saw.",
867
+ "complexity": "low",
868
+ "complexity_notes": "Anyone with a GitHub account can comment on a public PR. Self-replicating in pattern: any project running a similar workflow shape (`${{ github.event.* }}` directly in `run:`) is exploitable by the same primitive.",
869
+ "patch_available": true,
870
+ "patch_required_reboot": false,
871
+ "live_patch_available": true,
872
+ "live_patch_tools": [
873
+ "pip uninstall elementary-data && pip install elementary-data==0.23.4 (clean replacement, same-day)",
874
+ "Yank 0.23.3 from any private mirror; PyPI has already yanked the public copy",
875
+ "GHCR :latest re-points to clean image; rebuild any image FROM elementary-data:0.23.3"
876
+ ],
877
+ "framework_control_gaps": {
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
+ "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-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
+ "EU-CRA-Art13": "Required vulnerability handling doesn't address the case where the maintainer was an unwitting publisher.",
882
+ "NIS2-Art21-patch-management": "Supply chain risk management presumes detectable signal at consumption. Valid signature neutralizes consumer-side checks."
883
+ },
884
+ "atlas_refs": [
885
+ "AML.T0010",
886
+ "AML.T0018",
887
+ "AML.T0055"
888
+ ],
889
+ "attack_refs": [
890
+ "T1195.001",
891
+ "T1195.002",
892
+ "T1078.004",
893
+ "T1552.001",
894
+ "T1059.006"
895
+ ],
896
+ "rwep_score": 45,
897
+ "rwep_factors": {
898
+ "cisa_kev": 0,
899
+ "poc_available": 20,
900
+ "ai_factor": 0,
901
+ "active_exploitation": 20,
902
+ "blast_radius": 30,
903
+ "patch_available": -15,
904
+ "live_patch_available": -10,
905
+ "reboot_required": 0
906
+ },
907
+ "rwep_notes": "Canonical RWEP = 45. Operationally treat as P1 — the 8h mass-exposure window (2026-04-24 22:20Z → 2026-04-25 ~06:30Z) means anyone who installed during that window is affected regardless of whether they later upgraded; credential rotation is required. The RWEP formula caps blast_radius at 30 and has no factor for time-bounded mass-exposure windows; the qualitative narrative here is the authoritative risk signal. CISA KEV listing (when it arrives) will add +25 → 70.",
908
+ "epss_score": null,
909
+ "epss_percentile": null,
910
+ "epss_date": "2026-05-13",
911
+ "epss_source": null,
912
+ "epss_note": "EPSS coverage does not extend to non-CVE advisories. FIRST EPSS API only indexes CVE identifiers; MAL-* / SNYK-* / GHSA-* keys return no data. Re-query and populate epss_score when MITRE assigns a CVE id and the entry is renamed.",
913
+ "cwe_refs": ["CWE-506", "CWE-77", "CWE-94"],
914
+ "source_verified": "2026-05-13",
915
+ "verification_sources": [
916
+ "https://api.osv.dev/v1/query (POST {package:{name:elementary-data,ecosystem:PyPI},version:0.23.3}) — returns MAL-2026-3083",
917
+ "https://security.snyk.io/vuln/SNYK-PYTHON-ELEMENTARYDATA-16316110",
918
+ "https://www.stepsecurity.io/blog/elementary-data-compromised-on-pypi-and-ghcr-forged-release-pushed-via-github-actions-script-injection",
919
+ "https://snyk.io/blog/malicious-release-of-elementary-data-pypi-package-steals-cloud-credentials-from-data-engineers/",
920
+ "https://www.bleepingcomputer.com/news/security/pypi-package-with-11m-monthly-downloads-hacked-to-push-infostealer/",
921
+ "https://www.chainguard.dev/unchained/chainguard-customers-safe-from-elementary-data-compromise",
922
+ "https://www.elementary-data.com/post/security-incident-report-malicious-release-of-elementary-oss-python-cli-v0-23-3",
923
+ "https://bad-packages.kam193.eu/pypi/campaign/2026-04-compr-elementary-data"
924
+ ],
925
+ "vendor_advisories": [
926
+ {
927
+ "vendor": "OSV.dev (OSSF Malicious Packages)",
928
+ "advisory_id": "MAL-2026-3083",
929
+ "url": "https://osv.dev/vulnerability/MAL-2026-3083",
930
+ "severity": "critical",
931
+ "published_date": "2026-04-24"
932
+ },
933
+ {
934
+ "vendor": "Snyk",
935
+ "advisory_id": "SNYK-PYTHON-ELEMENTARYDATA-16316110",
936
+ "url": "https://security.snyk.io/vuln/SNYK-PYTHON-ELEMENTARYDATA-16316110",
937
+ "severity": "critical",
938
+ "published_date": "2026-04-28"
939
+ },
940
+ {
941
+ "vendor": "StepSecurity",
942
+ "advisory_id": null,
943
+ "url": "https://www.stepsecurity.io/blog/elementary-data-compromised-on-pypi-and-ghcr-forged-release-pushed-via-github-actions-script-injection",
944
+ "severity": "critical",
945
+ "published_date": "2026-04-25"
946
+ },
947
+ {
948
+ "vendor": "Elementary Data",
949
+ "advisory_id": null,
950
+ "url": "https://github.com/elementary-data/elementary/issues/2205",
951
+ "severity": "critical",
952
+ "published_date": "2026-04-25"
953
+ }
954
+ ],
955
+ "iocs": {
956
+ "payload_artifacts": [
957
+ "site-packages/elementary.pth (any line starting with `import` — auto-execs on every python invocation; ~245 KB base64-encoded harvester)",
958
+ "PyPI package elementary-data==0.23.3 (yanked; the wheel+sdist differ from 0.23.2 by exactly one file: elementary.pth)",
959
+ "GHCR image elementarydata/elementary-data:latest pre-2026-04-25 — image digest sha256:31ecc5939de6d24cf60c50d4ca26cf7a8c322db82a8ce4bd122ebd89cf634255",
960
+ "Clean baseline: GHCR sha256:b3bbfafde1a0db3a4d47e70eb0eb2ca19daef4a19410154a71abee567b35d3d9"
961
+ ],
962
+ "persistence_artifacts": [
963
+ "$TMPDIR/.trinny-security-update (campaign persistence marker; presence on disk = install-time payload executed)",
964
+ "elementary.pth in any site-packages — Python auto-loads .pth files on interpreter startup"
965
+ ],
966
+ "credential_paths_scanned": [
967
+ "~/.dbt/profiles.yml (dbt warehouse credentials — primary target given elementary's dbt user base)",
968
+ "~/.aws/credentials, application_default_credentials.json (GCP), ~/.azure/",
969
+ "~/.ssh/id_rsa, ~/.ssh/id_ed25519, ~/.git-credentials",
970
+ "~/.docker/config.json, ~/.kube/config, /etc/kubernetes/*.conf",
971
+ "~/.npmrc, ~/.pypirc, ~/.cargo/credentials.toml",
972
+ ".env* files up to 6 directory levels deep",
973
+ "~/.vault-token, ~/.netrc, ~/.pgpass, ~/.my.cnf",
974
+ "/etc/passwd, /etc/shadow, shell history files, /var/log/auth.log",
975
+ "Cryptocurrency wallet files"
976
+ ],
977
+ "c2_indicators": [
978
+ "DNS / outbound HTTPS to igotnofriendsonlineorirl-imgonnakmslmao.skyhanni.cloud (sole exfiltration domain)",
979
+ "Outbound HTTP request carrying header `X-Rise-To-The-Trinny: agree` (campaign tag)",
980
+ "Any outbound from python child of pip / pip install on a host that just installed elementary-data"
981
+ ],
982
+ "supply_chain_entry_vectors": [
983
+ "GitHub repo with any `.github/workflows/*.yml` interpolating `${{ github.event.comment.body }}` / `github.event.issue.body` / `github.event.review.body` directly into a `run: |` block — exploitable by anyone who can comment on a PR/issue",
984
+ "Orphan-commit-driven release: any release tag whose target commit is NOT an ancestor of the default branch — forged via privileged token usage",
985
+ "GitHub repo with `permissions: contents: write` on a workflow that triggers on `issue_comment` / `pull_request_target` / similar untrusted-input triggers"
986
+ ],
987
+ "behavioral": [
988
+ "Brand-new GitHub account (created within 7 days) commenting on a high-download package's open PR with a payload-shaped string (shell metacharacters in a context that gets shell-interpolated)",
989
+ "Release tag pointing at an orphan commit (no path through git rev-list to the default branch)",
990
+ "Workflow run on a public repo where GITHUB_TOKEN.permissions includes contents:write AND the trigger event is issue_comment / pull_request_target",
991
+ "pip install of a major-version-pinned package returning a wheel whose contents differ from the previous patch version by added .pth file"
992
+ ]
993
+ },
994
+ "last_updated": "2026-05-13"
995
+ },
996
+ "CVE-2026-42208": {
997
+ "name": "BerriAI LiteLLM Proxy Auth SQL Injection",
998
+ "type": "RCE-via-sql-injection",
999
+ "cvss_score": 9.8,
1000
+ "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
1001
+ "cvss_v4_score": 9.3,
1002
+ "cvss_v4_vector": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
1003
+ "cisa_kev": true,
1004
+ "cisa_kev_date": "2026-05-08",
1005
+ "cisa_kev_due_date": "2026-05-29",
1006
+ "poc_available": true,
1007
+ "poc_description": "GHSA-r75f-5x8p-qvmc documents the sink shape — crafted Authorization header to any LLM API route reaches the vulnerable query through error-handling paths. KEV-listed implies in-wild exploitation evidence.",
1008
+ "ai_discovered": false,
1009
+ "ai_assisted_weaponization": false,
1010
+ "active_exploitation": "confirmed",
1011
+ "active_exploitation_notes": "CISA KEV listing criterion is in-wild exploitation evidence.",
1012
+ "affected": "BerriAI LiteLLM Proxy — open-source LLM-API gateway managing credentials + routing across model providers. Used in front of AI agent stacks, MCP-server fronts, multi-model proxy deployments. Substantial production footprint.",
1013
+ "affected_versions": [
1014
+ "litellm >= 1.81.16",
1015
+ "litellm < 1.83.7"
1016
+ ],
1017
+ "vector": "Authorization header value passed directly into a SQL query in the proxy's auth path. Crafted bearer-token-shape strings reach the error-logging pathway which executes SQL with the attacker-controlled value as a string-concatenated parameter. Result: read/modify the managed-credentials DB without prior auth.",
1018
+ "complexity": "low",
1019
+ "complexity_notes": "Curl-able exploit — POST to /chat/completions with a SQL-injection payload in Authorization. Network-reachable, no auth, no UI.",
1020
+ "patch_available": true,
1021
+ "patch_required_reboot": false,
1022
+ "live_patch_available": true,
1023
+ "live_patch_tools": [
1024
+ "Upgrade to litellm 1.83.7+ (parameterised query — caller-supplied value is now a SQL parameter not a concatenated string)",
1025
+ "Temporary workaround: `general_settings: disable_error_logs: true` removes the error-handling pathway the injection abuses"
1026
+ ],
1027
+ "framework_control_gaps": {
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-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
+ "EU-AI-Act-Art-15": "Robustness + cybersecurity requirement is undefined operationally for AI gateway infrastructure."
1032
+ },
1033
+ "atlas_refs": [
1034
+ "AML.T0055"
1035
+ ],
1036
+ "attack_refs": [
1037
+ "T1190",
1038
+ "T1078.001"
1039
+ ],
1040
+ "rwep_score": 65,
1041
+ "rwep_factors": {
1042
+ "cisa_kev": 25,
1043
+ "poc_available": 20,
1044
+ "ai_factor": 0,
1045
+ "active_exploitation": 20,
1046
+ "blast_radius": 25,
1047
+ "patch_available": -15,
1048
+ "live_patch_available": -10,
1049
+ "reboot_required": 0
1050
+ },
1051
+ "rwep_notes": "Operationally P1 — KEV-listed, network-vector, no auth, full credential DB compromise. AI-stack fleets running LiteLLM as the gateway should patch within the KEV 21-day window at minimum.",
1052
+ "epss_score": 0.37368,
1053
+ "epss_percentile": 0.9722,
1054
+ "epss_date": "2026-05-13",
1055
+ "epss_source": "https://api.first.org/data/v1/epss?cve=CVE-2026-42208",
1056
+ "cwe_refs": ["CWE-89"],
1057
+ "source_verified": "2026-05-13",
1058
+ "verification_sources": [
1059
+ "https://nvd.nist.gov/vuln/detail/CVE-2026-42208",
1060
+ "https://github.com/BerriAI/litellm/security/advisories/GHSA-r75f-5x8p-qvmc",
1061
+ "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-42208"
1062
+ ],
1063
+ "vendor_advisories": [
1064
+ {
1065
+ "vendor": "BerriAI",
1066
+ "advisory_id": "GHSA-r75f-5x8p-qvmc",
1067
+ "url": "https://github.com/BerriAI/litellm/security/advisories/GHSA-r75f-5x8p-qvmc",
1068
+ "severity": "critical",
1069
+ "published_date": "2026-05-08"
1070
+ },
1071
+ {
1072
+ "vendor": "CISA KEV",
1073
+ "advisory_id": null,
1074
+ "url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-42208",
1075
+ "severity": "critical",
1076
+ "published_date": "2026-05-08"
1077
+ }
1078
+ ],
1079
+ "iocs": {
1080
+ "payload_artifacts": [
1081
+ "POST /chat/completions with Authorization header value containing SQL-injection metacharacters (`'`, `--`, `OR 1=1`, UNION-based payloads)",
1082
+ "Any HTTP request to a LiteLLM proxy where the Authorization header value is unusually long (> 100 chars) or contains characters outside [A-Za-z0-9\\-_.~+/=]"
1083
+ ],
1084
+ "behavioral": [
1085
+ "LiteLLM proxy db (default sqlite or postgres) showing new rows in the LiteLLM_VerificationToken / LiteLLM_UserTable created without a corresponding admin-UI session",
1086
+ "LiteLLM error logs containing parameterised-SQL failure shapes that include the Authorization header string verbatim (pre-1.83.7 the value lands in error logs in cleartext)",
1087
+ "Outbound network from a LiteLLM proxy host to a model-provider endpoint using a freshly-issued virtual key that has no admin-event history",
1088
+ "Mass key-generation events in LiteLLM logs (the SQLi path includes a key-mint primitive)"
1089
+ ],
1090
+ "c2_indicators": [
1091
+ "Outbound from a LiteLLM proxy host to model-provider endpoints (openai, anthropic, etc.) using virtual keys not minted via the admin UI (compromised proxy uses its own stolen keys to mask attacker traffic as legitimate proxy traffic)"
1092
+ ],
1093
+ "credential_paths_scanned": [
1094
+ "LiteLLM proxy DATABASE_URL-pointed database (sqlite file or postgres connection) — once SQLi reaches the DB, the entire managed-credentials table is read/write",
1095
+ "Environment variables LITELLM_MASTER_KEY, DATABASE_URL on the proxy host"
1096
+ ]
1097
+ },
1098
+ "last_updated": "2026-05-13"
1099
+ },
1100
+ "CVE-2026-39884": {
1101
+ "name": "Flux159 mcp-server-kubernetes Argument Injection via port_forward",
1102
+ "type": "argument-injection",
1103
+ "cvss_score": 8.3,
1104
+ "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L",
1105
+ "cisa_kev": false,
1106
+ "cisa_kev_date": null,
1107
+ "poc_available": true,
1108
+ "poc_description": "GHSA-4xqg-gf5c-ghwq publishes the PoC: invoke port_forward tool with resourceName containing space-delimited kubectl flags. Attacker-controllable args reach kubectl via .split(' ') concatenation in startPortForward() / executeKubectlCommandAsync().",
1109
+ "ai_discovered": false,
1110
+ "ai_assisted_weaponization": false,
1111
+ "active_exploitation": "suspected",
1112
+ "active_exploitation_notes": "No public exploitation evidence as of 2026-05-13, but the MCP-server ecosystem has known opportunistic-scan history. Treated as suspected.",
1113
+ "affected": "Flux159 mcp-server-kubernetes — MCP server giving AI assistants kubectl control. Installed in AI agent stacks that talk to Kubernetes clusters.",
1114
+ "affected_versions": [
1115
+ "mcp-server-kubernetes <= 3.4.0"
1116
+ ],
1117
+ "vector": "AI assistant invokes the port_forward MCP tool with resourceName='pod-name --address=0.0.0.0' or similar. The MCP server builds a string-form kubectl command and uses .split(' ') instead of an args array — the attacker-controlled flag lands as a distinct argv entry to kubectl. --address=0.0.0.0 binds the port-forward to all interfaces; -n kube-system redirects to attacker-chosen namespace.",
1118
+ "complexity": "low",
1119
+ "complexity_notes": "Only requires the AI assistant to be tricked (prompt injection in retrieved docs / commit messages / MCP tool responses) into passing a tainted resourceName. PR-injection / RAG-poisoning surface upstream gates exploitation.",
1120
+ "patch_available": true,
1121
+ "patch_required_reboot": false,
1122
+ "live_patch_available": true,
1123
+ "live_patch_tools": [
1124
+ "Upgrade mcp-server-kubernetes to 3.5.0+ (argv-array refactor)",
1125
+ "Until patched: disable the port_forward tool in MCP allowlist (most operator deployments don't rely on it)"
1126
+ ],
1127
+ "framework_control_gaps": {
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-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
+ },
1132
+ "atlas_refs": [
1133
+ "AML.T0053",
1134
+ "AML.T0051"
1135
+ ],
1136
+ "attack_refs": [
1137
+ "T1059",
1138
+ "T1078"
1139
+ ],
1140
+ "rwep_score": 20,
1141
+ "rwep_factors": {
1142
+ "cisa_kev": 0,
1143
+ "poc_available": 20,
1144
+ "ai_factor": 0,
1145
+ "active_exploitation": 10,
1146
+ "blast_radius": 15,
1147
+ "patch_available": -15,
1148
+ "live_patch_available": -10,
1149
+ "reboot_required": 0
1150
+ },
1151
+ "rwep_notes": "P3 — patch available, mitigation via tool disable, but the class (AI-mediated argument injection into infrastructure tools) is operationally important to track.",
1152
+ "epss_score": 0.00039,
1153
+ "epss_percentile": 0.11727,
1154
+ "epss_date": "2026-05-13",
1155
+ "epss_source": "https://api.first.org/data/v1/epss?cve=CVE-2026-39884",
1156
+ "cwe_refs": ["CWE-88"],
1157
+ "source_verified": "2026-05-13",
1158
+ "verification_sources": [
1159
+ "https://nvd.nist.gov/vuln/detail/CVE-2026-39884",
1160
+ "https://github.com/Flux159/mcp-server-kubernetes/security/advisories/GHSA-4xqg-gf5c-ghwq"
1161
+ ],
1162
+ "vendor_advisories": [
1163
+ {
1164
+ "vendor": "Flux159",
1165
+ "advisory_id": "GHSA-4xqg-gf5c-ghwq",
1166
+ "url": "https://github.com/Flux159/mcp-server-kubernetes/security/advisories/GHSA-4xqg-gf5c-ghwq",
1167
+ "severity": "high",
1168
+ "published_date": "2026-04-15"
1169
+ }
1170
+ ],
1171
+ "iocs": {
1172
+ "payload_artifacts": [
1173
+ "src/tools/port_forward.ts startPortForward() / executeKubectlCommandAsync() in any version <= 3.4.0 — calls `.split(' ')` on user-input-concatenated command string",
1174
+ "dist/tools/port_forward.js — compiled artifact in installed package"
1175
+ ],
1176
+ "behavioral": [
1177
+ "MCP audit log showing port_forward tool calls with resourceName containing spaces or kubectl flag prefixes (`--`, `-n`)",
1178
+ "kubectl port-forward processes with --address=0.0.0.0 on hosts that never invoke port-forward manually",
1179
+ "kubectl port-forward processes targeting kube-system / kube-public namespaces when the operator's intended namespace was a workload namespace",
1180
+ "Multiple -n flags in a single kubectl invocation (split-by-space duplicate-flag injection signature)"
1181
+ ],
1182
+ "runtime_syscall": [
1183
+ "execve of kubectl with argv containing /^--address=/ from a parent process in node_modules/mcp-server-kubernetes/dist/",
1184
+ "Network listener bound to 0.0.0.0:<port> by a kubectl process on a host that should only port-forward to localhost"
1185
+ ]
1186
+ },
1187
+ "last_updated": "2026-05-13"
838
1188
  }
839
1189
  }
@@ -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"
@@ -1302,5 +1303,39 @@
1302
1303
  "real_requirement": "Argon2id (memory-hard, RFC 9106) with tuned m/t/p; scrypt as fallback; bcrypt with work factor ≥ 12 acceptable for legacy. PBKDF2 only with iteration count ≥ 600,000 (NIST SP 800-63B 2022 update).",
1303
1304
  "lag_notes": "SP 800-63B updated iteration guidance in 2022; many compliance attestations still cite the 2017 numbers. Argon2id is RFC-9106 (2021) but absent from FIPS-approved lists, creating policy friction in federal contexts.",
1304
1305
  "last_verified": "2026-05-13"
1306
+ },
1307
+ "CWE-506": {
1308
+ "id": "CWE-506",
1309
+ "name": "Embedded Malicious Code",
1310
+ "abstraction": "Class",
1311
+ "category": "Supply Chain",
1312
+ "description": "The application contains code that appears to perform a legitimate function but actually contains a payload that performs an additional, attacker-controlled action — typically credential theft, persistence, or remote loader logic. The class covers package-registry malware (PyPI / npm / RubyGems / Cargo / Maven typosquats, compromised maintainer accounts, forged-release-via-CI vectors).",
1313
+ "top_25_rank_2024": null,
1314
+ "top_25_rank_2025": null,
1315
+ "view_memberships": ["CWE-1000"],
1316
+ "related_attack_patterns_capec": ["CAPEC-442", "CAPEC-446", "CAPEC-538"],
1317
+ "skills_referencing": ["library-author", "supply-chain-integrity"],
1318
+ "evidence_cves": ["CVE-2026-45321", "MAL-2026-3083"],
1319
+ "framework_controls_partially_addressing": ["NIST-800-53-SA-12", "NIST-800-218-PS.1", "ISO-27001-2022-A.8.30", "SLSA-Level-3"],
1320
+ "real_requirement": "Provenance attestation at install time (Sigstore, in-toto, SLSA L3+); registry-side malware scanning on every uploaded artifact; install-time .pth / postinstall / preinstall hook auditing; differential analysis between consecutive releases of the same package (added files, new network egress, new file reads); cooldown periods on new releases of high-download packages so registry scanners and community detection have time to fire before mass install.",
1321
+ "lag_notes": "SA-12 contemplates the traditional supply chain but does not require differential-analysis between adjacent releases. The elementary-data 0.23.3 attack (April 2026) added exactly one file (a `.pth` install-time payload) versus 0.23.2 — a difference any naive diff would catch but no registry-side scanner currently runs at upload time by default.",
1322
+ "last_verified": "2026-05-13"
1323
+ },
1324
+ "CWE-88": {
1325
+ "id": "CWE-88",
1326
+ "name": "Improper Neutralization of Argument Delimiters in a Command",
1327
+ "abstraction": "Base",
1328
+ "category": "Injection",
1329
+ "description": "The product constructs a string for a downstream command (typically by concatenating user input into a shell command line, then splitting on whitespace to argv) without escaping argument-delimiter characters. Distinguished from CWE-77 (Command Injection) by the narrower attack surface: the attacker cannot run arbitrary commands but CAN inject additional flags / arguments to a command the application already invokes, which is often sufficient to break the security model (redirect kubectl to attacker-control, change kubectl namespace, etc.).",
1330
+ "top_25_rank_2024": null,
1331
+ "top_25_rank_2025": null,
1332
+ "view_memberships": ["CWE-1000", "CWE-1003"],
1333
+ "related_attack_patterns_capec": ["CAPEC-460"],
1334
+ "skills_referencing": ["mcp-agent-trust", "container-runtime-security"],
1335
+ "evidence_cves": ["CVE-2026-39884"],
1336
+ "framework_controls_partially_addressing": ["NIST-800-53-SI-10"],
1337
+ "real_requirement": "Pass arguments to spawned processes as an array, not a string. When a string-form command is unavoidable, use the runtime's argument-list API (Node `child_process.spawn(cmd, argsArray)`, Python `subprocess.run([cmd, ...args])`) or a vetted escape function. Linter rule that flags any `.split(' ')` followed by `spawn`/`exec` on user-tainted input.",
1338
+ "lag_notes": "SI-10 addresses input validation categorically but does not specify the argv-vs-string boundary that argument injection exploits. Many MCP servers and CI runners string-concatenate user input into shell commands without registering this as a code-review failure mode.",
1339
+ "last_verified": "2026-05-13"
1305
1340
  }
1306
1341
  }
@@ -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
  }
@@ -757,6 +757,20 @@
757
757
  "deterministic": true,
758
758
  "attack_ref": "T1195.002"
759
759
  },
760
+ {
761
+ "id": "gha-workflow-script-injection-sink",
762
+ "type": "file_path",
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
+ "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": "high",
766
+ "deterministic": false,
767
+ "false_positive_checks_required": [
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
+ "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."
770
+ ],
771
+ "attack_ref": "T1195.001",
772
+ "cve_ref": "MAL-2026-3083"
773
+ },
760
774
  {
761
775
  "id": "publish-workflow-no-id-token-write",
762
776
  "type": "file_path",