CVE-2026-55178: GeoLens: IDOR leaks private datasets via AI metadata API

GHSA-p23g-mvhj-jh3j HIGH
Published August 18, 2026
CISO Take

GeoLens, a geospatial data platform with 2,899 downstream dependents, shipped six related authorization flaws in which read and link endpoints validated only the resource named in the URL but never re-validated a second, caller-influenced dataset reached through a relationship, layer reference, mosaic source, or request body — letting attackers read vector tiles, raster pixels, database rows, and metadata from datasets they have no access to. Three of the six findings require zero authentication, and one lets any default self-service 'editor' account exfiltrate another tenant's dataset schema, source URL, and sample row values through the AI-powered metadata-generation endpoints (summary, keywords, lineage, quality-statement), since the attacker-supplied dataset_id flows straight into the LLM prompt context with no visibility filter. There is no EPSS score, no CISA KEV listing, and no public exploit or Nuclei template yet, but the anonymous variants need nothing more than network reachability and a dataset UUID, and the package carries a below-average OpenSSF Scorecard (6.2/10) with 8 other CVEs on record. Because there is no complete configuration workaround, upgrade to GeoLens 1.2.3 immediately; in the interim, restrict network exposure of the API and audit logs for cross-tenant relationship, VRT-link, externalId, and AI-metadata requests referencing dataset IDs outside the caller's own tenant.

Sources: GitHub Advisory OpenSSF ATLAS CISA KEV

What is the risk?

High confidentiality risk, no integrity/availability impact (CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N, 7.5). Three of six findings are exploitable pre-auth over the network with no user interaction, which is the practical worst case for exposure even without a public exploit or KEV listing today. The remaining findings need only the default low-privilege 'editor' role that any self-service signup grants, so the effective attacker population is broad. No EPSS/SSVC data is available to calibrate real-world exploitation likelihood, but the vulnerability class (missing per-object re-authorization / IDOR) is well understood and trivially scriptable once an attacker has a dataset ID, so exploitability should be treated as high despite the absence of scanner signatures.

How does the attack unfold?

Discovery
Attacker identifies a public or self-owned resource (map, dataset, or VRT) with a relationship, layer reference, or mosaic link to a private target dataset, or simply obtains a target dataset's UUID.
AML.T0006
Authorization bypass
Attacker calls a read/link/AI-metadata endpoint that authorizes only the URL resource, never re-checking the caller-supplied related or target dataset ID.
AML.T0049
AI-mediated exfiltration
For the AI metadata endpoints, the unauthorized dataset_id is passed into the LLM prompt context and the model's response returns the victim dataset's schema, sample values, and source URL to the attacker.
AML.T0024
Impact
Attacker obtains confidential vector/raster data, database rows, or metadata belonging to a tenant they have no access to, enabling further targeting, IP theft, or a compliance/privacy violation.
AML.T0048.004

What systems are affected?

Package Ecosystem Vulnerable Range Patched
HF Datasets npm < 1.2.3 1.2.3
21.8K OpenSSF 6.2 2.9K dependents Pushed 6d ago 83% patched ~7d to patch Full package profile →
HF Datasets pip < 1.2.3 1.2.3
21.8K OpenSSF 6.2 2.9K dependents Pushed 6d ago 83% patched ~7d to patch Full package profile →
HF Datasets pip < 1.2.3 1.2.3
21.8K OpenSSF 6.2 2.9K dependents Pushed 6d ago 83% patched ~7d to patch Full package profile →

How severe is it?

CVSS 3.1
7.5 / 10
EPSS
N/A
Exploitation Status
No known exploitation
Sophistication
Trivial

What is the attack surface?

AV AC PR UI S C I A
AV Network
AC Low
PR None
UI None
S Unchanged
C High
I None
A None

What should I do?

