Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify victim IAM role trusting multiple OIDC providers
-
DeliveryConfirm @hulumi/policies missed wildcard sub:
-
ExploitOpen fork PR with malicious workflow
-
ExecutionWorkflow requests GitHub OIDC token
-
Persistconfigure-aws-credentials assumes role
-
ImpactOperate in AWS account with role's permissions
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Incorrect comparison
|
| Exploitation Conditions | Exploitation requires a specific combination: (1) the victim uses @hulumi/policies < 1.4.0 as its IAM-policy validator, (2) the victim's IAM role trust policy specifies Principal.Federated as a JSON array containing the GitHub Actions OIDC provider ARN alongside at least one other federated provider, (3) the same trust policy contains a permissive wildcard sub: condition (e.g. matching any branch, any PR, or any repository) such that an untrusted GitHub Actions workflow run would satisfy it, and (4) the victim ships the role to production based on the false-clean policy report. The bug does not affect roles whose Federated principal is a single string, nor roles whose sub: condition is already tightly scoped; exploitation is also limited by the attacker's ability to trigger a workflow that runs against the affected role - typically via a fork PR or other untrusted workflow_run context in the victim's repository. |
| Impact | No CVSS vector was published, so attack-vector, complexity, and privilege metrics cannot be quoted directly; the GitHub advisory rates this High. EPSS, KEV, and SSVC data were not provided, indicating no public exploit identified at time of analysis and no confirmed in-the-wild use. The realistic risk is indirect but meaningful: the bug does not itself grant access - it causes a security-validation tool to under-report risky IAM trust policies, so its impact depends on whether downstream consumers (a) actually configure roles that trust multiple OIDC providers and (b) rely on @hulumi/policies as their gating control. Where both conditions hold, a wildcard sub: condition on a GitHub-OIDC-assumable role can be silently shipped, letting any forked-PR workflow assume the role - potentially with AdministratorAccess. Defenders should treat this as a control-failure / detection-gap issue rather than a direct exploitable vulnerability, prioritise upgrade in CI/CD policy pipelines, and audit existing IAM trust policies for multi-provider Federated arrays with wildcard sub: conditions. |
| Exploit ScenarioDerived | An engineer authors an IAM role whose trust policy federates to both the GitHub Actions OIDC provider and a second provider (e.g. Google), with a wildcard sub: condition such as repo:org/*:pull_request; @hulumi/policies < 1.4.0 fails to recognise the role as GitHub-OIDC-assumable and reports the stack as compliant, including missing the AdministratorAccess blast-radius warning. An external contributor then opens a pull request from a fork that triggers a workflow which calls aws-actions/configure-aws-credentials against the role, receives a valid OIDC token matching the wildcard sub:, and assumes the role - gaining whatever permissions (potentially AdministratorAccess) it grants in the target AWS account. No public exploit code is identified at time of analysis, but the technique (forked-PR OIDC abuse against permissive sub: conditions) is well-documented in AWS/GitHub OIDC hardening guidance. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 10, 2026
Detection bypass in @hulumi/policies versions prior to 1.4.0 allows IAM trust policies that list multiple OIDC federated providers to evade the G_OIDC_1 and G_OIDC_2 policy checks for GitHub Actions OIDC roles. Consumers of HulumiHardeningPack or HulumiGithubHardeningPack can therefore ship roles with wildcard sub: conditions - assumable by untrusted forked-PR workflows - while the validator falsely reports compliance, including missing the AdministratorAccess blast-radius flag. No public exploit identified at time of analysis, and there is no CISA KEV listing.
RemediationAI
Vendor-released patch: @hulumi/policies 1.4.0 - upgrade the npm dependency to 1.4.0 or later (npm install @hulumi/policies@^1.4.0 or equivalent lockfile update), per the GHSA advisory at https://github.com/kerberosmansour/hulumi/security/advisories/GHSA-g759-4pxw-6692 and PR https://github.com/kerberosmansour/hulumi/pull/178. The vendor explicitly states no reliable workaround exists, so if an immediate upgrade is impossible, compensating controls are to manually audit every IAM role trust policy generated or validated by the hardening packs for a Principal.Federated array containing multiple OIDC providers and any wildcard or overly-broad token.actions.githubusercontent.com sub: condition (e.g. repo:*:* or repo:org/*:pull_request), and to tighten the sub: condition to specific repositories, branches, or environments - accepting the operational cost of explicitly enumerating trusted refs. As an additional control, restrict role assumption for forked-PR workflows by gating sensitive workflows behind protected GitHub Environments with required reviewers (the same pattern adopted in the upstream PR).
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected component is @hulumi/policies, an npm-distributed policy/linting library (pkg:npm/@hulumi_policies) that evaluates AWS IAM trust policies generated by Pulumi-based Hulumi hardening packs. The root cause is CWE-697 (Incorrect Comparison): when an IAM trust policy's Principal.Federated value is a JSON array (multiple OIDC providers, e.g. GitHub Actions plus Google Workload Identity), the GitHub-OIDC matcher coerced the array into a single comma-joined string and then evaluated only the leading substring, so the GitHub OIDC issuer ARN (token.actions.githubusercontent.com) was not recognised unless it appeared first. As a result, both G_OIDC_1 (wildcard sub: condition detection) and G_OIDC_2 (AdministratorAccess blast-radius check on GitHub-OIDC roles) short-circuited and skipped their substantive checks. The fix in 1.4.0 replaces the string-coerced comparison with an iteration over each element of the providers list.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N
Primary rating from Vendor (https://github.com/kerberosmansour/hulumi) · only source for this CVE.
CVSS VectorVendor: https://github.com/kerberosmansour/hulumi
Lifecycle Timeline
1DescriptionCVE.org
Affected: @hulumi/policies < 1.4.0 - Fixed in: 1.4.0 - Severity: High - CWE-697 (Incorrect Comparison)
Summary
AWS IAM trust policies can list more than one federated identity provider - for example, a role that accepts BOTH GitHub Actions OIDC and Google's OIDC. The G_OIDC_1 and G_OIDC_2 policy rules are supposed to flag IAM roles whose GitHub-OIDC trust is too permissive (e.g. wildcard sub: conditions that would let any branch or any pull request assume the role).
The bug: when the role's Principal.Federated field was a JSON array of multiple providers, the rules failed to recognise that GitHub Actions was one of them. The providers list was coerced into a single comma-joined string, the matcher only looked at the start, and the GitHub OIDC hostname was lost in the join. Both rules concluded "this isn't a GitHub-OIDC role" and skipped the wildcard check.
Impact
A trust policy that listed the real GitHub OIDC provider ARN alongside any second provider would slip past both detectors. Consumers using HulumiHardeningPack or HulumiGithubHardeningPack could ship an IAM role with wildcard sub: conditions (allowing untrusted PRs from forks to assume the role) while their policy validation reported the stack as compliant. The G_OIDC_2 detector also failed to mark such roles for the cluster-admin / AdministratorAccess blast-radius check.
Patches
Upgrade to @hulumi/policies@1.4.0. The shared GitHub-OIDC-provider matcher now correctly walks lists of providers - if any element of the list is the real GitHub OIDC ARN, the role is treated as GitHub-OIDC-assumable and the wildcard / blast-radius checks apply.
Workarounds
None reliable - upgrade is the fix.
Resources
- PR #178 (Cluster A); regression tests at
packages/policies/tests/github/{g-oidc-2,github-oidc-issuer}.test.ts.
Executive ViewAI
A detection bypass in @hulumi/policies prior to version 1.4.0 allows GitHub Actions OIDC roles to ship with overly permissive conditions while the validator falsely reports compliance, potentially enabling untrusted forked workflows to assume administrative access. Organizations relying on this tool for policy enforcement risk deploying roles that violate security intent without detection.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-48723
GHSA-g759-4pxw-6692
NVD
CVE.org
EPSS
Exploit-DB