Skip to content
Heist/ feed
Back to feed
High

GeoLens: Cross-dataset authorization bypass discloses private dataset metadata, schema, sample values, table rows, and raster/vector tile data

Type: advisorySources: OSV

GeoLens is a self-hosted geospatial data catalog with semantic search, OGC and STAC APIs, and a map builder. Prior to 1.2.3, multiple read and link endpoints authorize only the resource named in the request URL and fail to re-authorize a second caller-influenced dataset reached through a relationship, map layer, VRT source, externalId lookup, or request body. When a public map references a private dataset, anonymous callers can use GET /maps/{id} and GET /maps/{id}/style.json to obtain the private layer's metadata, sampled values, or vector tiles. The style response can expose a replayable HMAC tile URL that is bound to neither a user nor a map. When a public source dataset has a relationship to a private target dataset, anonymous callers can use the dataset relationship APIs to enumerate the relationship and read rows from the private target's backing table. Anonymous callers can also use GET /collections/datasets/items with an externalId dataset UUID to obtain metadata for any private, restricted, or unpublished dataset because that lookup performs no visibility check. Authenticated users with the default editor role can mosaic another user's private raster into an owned VRT and read its pixels, and POST /ai/metadata/{summary,keywords,lineage,quality-statement} accepts a body-controlled dataset_id without a visibility check and returns private metadata and sample values. Pre-existing vrt_source_links also expose unauthorized member metadata and health unless each member is

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-55178
Confirmed fixed CVEs
Not specified
Updated in this feed
4 Nov 2026, 19:31 UTC · Revision 1

Source evidence

GeoLens: Cross-dataset authorization bypass discloses private dataset metadata, schema, sample values, table rows, and raster/vector tile data

core-osv · Original source

Published 15 Sept 2026, 14:58 UTC

GeoLens is a self-hosted geospatial data catalog with semantic search, OGC and STAC APIs, and a map builder. Prior to 1.2.3, multiple read and link endpoints authorize only the resource named in the request URL and fail to re-authorize a second caller-influenced dataset reached through a relationship, map layer, VRT source, externalId lookup, or request body. When a public map references a private dataset, anonymous callers can use GET /maps/{id} and GET /maps/{id}/style.json to obtain the private layer's metadata, sampled values, or vector tiles. The style response can expose a replayable HMAC tile URL that is bound to neither a user nor a map. When a public source dataset has a relationship to a private target dataset, anonymous callers can use the dataset relationship APIs to enumerate the relationship and read rows from the private target's backing table. Anonymous callers can also use GET /collections/datasets/items with an externalId dataset UUID to obtain metadata for any private, restricted, or unpublished dataset because that lookup performs no visibility check. Authenticated users with the default editor role can mosaic another user's private raster into an owned VRT and read its pixels, and POST /ai/metadata/{summary,keywords,lineage,quality-statement} accepts a body-controlled dataset_id without a visibility check and returns private metadata and sample values. Pre-existing vrt_source_links also expose unauthorized member metadata and health unless each member is

osv:CVE-2026-55178
Complete source record
{
  "id": "9a3d6b0e4f44c120dcbaa40bcae8c6deec201187f9ddffd3728c51249210c850",
  "url": "https://osv.dev/vulnerability/CVE-2026-55178",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "GeoLens: Cross-dataset authorization bypass discloses private dataset metadata, schema, sample values, table rows, and raster/vector tile data",
    "summary": "GeoLens is a self-hosted geospatial data catalog with semantic search, OGC and STAC APIs, and a map builder. Prior to 1.2.3, multiple read and link endpoints authorize only the resource named in the request URL and fail to re-authorize a second caller-influenced dataset reached through a relationship, map layer, VRT source, externalId lookup, or request body. When a public map references a private dataset, anonymous callers can use GET /maps/{id} and GET /maps/{id}/style.json to obtain the private layer's metadata, sampled values, or vector tiles. The style response can expose a replayable HMAC tile URL that is bound to neither a user nor a map. When a public source dataset has a relationship to a private target dataset, anonymous callers can use the dataset relationship APIs to enumerate the relationship and read rows from the private target's backing table. Anonymous callers can also use GET /collections/datasets/items with an externalId dataset UUID to obtain metadata for any private, restricted, or unpublished dataset because that lookup performs no visibility check. Authenticated users with the default editor role can mosaic another user's private raster into an owned VRT and read its pixels, and POST /ai/metadata/{summary,keywords,lineage,quality-statement} accepts a body-controlled dataset_id without a visibility check and returns private metadata and sample values. Pre-existing vrt_source_links also expose unauthorized member metadata and health unless each member is ",
    "evidence": "osv:CVE-2026-55178",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-55178",
      "aliases": [
        "CVE-2026-55178",
        "GHSA-p23g-mvhj-jh3j",
        "PYSEC-2026-3662",
        "PYSEC-2026-3663"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/geolens-io/geolens",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "8ea7927a838b7f7705d57ca8e43e3c2fd948d49f"
                },
                {
                  "fixed": "01bc87da03a5ecd0322c42388f4bfced7cb2ed06"
                },
                {
                  "fixed": "07dfb1c63ecfc065c0c47b7718ec6ebe97798b1e"
                },
                {
                  "fixed": "2c031da8e753639ff0e36d47ca05bbb96fbe4a9e"
                },
                {
                  "fixed": "31a103b96b9fd6ad90308b3e27a581852c4a69bd"
                },
                {
                  "fixed": "407c068836058fdeca6bb477d39f841316b326a5"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.2.3"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "01bc87da03a5ecd0322c42388f4bfced7cb2ed06"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "07dfb1c63ecfc065c0c47b7718ec6ebe97798b1e"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "2c031da8e753639ff0e36d47ca05bbb96fbe4a9e"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "31a103b96b9fd6ad90308b3e27a581852c4a69bd"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "407c068836058fdeca6bb477d39f841316b326a5"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "8ea7927a838b7f7705d57ca8e43e3c2fd948d49f"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v1.2.3"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v1.2.2",
            "v1.2.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-55178.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:38.569862315Z",
      "provider": "osv",
      "references": [
        "https://github.com/geolens-io/geolens/releases/tag/v1.2.3",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/55xxx/CVE-2026-55178.json",
        "https://github.com/geolens-io/geolens/security/advisories/GHSA-p23g-mvhj-jh3j",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-55178",
        "https://github.com/geolens-io/geolens/commit/01bc87da03a5ecd0322c42388f4bfced7cb2ed06",
        "https://github.com/geolens-io/geolens/commit/07dfb1c63ecfc065c0c47b7718ec6ebe97798b1e",
        "https://github.com/geolens-io/geolens/commit/2c031da8e753639ff0e36d47ca05bbb96fbe4a9e",
        "https://github.com/geolens-io/geolens/commit/31a103b96b9fd6ad90308b3e27a581852c4a69bd",
        "https://github.com/geolens-io/geolens/commit/407c068836058fdeca6bb477d39f841316b326a5",
        "https://github.com/geolens-io/geolens/pull/234",
        "https://github.com/geolens-io/geolens/pull/235",
        "https://github.com/geolens-io/geolens/pull/236",
        "https://github.com/geolens-io/geolens/pull/237",
        "https://github.com/geolens-io/geolens/pull/238"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-200",
          "CWE-639",
          "CWE-862"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/55xxx/CVE-2026-55178.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-55178",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 506196,
  "published_at": "2026-09-15T14:58:39.437+00:00"
}