enisgetmez/gisweep
GitHub: enisgetmez/gisweep
专注 GIS 平台安全审计的 CLI 工具,检测 ArcGIS REST、OGC 服务及嵌入式 Web 地图的错误配置、密钥泄露与合规风险。
Stars: 4 | Forks: 0
# gisweep
[](https://pypi.org/project/gisweep/)
[](https://pypi.org/project/gisweep/)
[](https://github.com/enisgetmez/gisweep/actions/workflows/ci.yml)
[](https://pypi.org/project/gisweep/)
[](LICENSE)
[](https://github.com/enisgetmez/gisweep/)

`gisweep` 是一个开源的 CLI 工具,用于审计 GIS 平台中那些其他人未曾留意的错误配置:暴露匿名写入能力的 ArcGIS REST 服务、具有公共 WFS-Transactional 的 GeoServer/MapServer 端点、可从公共互联网访问的管理目录、泄露 API 密钥的嵌入式 Web 地图、未经身份验证即返回 PII(个人身份信息)的要素服务,以及具有公开 CVE 漏洞的过时服务器/客户端库。
每项发现都会映射到 KVKK 和 GDPR 的相关条款,以便审计结果可以直接用于合规报告。
## 为什么需要它
ArcGIS REST 和开源 OGC 技术栈(GeoServer、MapServer、QGIS Server)无处不在——市政、公用事业、交通、公共卫生——而且它们*总是*被错误配置。现有的 OSS 扫描器(nuclei、trivy、semgrep)无法理解 ArcGIS 或 OGC 的语义,而现有的合规工具也不懂 GIS。`gisweep` 通过一个协议感知引擎和由 Playwright 驱动的 Web 爬虫填补了这一空白,该爬虫能够在广阔的网络中找到嵌入的地图,并顺着其网络流量追踪到底层服务。扫描器的每项发现都会预先映射到 **KVKK Madde 12 / 9** 和 **GDPR Art. 32 / 5(1)(f)**,因此合规官员可以直接使用它,而无需进行晦涩的 CVSS 术语转换。
## 目前涵盖的内容
| 子命令 | 目标 | 检查项 |
|---|---|---|
| `gisweep arcgis ` | ArcGIS REST root | ARC-001 匿名枚举 · ARC-002 匿名写入能力 · ARC-003 管理端点暴露 · ARC-011 启用 Sync/Extract · ARC-012 启用 ExportTiles · ARC-013 无限制查询 · ARC-014 暴露 PII 字段 · ARC-015 过时的 ArcGIS Server CVE |
| `gisweep ogc ` | 通过 GeoServer / MapServer / QGIS Server / deegree 提供的 WMS / WFS | OGC-001 匿名 GetCapabilities · OGC-002 过时的服务器 CVE · OGC-005 WFS-T 匿名写入 |
| `gisweep web ` | 任何网页(Playwright 无头 Chromium) | WEB-001 嵌入式数据平面端点清单 · WEB-002 HTML/JS/XHR 中的机密泄露 · WEB-007 过时的客户端 GIS 库 CVE |
| `gisweep secrets ` | 任何 URL 或本地文件/目录 | SEC-001 硬编码的 API 密钥 / token / 私钥 |
| `gisweep scan ` | 自动检测(探测 URL,分发至 arcgis / ogc / web) | 以上所有内容 |
跨领域的**合规覆盖**:
- **COMP-001** KVKK Madde 12 聚合 — 匿名暴露了 ≥5 个包含 PII 的图层。
- **COMP-003** GDPR Art. 32 技术措施缺失 — 管理端点暴露且数据未经身份验证。
内置的 CVE 数据库(可通过 `scripts/refresh_cve_db.py` 从 NIST NVD 重新生成):
涵盖 ArcGIS Server、GeoServer、MapServer,并为 QGIS Server、deegree、GeoNetwork、Leaflet、OpenLayers、Mapbox GL JS、Cesium、ArcGIS API for JavaScript 预留了产品插槽。
## 输出格式
- Rich 控制台(默认)
- JSON(稳定的 schema `gisweep.report.v1`)
- SARIF 2.1.0(可被 GitHub Code Scanning、Azure DevOps 使用)
- HTML(独立文件、内嵌 CSS、KVKK/GDPR 标记)
- Markdown(对 GitHub 友好、包含 KVKK/GDPR 矩阵)
每种格式都会展示每项发现的 KVKK / GDPR / CWE / CVSS 元数据。
## 安装
```
pip install gisweep
playwright install chromium # one-time browser download for `gisweep web`
```
或者通过 Docker 安装(预装了 Playwright + Chromium):
```
docker run --rm ghcr.io/enisgetmez/gisweep:latest arcgis \
https://example.gov/arcgis/rest/services
```
## 快速开始
```
gisweep version
gisweep checks list
gisweep checks info ARC-002
# 多格式报告的 ArcGIS REST 被动扫描
gisweep arcgis https://example.gov/arcgis/rest/services \
-o report.json -o report.sarif -o report.html
# 针对 GeoServer 实例的 OGC 扫描
gisweep ogc https://geo.example.org/geoserver
# 城市门户的 Headless-Chromium 审计
gisweep web https://city-portal.example/map -o web-report.json
# 针对 build 目录的 Secret 扫描
gisweep secrets ./build/static/js/
# 自动检测:根据 URL 判断调度 ArcGIS / OGC / web
gisweep scan https://opaque.example/something
```
## 主动模式
`--active` 会运行侵入性检查:它实际上会尝试对发现的 FeatureServer 或 WFS-T 端点执行写入操作,通过 Geometry/Print 服务测试 SSRF 向量,并探测默认凭据。**这需要两次确认才能启用**——必须同时提供 `--active` 和 `--i-own-this-target`(或 `--authorized-by `),并且每一次主动调用都会被追加记录到 `~/.gisweep/audit.jsonl` 中。
```
gisweep arcgis https://my-server.example/arcgis/rest/services \
--active --i-own-this-target \
--ssrf-canary https://my-canary.example/abc123
```
切勿对您不拥有或未获得书面授权测试的基础设施运行 `--active`。请参阅 [SECURITY.md](SECURITY.md)。
## 刷新 CVE 数据库
```
uv run python -m scripts.refresh_cve_db --rate-delay 7
```
该脚本会从 `services.nvd.nist.gov/rest/json/cves/2.0` 拉取所跟踪的每个 CPE 的数据,按 CVE ID 去重,并重写 `src/gisweep/data/cve_db.json`。
传入 `--api-key ` 以获取更高的 NVD 请求速率限制。
## 许可证
[Apache-2.0](LICENSE) — © 2026 Enis Getmez 及贡献者。
标签:API密钥泄露, ArcGIS REST, CISA项目, GDPR, GeoServer, GIS, GraphQL安全矩阵, KVKK, MapServer, OGC, PII暴露, Playwright, Python, QGIS Server, Web地图, WFS, WMS, 公共部门安全, 反取证, 合规报告, 地理信息系统, 安全扫描器, 安全评估, 实时处理, 密码管理, 对抗攻击, 对称加密, 市政安全, 插件系统, 敏感信息检测, 数据泄露, 无后门, 特征检测, 空间数据安全, 网络安全, 网络安全, 自动化审计, 请求拦截, 逆向工具, 隐私保护, 隐私保护