CVE-2026-77426 — unleash-server
Fix: Unleash/unleash@7bb2829CVE-2026-77426 is a CWE-639 vulnerability in unleash-server. A fix is available for unleash-server — see the affected versions and patch details below.
Unleash: Missing await on permission check + cross-project IDOR in admin API
Exploitation Status
No confirmed exploitation observed yet
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-77426.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
How broadly this vulnerability is actually deployed: weekly install volume shows current usage, and reverse-dependency count shows how many other packages break if it stays unpatched.
unleash-servernpmDescription
Summary
Multiple authorization vulnerabilities in Unleash admin API, including a critical missing await that completely bypasses a permission check.
Vulnerability 1: Missing await on Permission Check (HIGH)
File: src/lib/features/segment/segment-controller.ts (line 345)
POST /api/admin/segments/strategies has permission: NONE at the route level. The handler performs its own check via this.accessService.hasPermission(), but omits the await keyword. Since hasPermission() is async (returns Promise<boolean>), the variable always receives a truthy Promise object. The if (!hasFeatureStrategyPermission) check never triggers.
// BUG: missing await - hasPermission() returns Promise<boolean>
const hasFeatureStrategyPermission = this.accessService.hasPermission(
req.user, UPDATE_FEATURE_STRATEGY, projectId, environmentId,
);
if (!hasFeatureStrategyPermission) { // Always false - Promise is truthy!
res.status(403).send();
return;
}
Impact: Any authenticated user can modify segment assignments on ANY strategy across ALL projects.
Fix: Add await: const hasFeatureStrategyPermission = await this.accessService.hasPermission(...)
Vulnerability 2: Cross-Project Variant Read (MEDIUM)
File: src/lib/routes/admin-api/project/variants.ts (line 213-223)
GET /api/admin/projects/:projectId/features/:featureName/environments/:environment/variants completely ignores projectId. getVariantsOnEnv() only uses featureName and environment.
Impact: Any authenticated user can read variant configs (names, weights, payloads) from any project.
Vulnerability 3: Cross-Project Strategy Read (MEDIUM)
File: src/lib/features/feature-toggle/feature-toggle-controller.ts (line 1107-1116)
GET .../strategies/:strategyId ignores all params except strategyId. Any authenticated user can read any strategy's full configuration.
Vulnerability 4: Cross-Project Environment Info Leak (MEDIUM)
File: src/lib/features/feature-toggle/feature-toggle-service.ts (line 1611)
getEnvironmentInfo() doesn't validate feature belongs to project. Compare with getFeature() which calls validateFeatureBelongsToProject().
Vulnerability 5: Cross-Project Tag Modification (LOW)
File: src/lib/features/feature-toggle/feature-toggle-controller.ts (line 576-596)
PUT /:projectId/tags accepts features array in body without validating they belong to projectId.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 📦npm | unleash-server | all versions | 8.0.3npm install unleash-server@8.0.3 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for unleash-server, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update unleash-server to 8.0.3 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-77426 is resolved across your whole dependency graph.
Workarounds
Put an independent control in front of the weakness: restrict the affected endpoint or interface to trusted networks, require an additional authentication factor or proxy-level check, and invalidate existing sessions and credentials in case the flaw has already been used.
Frequently Asked Questions
Is CVE-2026-77426 in your dependencies?
Find it across npm, including transitive dependencies.