Skip to content
Heist/ feed
Back to feed
High

Lemur: Any user can revoke arbitrary certificates at the CA by uploading a duplicate record and revoking it

Type: advisorySources: OSV

Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/certificates/upload allowed a non-read-only user to create a duplicate row using another certificate body, authority_id, serial, or external_id without requiring permission on the underlying authority. PUT /api/1/certificates//revoke authorized the caller against only the selected Lemur row, so the creator of the duplicate bypassed CertificatePermission. The duplicate had no cert.endpoints, which also bypassed the safeguard that prevents revocation of deployed certificates. Issuer plugins then revoked the real CA-side certificate using certificate.body or external_id under the stored authority credentials. An attacker could therefore revoke arbitrary managed certificates and cause fleet-wide TLS denial of service. The fix rejects duplicate authority_id and serial identities, requires authority access on upload, and checks every matching row during revocation. This issue is fixed in version 1.9.3.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-71417
Confirmed fixed CVEs
Not specified
Updated in this feed
4 Nov 2026, 03:41 UTC · Revision 1

Source evidence

Lemur: Any user can revoke arbitrary certificates at the CA by uploading a duplicate record and revoking it

core-osv · Original source

Published 18 Aug 2026, 19:12 UTC

Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/certificates/upload allowed a non-read-only user to create a duplicate row using another certificate body, authority_id, serial, or external_id without requiring permission on the underlying authority. PUT /api/1/certificates//revoke authorized the caller against only the selected Lemur row, so the creator of the duplicate bypassed CertificatePermission. The duplicate had no cert.endpoints, which also bypassed the safeguard that prevents revocation of deployed certificates. Issuer plugins then revoked the real CA-side certificate using certificate.body or external_id under the stored authority credentials. An attacker could therefore revoke arbitrary managed certificates and cause fleet-wide TLS denial of service. The fix rejects duplicate authority_id and serial identities, requires authority access on upload, and checks every matching row during revocation. This issue is fixed in version 1.9.3.

osv:CVE-2026-71417
Complete source record
{
  "id": "951b143fddbda6e04a0698e88cf41b593cb20ebe32a7d7da7e230f41f9eeaf6d",
  "url": "https://osv.dev/vulnerability/CVE-2026-71417",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Lemur: Any user can revoke arbitrary certificates at the CA by uploading a duplicate record and revoking it",
    "summary": "Lemur manages TLS certificate creation. Prior to 1.9.3, POST /api/1/certificates/upload allowed a non-read-only user to create a duplicate row using another certificate body, authority_id, serial, or external_id without requiring permission on the underlying authority. PUT /api/1/certificates//revoke authorized the caller against only the selected Lemur row, so the creator of the duplicate bypassed CertificatePermission. The duplicate had no cert.endpoints, which also bypassed the safeguard that prevents revocation of deployed certificates. Issuer plugins then revoked the real CA-side certificate using certificate.body or external_id under the stored authority credentials. An attacker could therefore revoke arbitrary managed certificates and cause fleet-wide TLS denial of service. The fix rejects duplicate authority_id and serial identities, requires authority access on upload, and checks every matching row during revocation. This issue is fixed in version 1.9.3.",
    "evidence": "osv:CVE-2026-71417",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-71417",
      "aliases": [
        "CVE-2026-71417",
        "GHSA-pxmc-2ffp-8j67",
        "PYSEC-2026-3678"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/netflix/lemur",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "726506d15a6da8d9bcf5c39b4dc0c95535cf03c0"
                },
                {
                  "fixed": "851389ae737a6d6bf16c1f9ca64a2ce56c1cc5c6"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.9.3"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "851389ae737a6d6bf16c1f9ca64a2ce56c1cc5c6"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "726506d15a6da8d9bcf5c39b4dc0c95535cf03c0"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v1.9.3"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v1.9.2",
            "v1.9.1",
            "v1.9.0",
            "v1.8.2",
            "v1.8.1",
            "v1.8.0",
            "v1.7.0",
            "v1.6.0",
            "v1.5.0",
            "v1.4.0",
            "v1.3.2",
            "v1.3.1",
            "v1.3.0",
            "v1.2.0",
            "v1.1.0",
            "v1.0.0",
            "v0.11.0",
            "v0.10.0",
            "v0.9.0",
            "v0.8.1",
            "0.8.0",
            "0.7.0",
            "0.6.0",
            "0.5.0",
            "0.4.0",
            "0.3.0",
            "0.2.2",
            "0.2.1",
            "0.2",
            "0.1.5",
            "0.1.4",
            "0.1.3",
            "0.1.2",
            "0.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-71417.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:32.803281501Z",
      "provider": "osv",
      "references": [
        "https://github.com/Netflix/lemur/releases/tag/v1.9.3",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71417.json",
        "https://github.com/Netflix/lemur/security/advisories/GHSA-pxmc-2ffp-8j67",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-71417",
        "https://github.com/Netflix/lemur/commit/851389ae737a6d6bf16c1f9ca64a2ce56c1cc5c6"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-639"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71417.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-71417",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 500080,
  "published_at": "2026-08-18T19:12:16.427+00:00"
}