Vulnerabilities in pkg:npm/@hulumi/drift

PACKAGE
Advisory Identifier: GHSA-32g3-35g9-wc9g
Advisory Summary

CVE-2026-48036 is a HIGH drift classifier fails open on vulnerability (CWE-755: Improper Handling of Exceptional Conditions) affecting @hulumi/drift libraries in the npm ecosystem. The issue involves drift classifier fails open on adapter errors and over-promotes mixed verdicts. Remediation is available by upgrading affected packages to version 1.4.0.

2 Known Advisory Record(s)
Package Vulnerability Intelligence

pkg:npm/@hulumi/drift

2 Known Advisory Record(s)

Vulnerability advisories affecting package pkg:npm/@hulumi/drift. Select an advisory below to view technical details or fixes.

Advisory ID CVE / NVD Severity Summary
GHSA-32g3-35g9-wc9g CVE-2026-48036 HIGH @hulumi/drift: Drift classifier fails open on adapter errors and over-promotes Mixed verdicts
GHSA-2ffm-hxrq-qqmm - HIGH @hulumi/drift: Orphan reconciler accepted externally supplied execute plans

CVE-2026-48036 at a Glance

CVE Identifier CVE-2026-48036
GHSA Identifier GHSA-32g3-35g9-wc9g
Severity HIGH
CVSS v3.1 Base Score N/A
CWE Classification CWE-755: Improper Handling of Exceptional Conditions
Affected Product @hulumi/drift
Package Ecosystem npm
Published Date
Last Updated

How to Fix CVE-2026-48036

To remediate this vulnerability, upgrade all affected @hulumi/drift dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

@hulumi/drift fixed: 1.4.0
npm install @hulumi/drift@1.4.0
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

npm ls @hulumi/drift

How to Check if You Are Affected

To determine whether your Node.js application is affected by CVE-2026-48036, inspect your project dependencies using npm:

npm ls @hulumi/drift

Analyze the terminal output to locate any version of @hulumi/drift in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.4.0), your application is affected.

Note: The npm ls @hulumi/drift command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-755: Improper Handling of Exceptional Conditions, where the product does not handle or incorrectly handles an exceptional condition. In @hulumi/drift, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

**Affected:** `@hulumi/drift` `< 1.4.0` — **Fixed in:** `1.4.0` — **Severity:** Medium — **CWE-755 (Improper Handling of Exceptional Conditions)** #### Summary `@hulumi/drift` runs four adapters that each ask a different question about whether a resource has drifted (Pulumi-state diff, provider-version change, CloudTrail event, etc.). A classifier combines the adapters' answers into a verdict like `None / none`, `ConsoleBreakGlass / high`, or `Mixed / high`, and caches the verdict for 6 hours by default. Two related bugs from one root cause — the classifier only read each adapter's `detected: true/false` field and ignored whether the adapter itself succeeded: 1. **Cached "all clear" on adapter failure.** When an adapter failed (e.g. transient network error from the Automation API), the classifier read `detected: false`, concluded "no drift", and cached the verdict as `None / none` for 6 hours. A single transient failure could mask real console-break-glass mutations for the rest of the window. 2. **Mixed verdicts without real evidence.** The `Mixed / high` and `ConsoleBreakGlass / high` verdicts (incident severity) could fire on the "the CloudTrail probe round-tripped successfully" signal rather than actual evidence that anything had been changed via the console. Normal provider-API churn could end up falsely escalated to incident severity. #### Impact Consumers running drift detection in CI / cron could see transient adapter failures silently cached as "all clear" — masking real attacks for up to six hours — or see ordinary provider-version churn falsely promoted to incident severity. Either way, the verdict source was unreliable for downstream incident workflows that gate on it. #### Patches Upgrade to `@hulumi/drift@1.4.0`. Classifier-only fix (the TLA+-verified 6-row verdict matrix is byte-identical): - adapter failures now fail closed to `Unknown / low`, and degraded verdicts are not written to the cache; - the `Mixed` / `ConsoleBreakGlass` promotion now requires real CloudTrail event evidence rather than probe liveness. #### Workarounds Setting `options.minConfidence: "medium"` on the classifier call prevents the degraded `None / none` from being cached (it doesn't meet the threshold), partially mitigating case (1). No workaround for case (2). #### Resources - [PR #178](https://github.com/kerberosmansour/hulumi/pull/178) (Cluster D); regression tests in `packages/drift/tests/classifier-fail-closed.test.ts`.

