← Back to CVE Explorer

CVE-2026-48508

Full vulnerability record from the local CVENow database.

Description

Lemur manages TLS certificate creation. Prior to 1.9.1, StrictRolePermission and AuthorityCreatorPermission in lemur/auth/permissions.py call flask_principal.Permission.__init__() with zero Need objects when ADMIN_ONLY_AUTHORITY_CREATION and LEMUR_STRICT_ROLE_ENFORCEMENT are unset because both flags default to False. Flask-Principal Permission.allows() returns True when self.needs is empty, so the .can() authorization gate permits every authenticated identity, including the read-only role. A read-only user can access POST /api/1/authorities, POST /api/1/certificates/upload, POST /api/1/pending_certificates//upload, POST /api/1/notifications, PUT or DELETE /api/1/notifications/, and POST /api/1/domains to create root Certificate Authorities, upload arbitrary certificates, create or edit notifications that reach an SSRF sink, and create domain entries. Explicitly setting either flag to False continues to opt into the permissive behavior. This issue is fixed in version 1.9.1.

Severity
HIGH
CVSS score
8.8 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-08-18 18:17:41.073000
Last modified
2026-10-22 22:10:00.250000
View original CVE JSON
{
  "id": "CVE-2026-48508",
  "sourceIdentifier": "[email protected]",
  "published": "2026-08-18T18:17:41.073",
  "lastModified": "2026-10-22T22:10:00.250",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Lemur manages TLS certificate creation. Prior to 1.9.1, StrictRolePermission and AuthorityCreatorPermission in lemur/auth/permissions.py call flask_principal.Permission.__init__() with zero Need objects when ADMIN_ONLY_AUTHORITY_CREATION and LEMUR_STRICT_ROLE_ENFORCEMENT are unset because both flags default to False. Flask-Principal Permission.allows() returns True when self.needs is empty, so the .can() authorization gate permits every authenticated identity, including the read-only role. A read-only user can access POST /api/1/authorities, POST /api/1/certificates/upload, POST /api/1/pending_certificates//upload, POST /api/1/notifications, PUT or DELETE /api/1/notifications/, and POST /api/1/domains to create root Certificate Authorities, upload arbitrary certificates, create or edit notifications that reach an SSRF sink, and create domain entries. Explicitly setting either flag to False continues to opt into the permissive behavior. This issue is fixed in version 1.9.1."
    },
    {
      "lang": "es",
      "value": "Lemur gestiona la creación de certificados TLS. Antes de la 1.9.1, StrictRolePermission y AuthorityCreatorPermission en lemur/auth/permissions.py llaman a flask_principal.Permission.__init__() con cero objetos Need cuando ADMIN_ONLY_AUTHORITY_CREATION y LEMUR_STRICT_ROLE_ENFORCEMENT no están configuradas porque ambas banderas por defecto son False. Flask-Principal Permission.allows() devuelve True cuando self.needs está vacío, por lo que la puerta de autorización .can() permite a cada identidad autenticada, incluido el rol de solo lectura. Un usuario de solo lectura puede acceder a POST /api/1/authorities, POST /api/1/certificates/upload, POST /api/1/pending_certificates//upload, POST /api/1/notifications, PUT o DELETE /api/1/notifications/, y POST /api/1/domains para crear Autoridades de Certificación raíz, subir certificados arbitrarios, crear o editar notificaciones que alcanzan un sumidero SSRF, y crear entradas de dominio. Establecer explícitamente cualquiera de las banderas en False continúa optando por el comportamiento permisivo. Este problema está solucionado en la versión 1.9.1."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "Netflix",
          "product": "lemur",
          "versions": [
            {
              "version": "< 1.9.1",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
          "baseScore": 8.8,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "LOW",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "HIGH",
          "integrityImpact": "HIGH",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 2.8,
        "impactScore": 5.9
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-08-18T19:31:14.964206Z",
          "id": "CVE-2026-48508",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-863"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/Netflix/lemur/commit/e6a41e2c1b2028840d19039b06895524a19ad36f",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/Netflix/lemur/releases/tag/v1.9.1",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/Netflix/lemur/security/advisories/GHSA-qcqw-jwxc-2hqg",
      "source": "[email protected]"
    }
  ]
}