Skip to main content

GIS vulnerability scanner — ArcGIS REST, embedded maps, secret detection, KVKK/GDPR-aware

Project description

gisweep

GIS vulnerability scanner — ArcGIS REST, OGC (WMS/WFS), embedded web maps, secret detection, KVKK/GDPR-aware.

gisweep is an open-source CLI that audits GIS surfaces for the misconfigurations nobody else looks for: ArcGIS REST services exposing anonymous write capabilities, GeoServer/MapServer endpoints with public WFS-Transactional, admin directories reachable from the public internet, embedded web maps leaking API keys, feature services returning PII without authentication, and outdated server / client-side libraries with public CVEs. Every finding is mapped to KVKK and GDPR articles so audits are usable directly in compliance reports.

Why

ArcGIS REST and the open-source OGC stack (GeoServer, MapServer, QGIS Server) are everywhere — municipalities, utilities, transport, public health — and they are consistently misconfigured. Existing OSS scanners (nuclei, trivy, semgrep) do not understand ArcGIS or OGC semantics. gisweep fills that gap with a protocol-aware engine plus a Playwright-driven web crawler that finds embedded maps in the wild and follows their network traffic back to the underlying services.

What it covers today

Subcommand Targets Checks
gisweep arcgis <url> ArcGIS REST root ARC-001 anonymous enumeration · ARC-002 anonymous write capability · ARC-003 admin endpoint exposed · ARC-011 Sync/Extract enabled · ARC-012 ExportTiles enabled · ARC-013 unbounded query · ARC-014 PII fields exposed · ARC-015 outdated ArcGIS Server CVE
gisweep ogc <url> WMS / WFS via GeoServer / MapServer / QGIS Server / deegree OGC-001 anonymous GetCapabilities · OGC-002 outdated server CVE · OGC-005 WFS-T anonymous write
gisweep web <url> Any web page (Playwright headless Chromium) WEB-001 embedded data-plane endpoint inventory · WEB-002 secret leakage in HTML/JS/XHR · WEB-007 outdated client-side GIS library CVE
gisweep secrets <url-or-path> Any URL or local file/directory SEC-001 hardcoded API keys / tokens / private keys
gisweep scan <url> Auto-detect (probes URL, dispatches arcgis / ogc / web) All of the above

Cross-cutting compliance overlay:

  • COMP-001 KVKK Madde 12 aggregate — ≥5 PII-bearing layers exposed anonymously.
  • COMP-003 GDPR Art. 32 technical-measures gap — admin exposed AND data unauthenticated.

Bundled CVE database (regenerable from NIST NVD via scripts/refresh_cve_db.py): ArcGIS Server, GeoServer, MapServer, plus product slots for QGIS Server, deegree, GeoNetwork, Leaflet, OpenLayers, Mapbox GL JS, Cesium, ArcGIS API for JavaScript.

Output formats

  • Rich console (default)
  • JSON (stable schema gisweep.report.v1)
  • SARIF 2.1.0 (consumable by GitHub Code Scanning, Azure DevOps)
  • HTML (self-contained, embedded CSS, KVKK/GDPR pills)
  • Markdown (GitHub-friendly, KVKK/GDPR matrix)

Every format surfaces the KVKK / GDPR / CWE / CVSS metadata of every finding.

Install

pip install gisweep
playwright install chromium  # one-time browser download for `gisweep web`

Or via Docker (Playwright + Chromium pre-installed):

docker run --rm ghcr.io/enisgetmez/gisweep:latest arcgis \
    https://example.gov/arcgis/rest/services

Quick start

gisweep version
gisweep checks list
gisweep checks info ARC-002

# ArcGIS REST passive scan with multi-format report
gisweep arcgis https://example.gov/arcgis/rest/services \
    -o report.json -o report.sarif -o report.html

# OGC scan against a GeoServer instance
gisweep ogc https://geo.example.org/geoserver

# Headless-Chromium audit of a city portal
gisweep web https://city-portal.example/map -o web-report.json

# Secret scan over a build directory
gisweep secrets ./build/static/js/

# Auto-detect: figure out from the URL whether to dispatch ArcGIS / OGC / web
gisweep scan https://opaque.example/something

Active mode

--active runs intrusive checks: it actually attempts a write on a discovered FeatureServer or WFS-T endpoint, exercises SSRF vectors via Geometry/Print services, and probes default credentials. It is opt-in twice — both --active and --i-own-this-target (or --authorized-by <ticket>) are required, and every active call is appended to ~/.gisweep/audit.jsonl.

gisweep arcgis https://my-server.example/arcgis/rest/services \
    --active --i-own-this-target \
    --ssrf-canary https://my-canary.example/abc123

Never run --active against infrastructure you do not own or have written authorization to test. See SECURITY.md.

Refreshing the CVE database

uv run python -m scripts.refresh_cve_db --rate-delay 7

The script pulls from services.nvd.nist.gov/rest/json/cves/2.0 for every tracked CPE, dedupes by CVE id, and rewrites src/gisweep/data/cve_db.json. Pass --api-key <key> for the higher NVD rate limit.

License

Apache-2.0 — © 2026 Enis Getmez and contributors.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gisweep-0.1.0.tar.gz (128.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gisweep-0.1.0-py3-none-any.whl (142.5 kB view details)

Uploaded Python 3

File details

Details for the file gisweep-0.1.0.tar.gz.

File metadata

  • Download URL: gisweep-0.1.0.tar.gz
  • Upload date:
  • Size: 128.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for gisweep-0.1.0.tar.gz
Algorithm Hash digest
SHA256 abfe024a985b14636e5f04d0b023ec138c93c4e4796c0165b5dee05a48dec8b2
MD5 701603daf8934286cd420fcc44c2ffca
BLAKE2b-256 82fd6d452adf78cce22a41aae1ce373521f0247290b36bdd7552a53b2dd22c64

See more details on using hashes here.

File details

Details for the file gisweep-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: gisweep-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 142.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for gisweep-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 54ec6ea6a0f391e8658772149c984a667e7ff7afe7962d208e2311131deab5ec
MD5 b4751008775d3d224593cc4af05692d5
BLAKE2b-256 0bea83d29c97172c00ee7eb4681c813098c66fb7c31228e7907cdc844e19bf31

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page