highCVSS 7.4Vulnerability

CVE-2026-70666

### Summary The ACME client (used to issue certificates from Let's Encrypt / Google Public CA / private ACME CAs) connects to an `acme_url`, then issues requests to URLs that the **ACME server returns** in its directory/order/authorization/finalize responses - this is the classic ACME-client SSRF (RFC 8555 design). Lemur validates `acme_url` against an allowlist of public ACME directories, but **only at authority creation**. The authority UPDATE path (`PUT /authorities/<id>`) accepts a new `options` blob with an arbitrary `acme_url` and never re-validates. An attacker who is a member of an authority's role can repoint an existing ACME authority at a malicious ACME server they control, which returns internal URLs in its responses - coercing Lemur into making JWS-signed POST requests to internal services during the next certificate issuance. ### Detail **Defect A - allowlist only at creation.** `_validate_acme_url` (`lemur/plugins/lemur_acme/plugin.py:35-53`) restricts the host to `{acme-v02.api.letsencrypt.org, acme-staging-v02.api.letsencrypt.org, dv.acme-v02.api.pki.goog}`. It runs **only inside `create_authority`** (lines 337, 481). The update path stores `options` verbatim: ```python # lemur/authorities/views.py:417-424 (Authorities.put) return service.update( authority_id, owner=data["owner"], description=data["description"], active=data["active"], roles=data["roles"], options=data.get("options") # <- acme_url lives here, NO re-validation ) ``` `AuthorityUpdateSchema.options = fields.String()` (`authorities/schemas.py:101`) applies no validation. The docstring of `_validate_acme_url` even admits: *"existing authorities in the DB were already trusted when they were created and are not re-validated."* **Defect B - ACME client follows server-supplied URLs.** `setup_acme_client_no_retry` (`acme_handlers.py:161-162, 188-202`) reads `acme_url` from stored authority options and creates an ACME client. Per RFC 8555, the client: 1. `get_direct

Properties

ghsa_id
GHSA-xpmj-wjcp-6pww
severity
high
summary
Lemur: Server-Side Request Forgery via the ACME client following server-controlled URLs
cvss_score
7.4
cve_id
CVE-2026-70666
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:L
is_ghsa_only
false
ghsa_published
2026-08-18T20:51:07Z
source_url
https://github.com/advisories/GHSA-xpmj-wjcp-6pww
ghsa_updated
2026-08-18T20:51:08Z

Related Entities (4)

VULNERABLE_TO (1)

[Software]pip/lemur

AFFECTS (1)

[Software]pip/lemur

HAS_WEAKNESS (1)

[Weakness]Server-Side Request Forgery (SSRF)

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-70666 (CVSS 7.4) — Ninja Signal Threat Intelligence | Ninja Signal