Lemur: Server-Side Request Forgery via the ACME client following server-controlled URLs
Lemur manages TLS certificate creation. Prior to 1.9.3, an authority-role member could update acme_url through PUT /api/1/authorities/ without revalidation and direct setup_acme_client_no_retry to an attacker-controlled ACME server. ACME directory and order responses contain newNonce, newOrder, authorizations, and finalize URLs chosen by that server. The Lemur ClientV2 followed those URLs without requiring their host to match the configured directory host, allowing JWS-signed requests to internal services or cloud metadata endpoints. The issue required an ACME authority and a user authorized for that authority, but did not require global administrator privileges. The fix revalidates updates and introduces _PinnedClientNetwork to enforce a single allowed host for the complete ACME flow. This issue is fixed in version 1.9.3.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-70666
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 2 Nov 2026, 21:34 UTC · Revision 1
Source evidence
Lemur: Server-Side Request Forgery via the ACME client following server-controlled URLs
core-osv · Original sourcePublished 18 Aug 2026, 19:05 UTC
Lemur manages TLS certificate creation. Prior to 1.9.3, an authority-role member could update acme_url through PUT /api/1/authorities/ without revalidation and direct setup_acme_client_no_retry to an attacker-controlled ACME server. ACME directory and order responses contain newNonce, newOrder, authorizations, and finalize URLs chosen by that server. The Lemur ClientV2 followed those URLs without requiring their host to match the configured directory host, allowing JWS-signed requests to internal services or cloud metadata endpoints. The issue required an ACME authority and a user authorized for that authority, but did not require global administrator privileges. The fix revalidates updates and introduces _PinnedClientNetwork to enforce a single allowed host for the complete ACME flow. This issue is fixed in version 1.9.3.
osv:CVE-2026-70666
Complete source record
{
"id": "3853089c71a3c97cb5cb40d2a7b80cae1ff5511055e56e2a2e7c750fd554e326",
"url": "https://osv.dev/vulnerability/CVE-2026-70666",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Lemur: Server-Side Request Forgery via the ACME client following server-controlled URLs",
"summary": "Lemur manages TLS certificate creation. Prior to 1.9.3, an authority-role member could update acme_url through PUT /api/1/authorities/ without revalidation and direct setup_acme_client_no_retry to an attacker-controlled ACME server. ACME directory and order responses contain newNonce, newOrder, authorizations, and finalize URLs chosen by that server. The Lemur ClientV2 followed those URLs without requiring their host to match the configured directory host, allowing JWS-signed requests to internal services or cloud metadata endpoints. The issue required an ACME authority and a user authorized for that authority, but did not require global administrator privileges. The fix revalidates updates and introduces _PinnedClientNetwork to enforce a single allowed host for the complete ACME flow. This issue is fixed in version 1.9.3.",
"evidence": "osv:CVE-2026-70666",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-70666",
"aliases": [
"CVE-2026-70666",
"GHSA-xpmj-wjcp-6pww",
"PYSEC-2026-3680"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:L"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/netflix/lemur",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "726506d15a6da8d9bcf5c39b4dc0c95535cf03c0"
},
{
"fixed": "6dcb19b6d6004e97796d6a0344b130b2ba57f050"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "1.9.3"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "6dcb19b6d6004e97796d6a0344b130b2ba57f050"
}
],
"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-70666.json"
}
}
],
"modified": "2026-10-28T02:30:23.808112639Z",
"provider": "osv",
"references": [
"https://github.com/Netflix/lemur/releases/tag/v1.9.3",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/70xxx/CVE-2026-70666.json",
"https://github.com/Netflix/lemur/security/advisories/GHSA-xpmj-wjcp-6pww",
"https://nvd.nist.gov/vuln/detail/CVE-2026-70666",
"https://github.com/Netflix/lemur/commit/6dcb19b6d6004e97796d6a0344b130b2ba57f050"
],
"provider_metadata": {
"cwe_ids": [
"CWE-918"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/70xxx/CVE-2026-70666.json"
}
},
"related_cves": [
{
"value": "CVE-2026-70666",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 490301,
"published_at": "2026-08-18T19:05:26.621+00:00"
}