CVE-2026-82857 carries a 9.8 CVSS v3.1 base score for an over-permissive IAM policy in the hulumi project’s own AWS sandbox account — a resource nobody who installs hulumi has, described with a version range that implies they do.
What happened
NVD published two CVE records for the open-source project kerberosmansour/hulumi on Monday, August 31, 2026, both at 9:17 a.m. UTC, both assigned by VulnCheck as CNA, and both scored 9.8 CRITICAL on CVSS v3.1 and 9.3 CRITICAL on CVSS v4.0.
CVE-2026-82856 is a real defect in shipped code. NVD carries the description verbatim: “@hulumi/policies versions before 1.3.2 fail to properly validate set-qualified AWS IAM condition operators in GitHub OIDC trust policies. Attackers can use ForAnyValue:StringLike operators to hide wildcard GitHub Actions OIDC subject conditions from security guardrails.” The package is a policy inspector. Its job is to look at an AWS IAM trust policy and refuse the unsafe ones. Before 1.3.2 it matched only the bare StringLike and StringEquals condition operator keys, so a policy that wrote the same condition as ForAnyValue:StringLike sailed past the check — and a wildcard in a GitHub Actions OIDC sub claim is the condition that decides which repositories, branches, and forks may assume an AWS role. A guardrail that can be stepped around by spelling the operator differently is worth a CVE.
CVE-2026-82857 is a different kind of thing. Its NVD description reads: “hulumi versions before v1.3.2 contain a privilege escalation vulnerability in the weekly integration IAM policy that allows role lifecycle operations on af-e2e-* roles without sufficient boundary restrictions. Attackers with the documented principal can create persistent higher-privilege roles in the sandbox account.”
The weekly integration IAM policy. The sandbox account. The af-e2e-* role prefix. These are the project’s own continuous-integration plumbing. The maintainer’s advisory, GHSA-35qr-vx94-m5x3, describes the fix as removing unnecessary inline-policy and trust-update permissions and updating the documentation that recommended them. The affected resource is an IAM policy in an AWS account the project controls, and the qualifying condition is stated in the description itself: “Attackers with the documented principal.”
Nothing about that reaches a downstream user. Installing hulumi 1.3.1 does not create the weekly integration policy in your account. It does not create af-e2e-* roles. It does not grant you, or anyone attacking you, the documented principal. The exposure described is the maintainer’s CI sandbox, and it was fixed there.
The record does not say that. NVD lists vendor kerberosmansour, product hulumi, and a vulnerable range of versions 0 through 1.3.1, fixed in 1.3.2 — the standard shape of a record that means “upgrade or you are exposed.” The CVSS v3.1 vector is AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. PR:N asserts that no privileges are required, in a record whose own description requires the attacker to hold a specific documented AWS principal. Those two statements cannot both be true.
Two smaller record notes. CVE-2026-82856 was published on August 31, 2026 for a defect the maintainer disclosed publicly on May 15, 2026 in GHSA-q2f7-m237-v562, which GitHub reviewed on May 21, 2026 — the CVE arrives 108 days after public disclosure, and the GitHub advisory still shows “No known CVE.” And the two records give different CVSS v4.0 vectors for the same flaw: GitHub’s ends VC:H/VI:H/VA:N, VulnCheck’s ends VC:H/VI:H/VA:H. Both compute to 9.3, so the disagreement over whether availability is affected at all leaves no trace in the number anyone reads.
On scale: @hulumi/policies recorded 4,739 downloads in the month ending August 29, 2026, per the npm registry’s own download API. This is a small package, and saying so is not a dismissal — it is the number that was missing.
Why it matters
This is the third batch of VulnCheck-assigned CVEs on small open-source projects that this site has had to check in three days, after the MCP server batch on August 30 and the MCPHub batch on August 31. The pattern across all three is the same, and it is worth naming plainly rather than repeating story by story: months-old maintainer advisories are being converted into CVE records in bulk, at CRITICAL scores, with version ranges and attack vectors that describe a more dangerous and more general situation than the underlying advisory does.
Bulk CVE assignment is not a bad thing in itself. Plenty of real defects sit in GitHub advisories for months with no CVE, invisible to every scanner that keys on CVE IDs, and a CNA willing to do that unglamorous work is doing the ecosystem a favor. CVE-2026-82856 is a good example.
The problem is what happens when the same pipeline meets something that is not a product defect. A CVE record is not a description; it is an instruction to machinery. Scanners read the version range and tell you that you are running vulnerable software. Dependency bots read it and open a pull request. Vendor-risk questionnaires read the score and ask you to attest that you have remediated all criticals. None of that machinery reads the description, and the description is the only place CVE-2026-82857 says the exposure is somebody else’s sandbox.
So the cost is not that a maintainer’s CI hygiene got publicized. It is that everyone running hulumi will be told, by tools they trust, that they have a critical remotely exploitable vulnerability requiring no privileges — and when they read the advisory and find it does not apply to them, they learn that critical findings from this source can be safely ignored. That lesson generalizes. It will be applied next time to CVE-2026-82856, which does apply to them, and which is the one they should actually act on. Both records came out of the same batch at the same minute with the same score. Nothing in the metadata distinguishes the one that matters.
PR:N is where this becomes concrete rather than philosophical. Privileges Required is not decoration; it is the field that separates “anyone on the internet” from “an insider with a specific credential,” and it is doing most of the work in the jump from a serious score to a 9.8. Setting it to None in a record whose description begins “Attackers with the documented principal” is not a judgment call about which reasonable people disagree. The description contradicts the vector, in the same record, in adjacent fields.
There is a defensible way to publish an incident like this one. If a maintainer wants to disclose that their own CI account was over-permissioned, a repository advisory does that honestly, and hulumi’s does. What a CVE adds is a claim about affected installed versions, and where there are none, the honest range is empty. GHSA-35qr-vx94-m5x3 did not resolve in GitHub’s global Advisory Database when checked for this story; the repository is the correct home for a finding about a project’s own infrastructure.
What to do
If you use @hulumi/policies: upgrade to 1.3.2 or later. CVE-2026-82856 is real and the fix is in that release. Then audit the trust policies the old inspector approved: it is not enough to fix the inspector if it already waved through a policy containing a set-qualified wildcard. Grep your IAM trust policies for ForAnyValue: and ForAllValues: prefixes on StringLike and StringEquals, and check every GitHub OIDC sub condition for wildcards that widen the claim beyond the specific repository and ref you meant to trust.
More generally, on GitHub OIDC to AWS: a trust policy that matches repo:org/name:* trusts every branch, tag, and pull request in that repository, including branches a fork contributor can create. Pin to the ref you mean — repo:org/name:ref:refs/heads/main — or to a named environment, and confirm the audience condition is present and exact.
If CVE-2026-82857 appears in your scanner: it describes the hulumi project’s own AWS sandbox, not your installation. Upgrading to 1.3.2 will clear the finding because the version range says so, and there is no harm in upgrading. But do not treat it as evidence you were exposed, and do not let it set your expectations for the record next to it.
If you run a CNA: the version range and the CVSS vector are the two fields that reach automation. When the description names a precondition — a specific principal, an internal account, a non-default deployment — the vector has to reflect it.
Sourcing note
Both CVE records were read from the NVD API at services.nvd.nist.gov/rest/json/cves/2.0, which supplied the descriptions quoted above, the CVSS v3.1 and v4.0 vectors and their scoring source ([email protected]), the CWE assignments (CWE-284 and CWE-269), the affected version ranges, and the publication timestamps of August 31, 2026 at 9:17 a.m. UTC. Neither record carried cisaExploitAdd, cisaActionDue, or cisaRequiredAction; neither vulnerability is in the KEV catalog and no federal deadline attaches to either.
GHSA-q2f7-m237-v562 was read in the GitHub Advisory Database, which gives its publication date as May 15, 2026, its review date as May 21, 2026, a Critical severity, a CVSS v4.0 vector ending VA:N, and “No known CVE.” GHSA-35qr-vx94-m5x3 was read at its repository advisory URL; the corresponding global Advisory Database page returned 404 when checked. The download figure is from the npm registry download-counts API for the period ending August 29, 2026. Both CVSS v4.0 vectors were recomputed locally and both yield 9.3, which is stated above rather than inferred.
Unresolved: whether VulnCheck intends CVE-2026-82857 to describe a downstream-reachable condition that the description does not convey, and whether the PR:N assignment was deliberate. VulnCheck was not contacted for this story, and its advisory pages were read as published. The maintainer was not contacted. No exploitation of either issue has been reported by anyone, and none is asserted here.

