CVE-2026-48036: @hulumi/drift Drift Classifier Fails Open On Vulnerability
HIGHCVE-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.
CVE-2026-48036 at a Glance
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.
npm install @hulumi/drift@1.4.0
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
CVE-2026-48036 Affected @hulumi/drift Versions
1 component(s)| 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?
Which @hulumi/drift versions are affected?
What version fixes CVE-2026-48036?
Is @hulumi/drift affected?
What CWE is associated with CVE-2026-48036?
How can I check npm dependencies for CVE-2026-48036?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"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
}
}