GHSA-p77j-g7h5-r2vw: CRLF Injection
GeoLens 1.2.4 fixes a set of vulnerabilities, the most serious of which allow authenticated or anonymous users to obtain data and metadata for datasets they are not authorized to access.
Impact
- Private record metadata disclosure. Record contact, keyword, and distribution sub-resource endpoints did not re-authorize the backing dataset, so any authenticated user could read a private record's contact details (PII), keywords, and distributions. (Runtime-proven.) - Private tile data via shared caches. Private raster and vector tiles were served with shared-cache (Cache-Control: public) headers, so a shared cache (a CDN or the bundled reverse proxy) could retain private tile bytes and replay them to later unauthenticated requests, including unpublished public-dataset previews. - Private dataset title enumeration. The map visibility-check endpoint did not authorize read access to the map, allowing any editor to enumerate the titles of non-public datasets in any map by ID — including private maps owned by other users. - SSRF via DNS rebinding. URL validation for user-supplied service URLs (probes, STAC/OGC API sources, manifest downloads) resolved DNS once and then let the HTTP client re-resolve at connect time, allowing a low-TTL domain to pass validation as a public address and connect to an internal/metadata address. - Token leak + header injection in service preview. The remote-service preview path passed the authorization token to GDAL via the process environment without sanitization, leaking it through /proc/<pid>/environ and allowing CRLF header injection. - Unauthenticated STAC search DoS. POST /search did not cap the size of GeoJSON intersects geometries (the GET sibling did). - API key written to access logs. The bundled reverse proxy logged the apikey query-string credential in cleartext. - Security posture coupled to a logging flag. API documentation exposure and the Secure flag on the OAuth session cookie were keyed off the LOGJSON logging flag rather than an explicit environment setting, so a production deployment at the default could expose /docs and emit a non-Secure session cookie. - Missing Content-Security-Policy (defense-in-depth). The web application shipped no script-src/default-src CSP, leaving no containment for token exfiltration if an XSS issue were introduced. - Weak default install credentials. The installer kept the published default database password and could silently retain the default admin password on a headless install.
Patches
Upgrade to GeoLens 1.2.4. No configuration changes are required for the authorization and cache fixes. Operators on a public, TLS-terminated deployment should additionally set ENVIRONMENT=production to make the production security posture explicit; deployments that do not set it retain their prior behavior.
Workarounds
None for the authorization/cache disclosure flaws — upgrading is required. The SSRF and STAC-DoS surfaces can be partially mitigated at the network/proxy layer (egress filtering to block link-local metadata addresses; a request-size limit on POST /search), but the code fix is the durable remedy.
References
- Release: https://github.com/geolens-io/geolens/releases/tag/v1.2.4 - Pull request: https://github.com/geolens-io/geolens/pull/243 - Prior related advisory: GHSA-p23g-mvhj-jh3j
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
pip/geolensto a version that resolves this vulnerability.Fixed in 1.2.4 - Upgrade
Upgrade
geolensto a version that resolves this vulnerability.Fixed in v1.2.4 - Configuration
On a public, TLS-terminated deployment, set ENVIRONMENT=production to make the production security posture explicit; if not set, deployments retain prior behavior.
GeoLens ENVIRONMENT = production - Compensating control
For SSRF mitigation at the network/proxy layer, implement egress filtering to block link-local metadata addresses.
- Compensating control
For STAC search DoS mitigation at the network/proxy layer, add a request-size limit on POST /search.
Event History
Frequently Asked Questions
Which users can exploit the authorization issues?
Any authenticated user could read contact details, keywords, and distributions for private records. Any editor could enumerate non-public dataset titles in maps by ID, including maps owned by other users.
Can unauthenticated users obtain private data?
Yes, if private raster or vector tile content has been retained by a shared cache. The cache could replay those private tile bytes to later unauthenticated requests, including unpublished public-dataset previews.
Are deployments using a reverse proxy or CDN exposed to the tile-cache issue?
They may be. Private tiles were returned with Cache-Control: public, and the advisory identifies both CDNs and the bundled reverse proxy as shared caches that could retain and replay the content.
What user-controlled URL features are relevant to the SSRF issue?
The affected URL validation applied to user-supplied service URLs used for probes, STAC/OGC API sources, and manifest downloads. The issue involved resolving DNS once during validation, creating exposure to DNS rebinding.
What release contains the described fixes?
GeoLens 1.2.4 fixes the described set of vulnerabilities. The provided information does not identify any other fixed versions.