CVE-2026-48036 Affected @hulumi/drift Versions

1 component(s)
Fixed Versions:
1.4.0
Product / Package Ecosystem Affected Versions Fixed Version
@hulumi/drift
npm
< 1.4.0
1.4.0

References

Frequently Asked Questions

What is CVE-2026-48036?
CVE-2026-48036 is a security vulnerability in @hulumi/drift involving Drift classifier fails open on adapter errors and over-promotes Mixed verdicts under CWE-755: Improper Handling of Exceptional Conditions.
Which @hulumi/drift versions are affected?
Affected versions include releases prior to 1.4.0 across affected packages: @hulumi/drift.
What version fixes CVE-2026-48036?
Upgrading to 1.4.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is @hulumi/drift affected?
Yes, @hulumi/drift is affected in releases prior to 1.4.0. Upgrade your dependency to 1.4.0 or later.
What CWE is associated with CVE-2026-48036?
CVE-2026-48036 is classified under CWE-755: Improper Handling of Exceptional Conditions (The product does not handle or incorrectly handles an exceptional condition.).
How can I check npm dependencies for CVE-2026-48036?
Run the dependency tree command: 'npm ls @hulumi/drift'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-32g3-35g9-wc9g",
  "modified" : "2026-06-10T13:38:50Z",
  "published" : "2026-06-10T13:38:50Z",
  "aliases" : [ "CVE-2026-48036" ],
  "summary" : "@hulumi/drift: Drift classifier fails open on adapter errors and over-promotes Mixed verdicts",
  "details" : "**Affected:** `@hulumi/drift` `< 1.4.0` — **Fixed in:** `1.4.0` — **Severity:** Medium — **CWE-755 (Improper Handling of Exceptional Conditions)**\n\n#### Summary\n\n`@hulumi/drift` runs four adapters that each ask a different question about whether a resource has drifted (Pulumi-state diff, provider-version change, CloudTrail event, etc.). A classifier combines the adapters' answers into a verdict like `None / none`, `ConsoleBreakGlass / high`, or `Mixed / high`, and caches the verdict for 6 hours by default.\n\nTwo related bugs from one root cause — the classifier only read each adapter's `detected: true/false` field and ignored whether the adapter itself succeeded:\n\n1. **Cached \"all clear\" on adapter failure.** When an adapter failed (e.g. transient network error from the Automation API), the classifier read `detected: false`, concluded \"no drift\", and cached the verdict as `None / none` for 6 hours. A single transient failure could mask real console-break-glass mutations for the rest of the window.\n2. **Mixed verdicts without real evidence.** The `Mixed / high` and `ConsoleBreakGlass / high` verdicts (incident severity) could fire on the \"the CloudTrail probe round-tripped successfully\" signal rather than actual evidence that anything had been changed via the console. Normal provider-API churn could end up falsely escalated to incident severity.\n\n#### Impact\n\nConsumers running drift detection in CI / cron could see transient adapter failures silently cached as \"all clear\" — masking real attacks for up to six hours — or see ordinary provider-version churn falsely promoted to incident severity. Either way, the verdict source was unreliable for downstream incident workflows that gate on it.\n\n#### Patches\n\nUpgrade to `@hulumi/drift@1.4.0`. Classifier-only fix (the TLA+-verified 6-row verdict matrix is byte-identical):\n\n- adapter failures now fail closed to `Unknown / low`, and degraded verdicts are not written to the cache;\n- the `Mixed` / `ConsoleBreakGlass` promotion now requires real CloudTrail event evidence rather than probe liveness.\n\n#### Workarounds\n\nSetting `options.minConfidence: \"medium\"` on the classifier call prevents the degraded `None / none` from being cached (it doesn't meet the threshold), partially mitigating case (1). No workaround for case (2).\n\n#### Resources\n\n- [PR #178](https://github.com/kerberosmansour/hulumi/pull/178) (Cluster D); regression tests in `packages/drift/tests/classifier-fail-closed.test.ts`.",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:H/SA:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@hulumi/drift"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.4.0"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/kerberosmansour/hulumi/security/advisories/GHSA-32g3-35g9-wc9g"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kerberosmansour/hulumi/pull/178"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/kerberosmansour/hulumi"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-755" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-06-10T13:38:50Z",
    "nvd_published_at" : null
  }
}