Description
CloudTAK is a browser-based Common Operating Picture and situational awareness tool compatible with TAK. Prior to version 13.10.0, every route in the ESRI helper family (api/routes/esri.ts) takes a fully attacker-controlled URL from the request (POST /api/esri body url, and the portal / server / layer query parameters on the GET /api/esri/* routes) and passes it into EsriBase / EsriProxyPortal / EsriProxyServer / EsriProxyLayer in api/lib/esri.ts, which fetch it with the bare fetch from @tak-ps/etl. No IP / DNS / hostname classification is applied at any point, so the destination is never validated against private, loopback, or link-local ranges. Any authenticated user (the routes only require Auth.is_auth(config, req, { anyResources: true }), i.e. any token, not an admin) can therefore make the CloudTAK server issue arbitrary outbound GET/POST requests to internal addresses such as the cloud instance-metadata service (169.254.169.254), loopback admin ports (127.0.0.1:<port>), and other hosts reachable only from inside the deployment VPC. This is a full-read SSRF, not blind: on success the upstream JSON body is returned to the caller via res.json(...), and on failure the upstream error string is reflected verbatim as ESRI Server Error: <message>. An attacker can read cloud metadata (and the temporary IAM credentials the instance role exposes), enumerate internal services, and exfiltrate their response bodies. The sniff() URL classifier provides no protection: it only pattern-matches the pathname (/rest, /arcgis/rest, /sharing/rest), so a URL like http://169.254.169.254/arcgis/rest or http://127.0.0.1:8500/rest passes sniff() and is fetched. This issue has been patched in version 13.10.0.
Published: 2026-09-30
Score: 7.6 High
EPSS: < 1% Very Low
KEV: No
Impact: Authenticated full‑read Server‑Side Request Forgery
Action: Apply Patch
AI Analysis

Impact

The vulnerability allows an authenticated user to supply an arbitrary URL to CloudTAK’s ESRI helper routes, which the server then requests without any host or IP validation. The full‑read SSRF returns the remote response or error message directly to the attacker, providing visible data from internal endpoints. The issue is classified as CVSS 7.6, indicating substantial impact on confidentiality and availability when exploited.

Affected Systems

dfpc‑coe CloudTAK versions prior to 13.10.0 are affected. Any user possessing a valid authentication token can trigger the vulnerable routes; the policy does not require admin rights. The vulnerability applies to all ESRI helper routes under /api/esri*, including POST /api/esri and GET /api/esri/{portal|server|layer}.

Risk and Exploitability

The CVSS score of 7.6 signifies a high risk. EPSS is not available, and the vulnerability is not listed in CISA’s KEV catalog, suggesting that it is not a known actively exploited threat yet. Nonetheless, because the bug permits direct reading of internal services such as the instance‑metadata endpoint and local admin ports, an attacker can enumerate internal resources, retrieve temporary IAM credentials, and exfiltrate data. The attack vector requires only authentication, which means any authorized user can perform the SSRF. Preventing abuse relies on blocking outbound traffic to internal ranges or re‑authorizing access to the helper routes.

Generated by OpenCVE AI on September 30, 2026 at 18:16 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade dfpc‑coe CloudTAK to version 13.10.0 or later, which removes the vulnerability.
  • Restrict outbound traffic from the CloudTAK server to internal hosts, e.g., block 169.254.169.254, 127.0.0.0/8, and loopback ranges with firewall rules or network segmentation.
  • Restrict access to the ESRI helper routes by modifying authentication logic to require elevated privileges or by implementing a proxy whitelist that validates target URLs before fetching.

Generated by OpenCVE AI on September 30, 2026 at 18:16 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-r95q-fp26-h3hc CloudTAK: Authenticated full-read SSRF in the /api/esri* routes — user-controlled URL fetched with no IP-classification guard
History

Thu, 01 Oct 2026 00:00:00 +0000

Type Values Removed Values Added
First Time appeared Dfpc-coe
Dfpc-coe cloudtak
Vendors & Products Dfpc-coe
Dfpc-coe cloudtak

Wed, 30 Sep 2026 16:45:00 +0000

Type Values Removed Values Added
Description CloudTAK is a browser-based Common Operating Picture and situational awareness tool compatible with TAK. Prior to version 13.10.0, every route in the ESRI helper family (api/routes/esri.ts) takes a fully attacker-controlled URL from the request (POST /api/esri body url, and the portal / server / layer query parameters on the GET /api/esri/* routes) and passes it into EsriBase / EsriProxyPortal / EsriProxyServer / EsriProxyLayer in api/lib/esri.ts, which fetch it with the bare fetch from @tak-ps/etl. No IP / DNS / hostname classification is applied at any point, so the destination is never validated against private, loopback, or link-local ranges. Any authenticated user (the routes only require Auth.is_auth(config, req, { anyResources: true }), i.e. any token, not an admin) can therefore make the CloudTAK server issue arbitrary outbound GET/POST requests to internal addresses such as the cloud instance-metadata service (169.254.169.254), loopback admin ports (127.0.0.1:<port>), and other hosts reachable only from inside the deployment VPC. This is a full-read SSRF, not blind: on success the upstream JSON body is returned to the caller via res.json(...), and on failure the upstream error string is reflected verbatim as ESRI Server Error: <message>. An attacker can read cloud metadata (and the temporary IAM credentials the instance role exposes), enumerate internal services, and exfiltrate their response bodies. The sniff() URL classifier provides no protection: it only pattern-matches the pathname (/rest, /arcgis/rest, /sharing/rest), so a URL like http://169.254.169.254/arcgis/rest or http://127.0.0.1:8500/rest passes sniff() and is fetched. This issue has been patched in version 13.10.0.
Title CloudTAK: Authenticated full-read SSRF in /api/esri* routes — user-controlled URL fetched with no IP-classification guard
Weaknesses CWE-918
References
Metrics cvssV4_0

{'score': 7.6, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Dfpc-coe Cloudtak
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-30T19:34:04.594Z

Reserved: 2026-06-16T15:20:43.085Z

Link: CVE-2026-55177

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-09-30T17:16:46.787

Modified: 2026-09-30T20:17:33.477

Link: CVE-2026-55177

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-30T23:45:09Z

Weaknesses
  • CWE-918

    Server-Side Request Forgery (SSRF)