CVE-2026-71317
Lemur: Sub-CA creation never checks `AuthorityPermission` on the parent authority
Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/authorities with type=subca did not require AuthorityPermission on the parent authority when ADMIN_ONLY_AUTHORITY_CREATION was false. AssociatedAuthoritySchema resolved the caller-supplied parent and passed it through authority creation to cryptography-issuer, which used the parent authority_certificate.private_key to sign a new intermediate. Any authenticated non-read-only user in that supported configuration could chain a sub-CA to an internal root for which the user held no role. The resulting intermediate could issue trusted certificates and its private key could be used outside Lemur, bypassing normal issuance controls. The fix checks AuthorityPermission on every supplied parent before invoking the issuer. This issue is fixed in version 1.9.3.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.5
Lemur: Sub-CA creation never checks `AuthorityPermission` on the parent authority
Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/authorities with type=subca did not require AuthorityPermission on the parent authority when ADMIN_ONLY_AUTHORITY_CREATION was false. AssociatedAuthoritySchema resolved the caller-supplied parent and passed it through authority creation to cryptography-issuer, which used the parent authority_certificate.private_key to sign a new intermediate. Any authenticated non-read-only user in that supported configuration could chain a sub-CA to an internal root for which the user held no role. The resulting intermediate could issue trusted certificates and its private key could be used outside Lemur, bypassing normal issuance controls. The fix checks AuthorityPermission on every supplied parent before invoking the issuer. This issue is fixed in version 1.9.3.
- Record
CVE-2026-71317- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
EUVDEUVD-2026-61156
6.5
Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/authorities with type=subca did not require AuthorityPermission on the parent authority when ADMIN_ONLY_AUTHORITY_CREATION was false. AssociatedAuthoritySchema resolved the caller-supplied parent and passed it through authority creation to cryptography-issuer, which used the parent authority_certificate.private_key to sign a new intermediate. Any authenticated non-read-only user in that supported configuration could chain a sub-CA to an internal root for which the user held no role. The resulting intermediate could issue trusted certificates and its private key could be used outside Lemur, bypassing normal issuance controls. The fix checks AuthorityPermission on every supplied parent before invoking the issuer. This issue is fixed in version 1.9.3.
- Record
EUVD-2026-61156- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-g7p5-89mh-248h
6.5
Lemur: Sub-CA creation never checks `AuthorityPermission` on the parent authority
Summary
Repo under test: https://github.com/Netflix/lemur
When ADMIN_ONLY_AUTHORITY_CREATION=False (an explicitly supported and documented configuration), POST /api/1/authorities with type=subca never verifies that the caller holds AuthorityPermission on the supplied parent authority. The parent field is resolved by AssociatedAuthoritySchema via a raw fetch_objects(Authority, data) lookup, then passed straight through service.create → mint → cryptography-issuer.create_authority, which loads options["parent"].authority_certificate.private_key and signs a brand-new intermediate CA on the caller's behalf.
Any authenticated non-read-only user can therefore mint a sub-CA chained to any internal root whose private key Lemur holds — including roots they hold no role on — attach a role they already belong to, and immediately issue or offline-sign trusted leaf certificates for arbitrary names.
Affected route
POST /api/1/authorities (with type=subca)
Affected code
lemur/authorities/views.py:231— gates only onAuthorityCreatorPermission()+StrictRolePermission(); noAuthorityPermissionondata['parent']lemur/authorities/schemas.py:58—parent = fields.Nested(AssociatedAuthoritySchema);validate_subcaonly checks presencelemur/schemas.py:107—AssociatedAuthoritySchema.get_object→fetch_objects(Authority, data)resolves any authority by id/name with no permission checklemur/plugins/lemur_cryptography/plugin.py:40—private_key = options["authority"].authority_certificate.private_key(set fromoptions["parent"]) signs the new intermediatelemur/auth/permissions.py:62—AuthorityCreatorPermissionbecomes always-allow whenADMIN_ONLY_AUTHORITY_CREATION=Falselemur/certificates/views.py:538—is_private_authority(true forcryptography-issuer) skipsUSER_DOMAIN_AUTHORIZATION_PROVIDERfor subsequent leaf issuance
Impact
In deployments that set ADMIN_ONLY_AUTHORITY_CREATION=False to enable self-service CA creation, any authenticated non-read-only user — with zero permission on a given internal root CA — can obtain a working intermediate CA chained to that root. They can then:
- Issue TLS certificates for arbitrary names trusted by every relying party that trusts the internal root, bypassing
LEMUR_ALLOWED_DOMAINS, sensitive-domain flags, and the per-user domain-authorization plugin. - Export the sub-CA private key and sign end-entity certificates entirely outside Lemur, defeating all in-product issuance controls.
This converts "can create a self-contained test CA" into "can mint trusted certs under any internal PKI root in the organisation". The ADMIN_ONLY_AUTHORITY_CREATION documentation does not warn operators of this consequence.
Root cause
AuthoritiesList.post evaluates AuthorityCreatorPermission (a global "may create authorities" flag) and StrictRolePermission, but never evaluates AuthorityPermission(parent.id, parent.roles) against the caller-supplied parent. AssociatedAuthoritySchema is a pure lookup schema with no authz hook, and neither authorities.service.create nor mint re-check before invoking issuer_plugin.create_authority(options). The bundled cryptography-issuer then uses the parent's stored private key directly.
Validated evidence
Static trace, confirmed by code inspection (validation status: CONFIRMED):
parentis loaded viaAssociatedAuthoritySchema(rawfetch_objects), passed unchecked…
- Record
GHSA-g7p5-89mh-248h- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
NVD
6.5
Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/authorities with type=subca did not require AuthorityPermission on the parent authority when ADMIN_ONLY_AUTHORITY_CREATION was false. AssociatedAuthoritySchema resolved the caller-supplied parent and passed it through authority creation to cryptography-issuer, which used the parent authority_certificate.private_key to sign a new intermediate. Any authenticated non-read-only user in that supported configuration could chain a sub-CA to an internal root for which the user held no role. The resulting intermediate could issue trusted certificates and its private key could be used outside Lemur, bypassing normal issuance controls. The fix checks AuthorityPermission on every supplied parent before invoking the issuer. This issue is fixed in version 1.9.3.
- Record
CVE-2026-71317- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
OSV
6.5
Lemur: Sub-CA creation never checks `AuthorityPermission` on the parent authority
Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/authorities with type=subca did not require AuthorityPermission on the parent authority when ADMIN_ONLY_AUTHORITY_CREATION was false. AssociatedAuthoritySchema resolved the caller-supplied parent and passed it through authority creation to cryptography-issuer, which used the parent authority_certificate.private_key to sign a new intermediate. Any authenticated non-read-only user in that supported configuration could chain a sub-CA to an internal root for which the user held no role. The resulting intermediate could issue trusted certificates and its private key could be used outside Lemur, bypassing normal issuance controls. The fix checks AuthorityPermission on every supplied parent before invoking the issuer. This issue is fixed in version 1.9.3.
- Record
CVE-2026-71317- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
OSVGHSA-g7p5-89mh-248h
6.5
Lemur: Sub-CA creation never checks `AuthorityPermission` on the parent authority
Summary
Repo under test: https://github.com/Netflix/lemur
When ADMIN_ONLY_AUTHORITY_CREATION=False (an explicitly supported and documented configuration), POST /api/1/authorities with type=subca never verifies that the caller holds AuthorityPermission on the supplied parent authority. The parent field is resolved by AssociatedAuthoritySchema via a raw fetch_objects(Authority, data) lookup, then passed straight through service.create → mint → cryptography-issuer.create_authority, which loads options["parent"].authority_certificate.private_key and signs a brand-new intermediate CA on the caller's behalf.
Any authenticated non-read-only user can therefore mint a sub-CA chained to any internal root whose private key Lemur holds — including roots they hold no role on — attach a role they already belong to, and immediately issue or offline-sign trusted leaf certificates for arbitrary names.
Affected route
POST /api/1/authorities (with type=subca)
Affected code
lemur/authorities/views.py:231— gates only onAuthorityCreatorPermission()+StrictRolePermission(); noAuthorityPermissionondata['parent']lemur/authorities/schemas.py:58—parent = fields.Nested(AssociatedAuthoritySchema);validate_subcaonly checks presencelemur/schemas.py:107—AssociatedAuthoritySchema.get_object→fetch_objects(Authority, data)resolves any authority by id/name with no permission checklemur/plugins/lemur_cryptography/plugin.py:40—private_key = options["authority"].authority_certificate.private_key(set fromoptions["parent"]) signs the new intermediatelemur/auth/permissions.py:62—AuthorityCreatorPermissionbecomes always-allow whenADMIN_ONLY_AUTHORITY_CREATION=Falselemur/certificates/views.py:538—is_private_authority(true forcryptography-issuer) skipsUSER_DOMAIN_AUTHORIZATION_PROVIDERfor subsequent leaf issuance
Impact
In deployments that set ADMIN_ONLY_AUTHORITY_CREATION=False to enable self-service CA creation, any authenticated non-read-only user — with zero permission on a given internal root CA — can obtain a working intermediate CA chained to that root. They can then:
- Issue TLS certificates for arbitrary names trusted by every relying party that trusts the internal root, bypassing
LEMUR_ALLOWED_DOMAINS, sensitive-domain flags, and the per-user domain-authorization plugin. - Export the sub-CA private key and sign end-entity certificates entirely outside Lemur, defeating all in-product issuance controls.
This converts "can create a self-contained test CA" into "can mint trusted certs under any internal PKI root in the organisation". The ADMIN_ONLY_AUTHORITY_CREATION documentation does not warn operators of this consequence.
Root cause
AuthoritiesList.post evaluates AuthorityCreatorPermission (a global "may create authorities" flag) and StrictRolePermission, but never evaluates AuthorityPermission(parent.id, parent.roles) against the caller-supplied parent. AssociatedAuthoritySchema is a pure lookup schema with no authz hook, and neither authorities.service.create nor mint re-check before invoking issuer_plugin.create_authority(options). The bundled cryptography-issuer then uses the parent's stored private key directly.
Validated evidence
Static trace, confirmed by code inspection (validation status: CONFIRMED):
parentis loaded viaAssociatedAuthoritySchema(rawfetch_objects), passed unchecked…
- Record
GHSA-g7p5-89mh-248h- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
OSVPYSEC-2026-3677
6.5
Lemur: Sub-CA creation never checks `AuthorityPermission` on the parent authority
Summary
Repo under test: https://github.com/Netflix/lemur
When ADMIN_ONLY_AUTHORITY_CREATION=False (an explicitly supported and documented configuration), POST /api/1/authorities with type=subca never verifies that the caller holds AuthorityPermission on the supplied parent authority. The parent field is resolved by AssociatedAuthoritySchema via a raw fetch_objects(Authority, data) lookup, then passed straight through service.create → mint → cryptography-issuer.create_authority, which loads options["parent"].authority_certificate.private_key and signs a brand-new intermediate CA on the caller's behalf.
Any authenticated non-read-only user can therefore mint a sub-CA chained to any internal root whose private key Lemur holds — including roots they hold no role on — attach a role they already belong to, and immediately issue or offline-sign trusted leaf certificates for arbitrary names.
Affected route
POST /api/1/authorities (with type=subca)
Affected code
lemur/authorities/views.py:231— gates only onAuthorityCreatorPermission()+StrictRolePermission(); noAuthorityPermissionondata['parent']lemur/authorities/schemas.py:58—parent = fields.Nested(AssociatedAuthoritySchema);validate_subcaonly checks presencelemur/schemas.py:107—AssociatedAuthoritySchema.get_object→fetch_objects(Authority, data)resolves any authority by id/name with no permission checklemur/plugins/lemur_cryptography/plugin.py:40—private_key = options["authority"].authority_certificate.private_key(set fromoptions["parent"]) signs the new intermediatelemur/auth/permissions.py:62—AuthorityCreatorPermissionbecomes always-allow whenADMIN_ONLY_AUTHORITY_CREATION=Falselemur/certificates/views.py:538—is_private_authority(true forcryptography-issuer) skipsUSER_DOMAIN_AUTHORIZATION_PROVIDERfor subsequent leaf issuance
Impact
In deployments that set ADMIN_ONLY_AUTHORITY_CREATION=False to enable self-service CA creation, any authenticated non-read-only user — with zero permission on a given internal root CA — can obtain a working intermediate CA chained to that root. They can then:
- Issue TLS certificates for arbitrary names trusted by every relying party that trusts the internal root, bypassing
LEMUR_ALLOWED_DOMAINS, sensitive-domain flags, and the per-user domain-authorization plugin. - Export the sub-CA private key and sign end-entity certificates entirely outside Lemur, defeating all in-product issuance controls.
This converts "can create a self-contained test CA" into "can mint trusted certs under any internal PKI root in the organisation". The ADMIN_ONLY_AUTHORITY_CREATION documentation does not warn operators of this consequence.
Root cause
AuthoritiesList.post evaluates AuthorityCreatorPermission (a global "may create authorities" flag) and StrictRolePermission, but never evaluates AuthorityPermission(parent.id, parent.roles) against the caller-supplied parent. AssociatedAuthoritySchema is a pure lookup schema with no authz hook, and neither authorities.service.create nor mint re-check before invoking issuer_plugin.create_authority(options). The bundled cryptography-issuer then uses the parent's stored private key directly.
Validated evidence
Static trace, confirmed by code inspection (validation status: CONFIRMED):
parentis loaded viaAssociatedAuthoritySchema(rawfetch_objects), passed unchecked…
- Record
PYSEC-2026-3677- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N - Updated
- 2026-11-02
Affected products
Affected packages
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-71317 is a medium vulnerability (CVSS 6.5) in Netflix Lemur, published August 18, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.10%, the 1st percentile. Fixed in lemur 1.9.3.
References
github.com/Netflix/lemur/security/advisories/GHSA-g7p5-89mh-248h
github.com/Netflix/lemur/commit/8669011203ca3dd89d9e39bab9ef6850eca723f9
github.com/Netflix/lemur/releases/tag/v1.9.3
github.com/advisories/GHSA-g7p5-89mh-248h
github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71317.json
nvd.nist.gov/vuln/detail/CVE-2026-71317
github.com/Netflix/lemur
pypi.org/project/lemur
Left out here: the rest of 3 source descriptions. The JSON record has them.