1 step
  1. 1) Upgrade to GeoLens 1.2.3 (or geolens-cli/@geolens/sdk 1.2.3) — this is the only complete remediation; no configuration workaround fully closes the anonymous findings. 2) Until patched, minimize network exposure of the API and avoid co-locating private datasets with public maps, relationships, or VRT mosaics. 3) Review existing VRT source links and dataset relationships for accidental public-to-private linkage created before the fix (finding 6, legacy links). 4) Rotate any tile HMAC signatures issued before the upgrade, since pre-fix signatures are not bound to a specific user or map and are replayable (finding 1). 5) After patching, audit access logs for AI metadata endpoint calls (/ai/metadata/*) and relationship/externalId/VRT reads referencing dataset IDs outside the caller's own tenant as an indicator of prior exploitation. 6) Track the vendor advisory GHSA-p23g-mvhj-jh3j and the package's other 8 CVEs given the below-average OpenSSF Scorecard (6.2/10).

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

EU AI Act
Article 15 - Accuracy, robustness and cybersecurity
ISO 42001
A.6.2.2 - Data for AI systems
NIST AI RMF
MEASURE 2.7 - AI system security is evaluated and monitored
OWASP LLM Top 10
LLM02:2025 - Sensitive Information Disclosure

Frequently Asked Questions

What is CVE-2026-55178?

GeoLens, a geospatial data platform with 2,899 downstream dependents, shipped six related authorization flaws in which read and link endpoints validated only the resource named in the URL but never re-validated a second, caller-influenced dataset reached through a relationship, layer reference, mosaic source, or request body — letting attackers read vector tiles, raster pixels, database rows, and metadata from datasets they have no access to. Three of the six findings require zero authentication, and one lets any default self-service 'editor' account exfiltrate another tenant's dataset schema, source URL, and sample row values through the AI-powered metadata-generation endpoints (summary, keywords, lineage, quality-statement), since the attacker-supplied dataset_id flows straight into the LLM prompt context with no visibility filter. There is no EPSS score, no CISA KEV listing, and no public exploit or Nuclei template yet, but the anonymous variants need nothing more than network reachability and a dataset UUID, and the package carries a below-average OpenSSF Scorecard (6.2/10) with 8 other CVEs on record. Because there is no complete configuration workaround, upgrade to GeoLens 1.2.3 immediately; in the interim, restrict network exposure of the API and audit logs for cross-tenant relationship, VRT-link, externalId, and AI-metadata requests referencing dataset IDs outside the caller's own tenant.

Is CVE-2026-55178 actively exploited?

No confirmed active exploitation of CVE-2026-55178 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-55178?

1) Upgrade to GeoLens 1.2.3 (or geolens-cli/@geolens/sdk 1.2.3) — this is the only complete remediation; no configuration workaround fully closes the anonymous findings. 2) Until patched, minimize network exposure of the API and avoid co-locating private datasets with public maps, relationships, or VRT mosaics. 3) Review existing VRT source links and dataset relationships for accidental public-to-private linkage created before the fix (finding 6, legacy links). 4) Rotate any tile HMAC signatures issued before the upgrade, since pre-fix signatures are not bound to a specific user or map and are replayable (finding 1). 5) After patching, audit access logs for AI metadata endpoint calls (`/ai/metadata/*`) and relationship/externalId/VRT reads referencing dataset IDs outside the caller's own tenant as an indicator of prior exploitation. 6) Track the vendor advisory GHSA-p23g-mvhj-jh3j and the package's other 8 CVEs given the below-average OpenSSF Scorecard (6.2/10).

What systems are affected by CVE-2026-55178?

This vulnerability affects the following AI/ML architecture patterns: Multi-tenant geospatial/ML data platforms, AI-powered dataset metadata generation (LLM summarization/lineage endpoints), Data catalogs and asset stores feeding ML training or inference pipelines, Composite/mosaic data serving layers (VRT-style merged raster assets).

What is the CVSS score for CVE-2026-55178?

CVE-2026-55178 has a CVSS v3.1 base score of 7.5 (HIGH).

What is the AI security impact?

Affected AI Architectures

Multi-tenant geospatial/ML data platformsAI-powered dataset metadata generation (LLM summarization/lineage endpoints)Data catalogs and asset stores feeding ML training or inference pipelinesComposite/mosaic data serving layers (VRT-style merged raster assets)

MITRE ATLAS Techniques

AML.T0024 Exfiltration via AI Inference API
AML.T0049 Exploit Public-Facing Application
AML.T0057 LLM Data Leakage

Compliance Controls Affected

EU AI Act: Article 15
ISO 42001: A.6.2.2
NIST AI RMF: MEASURE 2.7
OWASP LLM Top 10: LLM02:2025

What are the technical details?

Original Advisory

### Summary Multiple GeoLens read/link endpoints authorized only the resource named in the request URL (a map, a VRT, a source dataset, an AI request) and failed to re-authorize a **second, caller-influenced dataset** that the request reached through a relationship, layer reference, mosaic source, or request body. This "authorize the URL resource, read a *different* dataset un-re-authorized" pattern let callers read data from datasets they have no access to. The most severe instances require **no authentication at all** (anonymous, network-only). Others require only the **default `editor` role** that any self-service signup / upload user receives. All issues are fixed in **1.2.3**. There is no complete configuration workaround — upgrading is the only full remediation. ### Impact Depending on the endpoint, an attacker can read, for datasets they cannot otherwise access: - the dataset's **vector tile data** (actual feature geometries/attributes), - the dataset's **raster pixels**, - backing-table **rows**, - and **metadata** — table name, column schema, feature count, extent, source URL/filename, contacts, and **sampled row values**. ### Affected versions All versions **prior to 1.2.3** (includes the published 1.0.0, 1.2.0, and 1.2.2 releases and their PyPI/npm/GHCR artifacts). Fixed in **1.2.3**. ### Findings **1. Anonymous metadata + private vector-tile disclosure via public maps (PR #235)** `GET /maps/{id}` and `GET /maps/{id}/style.json` authorized the map but not each layer's backing dataset. A public map that references a private dataset leaked that dataset's table name, column schema, feature count, extent, and sampled values to anonymous callers. `style.json` additionally returned a vector-tile URL carrying an HMAC signature bound to **neither user nor map**, which the tile endpoint accepts for non-public datasets with no user check — so the signature is **replayable** to read the private dataset's actual vector tiles. *(Anonymous · High)* **2. Anonymous private-row disclosure via dataset relationships (PR #234)** The dataset FK-relationship APIs authorized only the source dataset from the URL, never the relationship target. A public dataset with a relationship to a private dataset let an anonymous caller enumerate the relationship (obtaining the private target's id/title and the relationship id) and then call the related-record endpoint to read **rows from the private target's backing table**. *(Anonymous · High)* **3. Anonymous metadata disclosure via OGC `externalId` lookup (PR #236)** `GET /collections/datasets/items?externalId=<uuid>` resolved the dataset by id and returned the full OGC catalog record (title, summary, bbox, keywords, contacts, distributions, source org) with **no visibility check** — the user was never threaded into the lookup. An anonymous caller could read any private, restricted, or unpublished dataset's metadata by UUID. *(Anonymous · High)* **4. Cross-tenant raster pixel disclosure via VRT mosaics — SEC-C (PR #237)** An authenticated user with the default `editor` upload permission could mosaic another user's **private raster** into a VRT they own, then read the victim's **pixels** back through raster tile / quicklook / COG endpoints that authorize only the attacker-owned VRT. VRT member pixels are compiled into one served asset and cannot be filtered at read time, so the fix authorizes every source dataset at write/link time. *(Authenticated `editor` · High)* **5. Cross-tenant metadata/sample-data disclosure via AI metadata endpoints — SEC-D (PR #238)** The `POST /ai/metadata/{summary,keywords,lineage,quality-statement}` endpoints were gated only by the `use_ai_chat` permission (held by the default `editor` role). The attacker-controlled `dataset_id` in the request body flowed into the LLM prompt context with no visibility filter, rendering **any** dataset's title, summary, source URL, filename, column schema, and **sample values** into the response. *(Authenticated `editor` · High)* **6. Residual VRT member disclosure for legacy links — SEC-E (PR #237)** Link-time authorization (finding 4) does not re-authorize pre-existing `vrt_source_links`, so legacy or authorization-drift links still leaked member metadata and health via the VRT source-listing/status endpoints until a per-member read filter was added. *(Medium)* ### Patches Fixed in **1.2.3** by, in order: - `31a103b9` — fix(catalog): authorize relationship targets in related-record endpoints (#234) - `01bc87da` — fix(maps): re-authorize each layer's dataset on anonymous map read endpoints (#235) - `407c0688` — fix(ogc): enforce dataset visibility on the externalId OGC item lookup (#236) - `2c031da8` — fix(vrt): authorize VRT source datasets at link time + filter unauthorized members on read (#237) - `07dfb1c6` — fix(ai): authorize the requested dataset on AI metadata endpoints (#238) The fixes follow the codebase's established per-dataset re-authorization pattern (`can_access_dataset` / `check_dataset_access_or_anonymous`), filtering at read time and authorizing cross-dataset references at link/write time. ### Workarounds There is **no complete configuration workaround**; the anonymous findings require only network access to the API. Operators who cannot upgrade immediately should restrict network exposure of the API and avoid co-locating private datasets with public maps/relationships, but **upgrading to 1.2.3 is the only full remediation**. ### Remediation Upgrade to GeoLens **1.2.3**: - Container images: `ghcr.io/geolens-io/geolens-api:1.2.3` (+ worker/frontend) - Python SDK: `geolens==1.2.3` · CLI: `geolens-cli==1.2.3` · npm: `@geolens/sdk@1.2.3`

Exploitation Scenario

An attacker with a free self-service GeoLens account (default 'editor' role) enumerates or discovers the UUID of a target organization's private dataset — for example via a public dataset that has a relationship to it, or via a public map whose style.json leaks a related dataset's metadata. The attacker then calls `POST /ai/metadata/summary` with that dataset_id in the request body. Because the endpoint is gated only by the generic `use_ai_chat` permission and never checks whether the caller can access the specific dataset, the attacker-supplied ID flows into the LLM prompt context and the model returns a generated summary that discloses the victim's table name, column schema, source URL/filename, and sample row values. The attacker now has enough reconnaissance (schema, real sample data, source location) to pivot toward further data extraction or to locate a poorly-secured origin store referenced in the leaked source URL — all without ever being authorized to view the dataset.

Weaknesses (CWE)

CWE-200 — Exposure of Sensitive Information to an Unauthorized Actor: The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.

  • [Architecture and Design] Compartmentalize the system to have "safe" areas where trust boundaries can be unambiguously drawn. Do not allow sensitive data to go outside of the trust boundary and always be careful when interfacing with a compartment outside of the safe area. Ensure that appropriate compartmentalization is built into the system design, and the compartmentalization allows for and reinforces privilege separation functionality. Architects and designers should rely on the principle of least privilege to decide the appropriate time to use privileges and the time to drop privileges.

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Timeline

Published
August 18, 2026
Last Modified
August 18, 2026
First Seen
August 18, 2026

Related Vulnerabilities