← Back to Feed CACHED · 2026-09-04 07:18:32 · CACHE_KEY CVE-2026-85012
CVE-2026-85012 · CWE-78 · Disclosed 2026-09-03

Improper neutralization of special elements used in an OS command

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Like handing a loaded shell to a build step that Amazon already defused on their own servers

CVE-2026-85012 is an OS command injection (CWE-78) in the Amazon CodeCatalyst Blueprints SDK prior to version 0.3.156. The owner field of a [local] merge strategy entry in the .ownership-file is passed unsanitized to a shell command during the blueprint resynthesis process. An authenticated project contributor who can commit to the repository can embed shell metacharacters in that field. When resynthesis is triggered (requiring another user's action), the injected commands execute in the resynthesis environment with whatever privileges that process holds.

The vendor scored this HIGH at 8.0, but that rating dramatically overstates the real-world risk. The managed Amazon CodeCatalyst service is not vulnerable — AWS applies server-side validation that rejects [local] merge strategy commands outside a restricted allowlist, even for blueprint versions published before the fix. The only affected population is organizations running the open-source SDK in self-hosted environments, a group so small the core npm package sees roughly 919 weekly downloads. Even in that niche, resynthesis typically runs in an isolated per-project environment with scoped credentials, capping blast radius. The vendor HIGH is defensible as a theoretical maximum, but the real-world exposure population is vanishingly small.

"Managed CodeCatalyst is immune; only self-hosted SDK users with tiny install base are exposed."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Obtain repository commit access

The attacker must be an authenticated contributor to a CodeCatalyst project using the self-hosted Blueprints SDK (not the managed service). This requires a valid account with write permissions to the project's source repository. The CVSS vector confirms PR:L (low privilege required).
Conditions required:
  • Valid authenticated account on the CodeCatalyst project
  • Write/commit access to the target repository
  • Target must be using self-hosted Blueprints SDK, NOT the managed CodeCatalyst service
Where this breaks in practice:
  • Managed CodeCatalyst service users are immune — server-side allowlist blocks this vector entirely
  • Self-hosted SDK install base is extremely small (~919 weekly npm downloads for the core package)
  • Requires insider or compromised developer credentials
Detection/coverage: Code review of .ownership-file changes in PRs would catch injected metacharacters. No known scanner signatures exist for this specific vector.
STEP 02

Craft malicious .ownership-file

The attacker creates or modifies an .ownership-file in the repository, inserting shell metacharacters (e.g., $(cmd), ` cmd , ; cmd) into the owner field of a [local]` merge strategy entry. This file is committed to the repository and awaits the resynthesis trigger.
Conditions required:
  • Knowledge of the .ownership-file format and [local] merge strategy syntax
  • Ability to push commits (or merge a PR) containing the malicious file
Where this breaks in practice:
  • The file format is niche and not widely documented outside the SDK, reducing opportunistic exploitation
  • PR review processes would catch suspicious metacharacters in ownership files
Detection/coverage: Git diff monitoring or pre-commit hooks scanning for shell metacharacters in .ownership-file entries.
STEP 03

Trigger resynthesis (requires user interaction)

Blueprint resynthesis must be triggered — this is not an always-on process. The CVSS vector specifies UI:R, meaning another user or automated process must initiate the resynthesis step that processes the poisoned .ownership-file. The attacker cannot trigger this unilaterally in most configurations.
Conditions required:
  • A separate user or CI trigger must invoke blueprint resynthesis
  • The resynthesis process must use the vulnerable SDK version (<0.3.156)
Where this breaks in practice:
  • UI:R requirement means passive waiting — attacker cannot force the trigger
  • Automated CI pipelines may run resynthesis, but only if configured to do so with the self-hosted SDK
Detection/coverage: CI/CD pipeline logs showing resynthesis invocations; monitoring for unexpected child process spawning from the resynthesis worker.
STEP 04

Command execution in resynthesis environment

The injected shell commands execute with the privileges of the resynthesis process. In self-hosted deployments, the blast radius depends entirely on how the operator configured isolation. AWS notes that even the managed service uses isolated per-project environments with scoped credentials, and self-hosted best practice mirrors this. The attacker gains code execution within this sandbox boundary.
Conditions required:
  • Resynthesis environment runs with useful privileges or credentials
  • Environment is not sufficiently sandboxed
Where this breaks in practice:
  • Best-practice deployments run resynthesis in isolated containers with scoped credentials
  • Scope:Unchanged (S:U) in the CVSS vector confirms the vendor does not expect cross-boundary impact
  • Lateral movement from a sandboxed resynthesis container is a separate, non-trivial chain
Detection/coverage: Container runtime monitoring (Falco, Sysdig) for unexpected process execution. CloudTrail for anomalous API calls from scoped credentials.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNo known exploitation. Not listed on CISA KEV. No campaigns or threat actor use reported as of 2026-09-04.
Proof-of-ConceptNo public PoC identified. No exploit code found on GitHub, Exploit-DB, or security researcher disclosures. The attack is conceptually simple (shell metacharacter injection) but the target surface is extremely niche.
EPSS ScoreNot yet scored (disclosed 2026-09-03, less than 48 hours old). Expected to be low percentile given the niche attack surface and authentication requirement.
KEV StatusNot listed. No CISA KEV entry as of 2026-09-04.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H — 8.0 HIGH. Network-accessible but requires authentication (PR:L) and user interaction (UI:R). Scope is Unchanged, meaning impact stays within the vulnerable component boundary.
Affected VersionsAmazon CodeCatalyst Blueprints SDK < 0.3.156 (npm package @amazon-codecatalyst/blueprints.blueprint). The managed CodeCatalyst service is NOT affected due to server-side allowlist validation.
Fixed Version0.3.156 — removes shell interpretation of the owner field, runs commands directly, and rejects values outside an allowlisted form.
Install Base / ExposureCore npm package receives ~919 weekly downloads per socket.dev. Classified as *not popular*. The managed CodeCatalyst service (the vast majority of users) is immune.
Disclosure Date2026-09-03 (yesterday). AWS security bulletin published concurrently.
Reporting ResearcherNot publicly attributed. Disclosed via AWS security bulletin process.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.0/10)

The single most decisive factor is that the managed CodeCatalyst service is immune — AWS applies server-side validation blocking exploitation even on unpatched SDK versions — leaving only self-hosted SDK users exposed, a population of roughly 919 weekly npm downloads. This near-zero real-world exposure population, combined with authentication and user-interaction requirements, collapses the practical risk well below the vendor's HIGH/8.0 rating.

HIGH Managed service immunity (confirmed by AWS bulletin)
HIGH Vulnerability mechanics (CWE-78 shell metacharacter injection is well-understood)
MEDIUM Self-hosted deployment population estimate (based on npm download data, actual enterprise private registry usage unknown)
LOW EPSS and exploitation trajectory (CVE is less than 48 hours old)

Why this verdict

  • Managed service immunity eliminates >95% of the user base: AWS confirmed that the CodeCatalyst managed service applies server-side allowlist validation on [local] merge strategy commands, rendering this CVE unexploitable for the vast majority of users regardless of SDK version.
  • Microscopic self-hosted install base: The core Blueprints SDK npm package has ~919 weekly downloads. Even assuming private registry mirrors, the self-hosted population is negligibly small for enterprise fleet-scale risk.
  • Authentication + user interaction compounding friction: The chain requires PR:L (authenticated project contributor) AND UI:R (a separate user must trigger resynthesis). This is not a spray-and-pray attack; it requires insider positioning or compromised developer credentials, then passive waiting.
  • Scope:Unchanged caps blast radius: The CVSS vector specifies S:U, meaning even the vendor does not expect the attacker to break out of the resynthesis environment boundary. Best-practice deployments use isolated containers with scoped credentials.
  • Role multiplier: CI/CD-adjacent component with caveats. The Blueprints SDK is CI/CD-adjacent (resynthesis generates project scaffolding), placing it in the high-value role catalog. However: (1) the managed service is immune, so the canonical CI/CD deployment is not affected; (2) self-hosted SDK users running resynthesis in production CI pipelines without sandboxing represent a tiny fraction of an already tiny install base; (3) even in the worst case, S:U and scoped credentials limit blast radius to the project, not the fleet. The CI/CD role multiplier would floor this at HIGH if the canonical deployment were affected — but it is not. The floor does not apply because <1% of the installed base occupies the vulnerable configuration.

Why not higher?

Upgrading to HIGH or CRITICAL would require either the managed service to be vulnerable (it is not), a meaningfully large self-hosted population (npm data shows ~919 weekly downloads), or evidence of active exploitation or public PoC availability (neither exists). The CI/CD role multiplier is neutralized because the canonical deployment path — the managed CodeCatalyst service — is explicitly immune per AWS's own bulletin.

Why not lower?

Despite the tiny exposure population, this remains a real OS command injection (CWE-78) with full C/I/A impact in the resynthesis environment. The attack is conceptually simple (shell metacharacters in a config field) and requires only low privileges. Some enterprises may run self-hosted Blueprints SDK in CI pipelines with overprivileged service accounts, and the fix is a simple npm upgrade. Dropping to LOW or IGNORE would understate the risk for the small population that IS affected.

05 · Compensating Control

What to do — in priority order.

  1. Upgrade to SDK version 0.3.156 immediately — This is a one-line npm update for self-hosted users. The fix removes shell interpretation entirely and adds allowlist validation. Given the MEDIUM verdict, this falls under the noisgate 365-day remediation SLA, but the simplicity of the fix means there is no reason to delay.
  2. Audit .ownership-file contents in all repositories using the Blueprints SDK — Search for shell metacharacters ($, backticks, ;, |, &) in the owner field of [local] merge strategy entries. This is a one-time grep across your CodeCatalyst-connected repositories to confirm no exploitation has occurred.
  3. Run resynthesis in isolated containers with scoped credentials — If you must remain on a pre-0.3.156 SDK version temporarily, ensure the resynthesis process runs in a sandboxed container (Docker, Firecracker) with minimal IAM permissions scoped to the single project. This limits blast radius even if injection occurs.
  4. Add pre-commit hooks to reject suspicious .ownership-file changes — A simple git pre-commit or CI check that flags .ownership-file modifications containing shell metacharacters will block the attack vector at the commit layer.
What doesn't work
  • WAF / network-layer controls — The injection vector is a committed file in a git repository, not an HTTP request parameter. No WAF rule will intercept this.
  • Managed CodeCatalyst service users do not need any compensating control — AWS server-side validation already blocks this vector. Do not waste cycles patching what is already mitigated.
  • SAST/DAST scanning of your application code — The vulnerability is in the SDK's resynthesis engine processing a config file, not in your application source code. Standard application security scanners will not detect this.
06 · Verification

Crowdsourced verification payload.

Run this on any host where the CodeCatalyst Blueprints SDK is installed (typically a CI runner or developer workstation). Execute as the user who runs npm: bash check_cve_2026_85012.sh. No elevated privileges required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_85012.sh
# Checks whether the installed @amazon-codecatalyst/blueprints.blueprint
# npm package is vulnerable to CVE-2026-85012 (OS command injection
# in blueprint resynthesis via .ownership-file owner field).
# Fixed in version 0.3.156.
#
# Exit codes:
#   0 = PATCHED or package not installed
#   1 = VULNERABLE
#   2 = UNKNOWN (could not determine version)

set -euo pipefail

PKG="@amazon-codecatalyst/blueprints.blueprint"
FIXED_VERSION="0.3.156"

# Check if npm is available
if ! command -v npm &>/dev/null; then
  echo "UNKNOWN - npm not found on this host. If the Blueprints SDK is not used here, this host is not affected."
  exit 2
fi

# Get installed version (global and local)
INSTALLED=$(npm ls "$PKG" --json 2>/dev/null | grep '"version"' | head -1 | sed 's/.*"version": *"\([^"]*\)".*/\1/' || true)

if [ -z "$INSTALLED" ]; then
  echo "PATCHED - Package $PKG is not installed on this host."
  exit 0
fi

echo "Found $PKG version: $INSTALLED"

# Compare versions using sort -V
LOWER=$(printf '%s\n%s' "$INSTALLED" "$FIXED_VERSION" | sort -V | head -1)

if [ "$LOWER" = "$INSTALLED" ] && [ "$INSTALLED" != "$FIXED_VERSION" ]; then
  echo "VULNERABLE - $PKG $INSTALLED is below fixed version $FIXED_VERSION (CVE-2026-85012)"
  exit 1
else
  echo "PATCHED - $PKG $INSTALLED is at or above fixed version $FIXED_VERSION"
  exit 0
fi
07 · Bottom Line

If you remember one thing.

TL;DR
This CVE is a non-event for the vast majority of AWS customers. If you use Amazon CodeCatalyst as a managed service, no action is required — AWS's server-side allowlist validation already blocks exploitation regardless of your SDK version. If you are among the small number of organizations running the self-hosted Blueprints SDK (npm package @amazon-codecatalyst/blueprints.blueprint), run npm update to pull version 0.3.156 and you are done. Under the noisgate reassessed MEDIUM verdict, there is no mitigation SLA — go straight to the 365-day noisgate remediation SLA window. That said, this is a one-command npm upgrade with zero breaking changes, so there is no reason to defer it. Audit your repositories for .ownership-file entries containing shell metacharacters to rule out prior exploitation, and move on to higher-priority items in your queue.

Sources

  1. AWS Security Bulletin 2026-001
  2. CVE-2026-85012 - Offseq Radar
  3. CVE-2026-85012 - VulDB
  4. CVE-2026-85012 - ThreatInt
  5. npm: @amazon-codecatalyst/blueprints.blueprint - Socket.dev
  6. npm: @amazon-codecatalyst/blueprints.blueprint
  7. CWE-78: OS Command Injection
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.