Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as org-A manager with CA permission
-
DeliveryEnumerate sequential CA integer IDs
-
ExploitRequest /api/v1/controller/ca/<id>/crl cross-org
-
ExecutionReceive org-B CRL bypassing org scope
-
ImpactDisclose issuer info and revoked serials
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated OpenWISP Controller account that is an organization manager holding CA view (model) permission (PR:L), and a multi-tenant deployment containing at least one CA in an organization the attacker does not manage so cross-organization enumeration of sequential integer CA IDs is meaningful. The vulnerable path is specifically GET /api/v1/controller/ca/<integer-id>/crl handled by CrlDownloadView.retrieve; the sibling CA detail endpoint is correctly scoped and returns 404. Limiting factors that reduce real-world impact: the leak is confined to CRL contents (CA issuer data and revoked certificate serial numbers) with no private-key disclosure and no modification; and per the advisory, django-x509 serves CRLs publicly by default unless DJANGO_X509_CRL_PROTECTED=True, so only deployments that have explicitly enabled CRL protection experience a genuine new confidentiality exposure from this REST API behavior. |
| Impact | This is a genuine but low-severity authorization flaw (CWE-862, Missing Authorization) rather than a high-urgency issue. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N, 5.3 Medium) is self-consistent with the description: network-reachable, low attack complexity, but requiring PR:L - an authenticated organization manager holding CA view permission - with only low confidentiality impact and no integrity or availability impact. No EPSS score, SSVC automatable/technical-impact decision, or KEV status was supplied; the only priority signal is the vuln.today Decision label 'this_month', which aligns with a patch-this-cycle posture rather than act_now/emergency. There is no KEV listing and no PoC or exploit reference among the inputs, so exploitation is not demonstrated. Critically, the vendor advisory notes django-x509 exposes CRLs publicly by default unless DJANGO_X509_CRL_PROTECTED=True, meaning default deployments gain no new confidentiality exposure from this bug - the real exposure is confined to multi-tenant deployments that have explicitly enabled CRL protection. Net: a real authorization-boundary defect worth patching on a normal cycle, not a high-CVSS-but-overrated emergency. |
| Exploit ScenarioDerived | A legitimate organization manager in a multi-tenant OpenWISP Controller instance, holding CA view permission for organization A, enumerates sequential integer CA IDs against GET /api/v1/controller/ca/<id>/crl and requests a CA belonging to organization B. Because the CRL endpoint resolves the CA directly rather than through the organization-scoped queryset, the attacker receives organization B's CRL, disclosing CA issuer information and revoked certificate serial numbers. No public exploit identified at time of analysis; exploitation requires valid authenticated manager credentials and the attack complexity is low once authenticated. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
OpenWISP Controller versions 1.0.0 through 1.3.1 contain a missing-authorization flaw (CWE-862) in the CRL download endpoint: an authenticated organization manager holding CA view permission can retrieve another organization's certificate revocation list by iterating sequential CA identifiers. The exposure is limited to CRL contents - CA issuer information and revoked certificate serial numbers - with no private-key disclosure and no ability to modify data, and the sibling CA detail endpoint remains correctly scoped. It is fixed in 1.3.2; exploitation requires a multi-tenant deployment, and because django-x509 serves CRLs publicly by default unless DJANGO_X509_CRL_PROTECTED is enabled, only deployments that explicitly protect CRLs gain a new confidentiality exposure. Severity is low (CVSS 5.3 as published; assessed 3.1 vector AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N), no public exploit code is identified, and there is no KEV listing.
RemediationAI
Upgrade to OpenWISP Controller 1.3.2, the vendor-released fix, as documented in advisory GHSA-9gh4-xw24-9xh5 and the release at https://github.com/openwisp/openwisp-controller/releases/tag/1.3.2; the corrective commits are 90ded783267aa11b89768b0ec9ae69895cc3730c and 9e1869e17734a0f34bc428622d463c1a8c230720 (queryset = Ca.objects.all() plus self.get_object() in CrlDownloadView.retrieve, with a multitenancy regression test). If upgrading immediately is not possible, reduce exposure by auditing which accounts hold CA view permission and organization manager status and removing it where unnecessary - this narrows the set of users who can enumerate sequential CA IDs at the cost of restricting legitimate PKI administration. Deployments that have set DJANGO_X509_CRL_PROTECTED = True should treat their CRLs as potentially disclosed cross-tenant until patched, while deployments on the default setting already serve CRLs publicly, so this REST path adds no new confidentiality exposure. There is no evidence of in-the-wild exploitation, so the vendor's own guidance to update is the complete fix; the advisory does not specify any additional compensating configuration.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
OpenWISP Controller is a Django-based network and WiFi controller that includes a PKI module built on django-x509 for managing certificate authorities and certificates. In the REST API, CrlDownloadView inherits ProtectedAPIMixin, which enforces authentication and model-level permission (an organization manager with CA view permission), and it is supposed to be organization-scoped like the rest of the PKI API via FilterByOrganizationManaged. The retrieve() method instead resolved the requested CA directly with get_object_or_404(Ca, pk=kwargs["pk"]), skipping both the organization-scoped queryset and any object-level permission check; the upstream fix changes the view's queryset from Ca.objects.none() to Ca.objects.all() and replaces the direct lookup with self.get_object(), restoring the standard scoped retrieval path, and adds a multitenancy regression test covering same-organization CA (200), other-organization CA (404) and shared/global CA (200). Root cause is CWE-862 Missing Authorization - an object-level authorization boundary not applied to a resource identified by a predictable sequential integer - not a cryptographic weakness: CRLs are public artifacts by design, and django-x509 publishes them publicly unless DJANGO_X509_CRL_PROTECTED = True.
Know when Openwisp Controller gets its next vulnerability
- 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:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Network REST endpoint with low complexity but requires an authenticated org manager with CA view permission (PR:L); only low confidentiality impact (CRL metadata), no integrity or availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
OpenWISP Controller is a network and WiFi controller for provisioning, configuration management, updates, and PKI management. From 1.0.0 until 1.3.2, the GET /api/v1/controller/ca/<integer-id>/crl endpoint allows an authenticated organization manager with CA view permission to retrieve another organization's certificate revocation list by requesting its sequential CA identifier. CrlDownloadView.retrieve resolves the CA directly instead of using the organization-scoped object retrieval enforced by FilterByOrganizationManaged, bypassing the endpoint's intended authorization boundary. The response can disclose CA issuer information and revoked certificate serial numbers, but it does not expose CA private keys or allow modification. This issue is fixed in version 1.3.2.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-111234
NVD
CVE.org
EPSS
GitHub
Exploit-DB