summit-scanner 0.6.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. summit_scanner-0.6.7/LICENSE +21 -0
  2. summit_scanner-0.6.7/PKG-INFO +332 -0
  3. summit_scanner-0.6.7/README.md +318 -0
  4. summit_scanner-0.6.7/pyproject.toml +30 -0
  5. summit_scanner-0.6.7/setup.cfg +4 -0
  6. summit_scanner-0.6.7/summit/__init__.py +3 -0
  7. summit_scanner-0.6.7/summit/authorize.py +137 -0
  8. summit_scanner-0.6.7/summit/captcha.py +55 -0
  9. summit_scanner-0.6.7/summit/cli.py +366 -0
  10. summit_scanner-0.6.7/summit/crawl/__init__.py +0 -0
  11. summit_scanner-0.6.7/summit/crawl/js_endpoints.py +57 -0
  12. summit_scanner-0.6.7/summit/crawl/spider.py +154 -0
  13. summit_scanner-0.6.7/summit/cve.py +120 -0
  14. summit_scanner-0.6.7/summit/fuzz/__init__.py +0 -0
  15. summit_scanner-0.6.7/summit/fuzz/dirbuster.py +87 -0
  16. summit_scanner-0.6.7/summit/graphql.py +62 -0
  17. summit_scanner-0.6.7/summit/http/__init__.py +0 -0
  18. summit_scanner-0.6.7/summit/http/client.py +97 -0
  19. summit_scanner-0.6.7/summit/http/models.py +91 -0
  20. summit_scanner-0.6.7/summit/openapi.py +103 -0
  21. summit_scanner-0.6.7/summit/paramminer.py +99 -0
  22. summit_scanner-0.6.7/summit/proxy/__init__.py +0 -0
  23. summit_scanner-0.6.7/summit/proxy/server.py +168 -0
  24. summit_scanner-0.6.7/summit/ratelimit.py +40 -0
  25. summit_scanner-0.6.7/summit/recon.py +143 -0
  26. summit_scanner-0.6.7/summit/report/__init__.py +0 -0
  27. summit_scanner-0.6.7/summit/report/writer.py +124 -0
  28. summit_scanner-0.6.7/summit/scan/__init__.py +0 -0
  29. summit_scanner-0.6.7/summit/scan/core.py +125 -0
  30. summit_scanner-0.6.7/summit/scan/engine.py +159 -0
  31. summit_scanner-0.6.7/summit/scan/linkcheck.py +224 -0
  32. summit_scanner-0.6.7/summit/scan/modules/__init__.py +28 -0
  33. summit_scanner-0.6.7/summit/scan/modules/cacheable.py +52 -0
  34. summit_scanner-0.6.7/summit/scan/modules/cors_reflect.py +46 -0
  35. summit_scanner-0.6.7/summit/scan/modules/crlf.py +44 -0
  36. summit_scanner-0.6.7/summit/scan/modules/csrf.py +47 -0
  37. summit_scanner-0.6.7/summit/scan/modules/directory_listing.py +49 -0
  38. summit_scanner-0.6.7/summit/scan/modules/enumeration.py +55 -0
  39. summit_scanner-0.6.7/summit/scan/modules/headers_grade.py +58 -0
  40. summit_scanner-0.6.7/summit/scan/modules/host_header.py +51 -0
  41. summit_scanner-0.6.7/summit/scan/modules/open_redirect.py +66 -0
  42. summit_scanner-0.6.7/summit/scan/modules/os_command.py +84 -0
  43. summit_scanner-0.6.7/summit/scan/modules/path_traversal.py +45 -0
  44. summit_scanner-0.6.7/summit/scan/modules/sensitive_files.py +59 -0
  45. summit_scanner-0.6.7/summit/scan/modules/sqli.py +81 -0
  46. summit_scanner-0.6.7/summit/scan/modules/sqli_time.py +84 -0
  47. summit_scanner-0.6.7/summit/scan/modules/ssti.py +57 -0
  48. summit_scanner-0.6.7/summit/scan/modules/waf_bypass.py +64 -0
  49. summit_scanner-0.6.7/summit/scan/modules/xss.py +76 -0
  50. summit_scanner-0.6.7/summit/scan/passive.py +273 -0
  51. summit_scanner-0.6.7/summit/smart.py +45 -0
  52. summit_scanner-0.6.7/summit/takeover.py +65 -0
  53. summit_scanner-0.6.7/summit/tls.py +144 -0
  54. summit_scanner-0.6.7/summit/toolkit.py +71 -0
  55. summit_scanner-0.6.7/summit/updates.py +155 -0
  56. summit_scanner-0.6.7/summit/waf.py +54 -0
  57. summit_scanner-0.6.7/summit_scanner.egg-info/PKG-INFO +332 -0
  58. summit_scanner-0.6.7/summit_scanner.egg-info/SOURCES.txt +72 -0
  59. summit_scanner-0.6.7/summit_scanner.egg-info/dependency_links.txt +1 -0
  60. summit_scanner-0.6.7/summit_scanner.egg-info/entry_points.txt +2 -0
  61. summit_scanner-0.6.7/summit_scanner.egg-info/requires.txt +3 -0
  62. summit_scanner-0.6.7/summit_scanner.egg-info/top_level.txt +1 -0
  63. summit_scanner-0.6.7/tests/test_fp_guards.py +139 -0
  64. summit_scanner-0.6.7/tests/test_linkcheck.py +63 -0
  65. summit_scanner-0.6.7/tests/test_models.py +43 -0
  66. summit_scanner-0.6.7/tests/test_new_checks.py +128 -0
  67. summit_scanner-0.6.7/tests/test_passive.py +57 -0
  68. summit_scanner-0.6.7/tests/test_retries.py +66 -0
  69. summit_scanner-0.6.7/tests/test_severity.py +22 -0
  70. summit_scanner-0.6.7/tests/test_tls.py +46 -0
  71. summit_scanner-0.6.7/tests/test_v05.py +100 -0
  72. summit_scanner-0.6.7/tests/test_v06.py +168 -0
  73. summit_scanner-0.6.7/tests/test_v068.py +142 -0
  74. summit_scanner-0.6.7/tests/test_waf.py +145 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pennacle Security
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,332 @@
1
+ Metadata-Version: 2.4
2
+ Name: summit-scanner
3
+ Version: 0.6.7
4
+ Summary: Summit - open-source web security testing platform (proxy, scanner, fuzzer) by Pennacle Security
5
+ Author: Pennacle Security
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: requests>=2.31
11
+ Requires-Dist: pyyaml>=6.0
12
+ Requires-Dist: packaging>=23.0
13
+ Dynamic: license-file
14
+
15
+ <p align="center">
16
+ <img src="docs/assets/banner.png" alt="summit" width="760">
17
+ </p>
18
+
19
+ <p align="center">
20
+ <a href="https://github.com/pennacle-security/summit/actions/workflows/tests.yml"><img src="https://github.com/pennacle-security/summit/actions/workflows/tests.yml/badge.svg" alt="CI status"></a>
21
+ <a href="https://github.com/pennacle-security/summit/releases"><img src="https://img.shields.io/github/v/tag/pennacle-security/summit?label=release&color=2ea44f" alt="release"></a>
22
+ <a href="https://www.bestpractices.dev/projects/15532"><img src="https://www.bestpractices.dev/projects/15532/badge" alt="CII Best Practices"></a>
23
+ <a href="https://api.scorecard.dev/projects/github.com/pennacle-security/summit/badge"><img src="https://api.scorecard.dev/projects/github.com/pennacle-security/summit/badge" alt="OpenSSF Scorecard"></a>
24
+ <a href="https://pennacle-security.github.io/summit/"><img src="https://img.shields.io/badge/docs-live-2ea44f" alt="docs"></a>
25
+ <img src="https://img.shields.io/badge/python-3.10%2B-3776ab" alt="python 3.10+">
26
+ <img src="https://img.shields.io/github/license/pennacle-security/summit?color=8b949e" alt="MIT license">
27
+ <img src="https://img.shields.io/badge/dependencies-requests%20only-8b949e" alt="one dependency">
28
+ </p>
29
+
30
+ <p align="center">One scriptable CLI for web security testing: scanner, proxy, fuzzer, authorization testing, WAF analysis, link-hijack detection and recon.<br>Free where the equivalents are paid - by <a href="https://github.com/pennacle-security">Pennacle Security</a>.</p>
31
+
32
+ ---
33
+
34
+ We use Burp and ZAP every day. We also kept wanting three things they are not: a scanner we can script against in CI, findings that tell us how sure they are, and a codebase small enough to read in one sitting. Summit is that tool - v0.5, MIT, one dependency (`requests`), built in the open.
35
+
36
+ **Full documentation:** [pennacle-security.github.io/summit](https://pennacle-security.github.io/summit/)
37
+
38
+ ## Contents
39
+
40
+ 1. [At a glance](#at-a-glance)
41
+ 2. [Quick start](#quick-start)
42
+ 3. [Proof, not promises](#proof-not-promises)
43
+ 4. [Commands](#commands)
44
+ 5. [Feature notes](#feature-notes)
45
+ 6. [Anti false positives and false negatives](#anti-false-positives-and-false-negatives)
46
+ 7. [Check catalog](#check-catalog)
47
+ 8. [How summit compares](#how-summit-compares)
48
+ 9. [Roadmap](#roadmap)
49
+ 10. [Community and contributors](#community-and-contributors)
50
+ 11. [Contributing and security](#contributing-and-security)
51
+ 12. [Legal and license](#legal-and-license)
52
+
53
+ ## At a glance
54
+
55
+ Capabilities that usually sit behind paid tooling, plus the scanning core:
56
+
57
+ | Capability | Summit | The usual route |
58
+ |---|---|---|
59
+ | Broken access control testing (BOLA/IDOR) | `summit authorize` | Autorize-style add-on / paid workflows |
60
+ | Hidden parameter discovery | `summit mine` | Param Miner-style add-on |
61
+ | OpenAPI-driven scanning | `summit scan --openapi` | add-ons |
62
+ | WAF fingerprinting + bypass probing | built in | partial / add-ons |
63
+ | Broken-link hijack detection | built in | paid extension |
64
+ | SQLi, XSS, redirect, traversal, takeover, host header, CORS | built in | core scanners (free) |
65
+ | Recon chain: subfinder -> httpx -> nmap | `summit recon` | manual gluing |
66
+ | Rate limiting, retries, JWT/encoder toolkit | built in | add-ons / paid |
67
+ | CI-ready, confidence-labelled findings | the whole point | paid automation |
68
+
69
+ Every finding carries a confidence label: `confirmed` (an observed fact) or `potential` (a heuristic). That distinction runs through the entire tool.
70
+
71
+ ## Quick start
72
+
73
+ ```bash
74
+ git clone https://github.com/pennacle-security/summit.git
75
+ cd summit
76
+ pip install -e .
77
+ ```
78
+
79
+ Python 3.10+. Then watch it work against a deliberately vulnerable local target:
80
+
81
+ ```bash
82
+ python examples/vuln_app.py # terminal 1 - the target (127.0.0.1 only)
83
+ summit scan http://127.0.0.1:8765 # terminal 2 - the scan
84
+ ```
85
+
86
+ A fuller pass on a real engagement looks like this:
87
+
88
+ ```bash
89
+ summit recon target.com --json recon.json # subdomains -> hosts -> ports
90
+ summit scan https://target.com --depth 2 --rate 10 # crawl + all checks
91
+ summit scan --openapi api-spec.json # API: scan what the spec admits to
92
+ summit authorize https://target.com/admin?user=1 \
93
+ --role 'admin=Cookie: session=abc' \
94
+ --role 'user=Cookie: session=xyz' # BOLA/IDOR testing
95
+ ```
96
+
97
+ ## Proof, not promises
98
+
99
+ Every claim on this page is reproduced by [`examples/evidence.py`](examples/evidence.py) - it runs the demo target live, measures each feature, and prints PASS/FAIL with the real numbers. CI executes it on every push; a claim that stops holding fails the build.
100
+
101
+ <details>
102
+ <summary>Latest measured run (<code>python examples/evidence.py</code>)</summary>
103
+
104
+ ```text
105
+ [PASS] full scan: 16 seeded check families detected, zero false positives
106
+ 53 findings in 22.9s (344 requests), missing=none, control link flagged=no, 19 finding(s) carry confidence=confirmed
107
+ [PASS] resource takeover fingerprint detected on the target's own 404
108
+ Possible AWS S3 resource takeover | AWS S3: 'nosuchbucket'
109
+ [PASS] host header injection: marker domain echoed back by the app
110
+ Host: summit-host-probe.example -> reflected (reset-link poisoning surface)
111
+ [PASS] CORS reflects an arbitrary origin with credentials allowed
112
+ ACAO: https://summit-cors-probe.example; ACAC: true
113
+ [PASS] WAF bypass: naive filter blocks, tampered payload lands decoded
114
+ raw payload -> HTTP 403 (blocked); URL-encoded once -> HTTP 200, payload reflected decoded: True
115
+ [PASS] CAPTCHA challenge detected (reported, not solved)
116
+ /login -> reCAPTCHA via marker 'recaptcha/api.js'
117
+ [PASS] rate limiting: --rate 5 paces 12 requests to ~2.2s; unlimited runs free
118
+ 12 requests at rate 5 -> 2.20s (theoretical floor: 2.2s); 12 requests unlimited -> 0.02s
119
+ [PASS] concurrency on a latency-bearing target: 8 workers vs serial
120
+ 40 requests x 25ms latency: serial 1.33s -> parallel 0.18s (7.3x speedup)
121
+ [PASS] smart prioritizer ranks known-injectable parameters first
122
+ probing starts with: [('query', 'search?query=laptop'), ('id', 'user?id=1'), ('url', 'example.com')]
123
+ [PASS] toolkit decodes JWT header/payload and states the signature is unverified
124
+ signature NOT verified - decoding only
125
+ [PASS] update check compares versions numerically (0.3 < 0.10)
126
+ is_outdated('0.3.0', '0.10.0') -> True; is_outdated('1.0.0', '0.9.9') -> False
127
+ [PASS] broken access control: admin panel served identically to a low-privilege role
128
+ verdict=broken; finding=Broken access control (BOLA/IDOR candidate)
129
+ [PASS] hidden parameter mining finds the undocumented debug parameter, zero noise
130
+ 1 finding(s): ['debug'] (all confirmed reflections)
131
+ [PASS] openapi-driven scan: spec alone leads the engine to seeded SQLi and XSS
132
+ 2 spec target(s) scanned -> 10 findings, sqli-error=yes, xss-reflection=yes
133
+ [PASS] OS command injection: marker executed and echoed by the server
134
+ semicolon: exec marker x2, control marker x1 | CWE-78
135
+ [PASS] server-side template injection: {{7*7}} came back as 49
136
+ Jinja2/Twig: {{7*7}} -> 49 | CWE-1336
137
+ [PASS] CRLF injection: X-Summit-CRLF header materialized in the response
138
+ X-Summit-CRLF: injected | CWE-113
139
+ [PASS] sensitive file exposure: /.env confirmed by content signature
140
+ content signature: 'APP_KEY=' | CWE-538
141
+ [PASS] CVE detection: Apache/2.4.49 banner maps to known CVEs
142
+ detect_cves('Apache/2.4.49') -> ['CVE-2021-41773', 'CVE-2021-42013']
143
+
144
+ evidence summary: 19/19 claims verified
145
+ ```
146
+
147
+ </details>
148
+
149
+ A visual of a real scan against the demo target:
150
+
151
+ <p align="center">
152
+ <img src="docs/assets/demo.png" alt="real summit scan output against the local demo target" width="760">
153
+ </p>
154
+
155
+ Reproduce everything yourself:
156
+
157
+ ```bash
158
+ python examples/vuln_app.py # terminal 1 - the target
159
+ summit scan http://127.0.0.1:8765
160
+ python examples/evidence.py # re-verify every claim above
161
+ ```
162
+
163
+ The demo seeds a *healthy* outbound link (`https://example.com`) as a negative control - it must never be reported, and CI asserts that alongside the seeded detections. Found something wrong anyway? [Report it](https://github.com/pennacle-security/summit/issues/new?template=bug_report.yml).
164
+
165
+ ## Commands
166
+
167
+ | Command | What it does |
168
+ |---|---|
169
+ | `summit scan <url>` | crawl, then passive + active checks, link health, WAF analysis. `--openapi` scans a spec instead of crawling. `--json` / `--html` reports. |
170
+ | `summit authorize <url...>` | BOLA/IDOR testing: compare responses between two roles. |
171
+ | `summit mine <url>` | hidden parameter discovery (~70 candidates, marker-based). |
172
+ | `summit fuzz <url>` | directory brute force with wildcard-baseline filtering. |
173
+ | `summit recon <domain>` | chain subfinder -> httpx -> nmap into one report. |
174
+ | `summit tls <host>` | certificate expiry / self-signed / legacy TLS version audit. |
175
+ | `summit proxy` | intercepting HTTP proxy with a SQLite site map. |
176
+ | `summit repeater <file>` | send a raw request file (Burp-style). |
177
+ | `summit encode` / `summit decode` | base64, URL, hex, JWT (decode-only, honestly unverified). |
178
+ | `summit --check-update` / `--auto-update` / `--install-tools` | versioning and recon tool installer. |
179
+
180
+ Shared flags on scanning commands: `--workers`, `--rate` (requests/second ceiling), `--retries` (with `Retry-After` support), `--timeout`, `--delay`.
181
+
182
+ ## Feature notes
183
+
184
+ **Authorization testing.** Requests each URL as a privileged and a low-privilege role, then compares. Verdicts: `enforced` (roles differ), `broken` (identical response for the low-privilege role - critical, `confirmed`), `partial` (same status, different body - `potential`). Measured on the demo: the admin panel serves salaries to both roles, caught as `confirmed`.
185
+
186
+ **Hidden parameter mining.** Servers read parameters the HTML never mentions - debug switches, feature flags, internal overrides. ~70 candidate names are probed with unique markers; reflection findings are `confirmed`, status/size shifts are `potential`. Measured: the demo's undocumented `debug` switch found as `confirmed`, the other candidates silent - zero noise.
187
+
188
+ **OpenAPI-driven scanning.** Every documented endpoint becomes a target, with path params filled from examples and defaults - no crawling, no guessing. Measured: the spec alone leads the engine to the seeded SQLi and XSS. JSON specs natively; YAML needs converting first (the dependency list stays at exactly one).
189
+
190
+ **WAF detection and bypass.** Tight vendor signatures for Cloudflare, AWS WAF, Akamai, Imperva, ModSecurity, Sucuri, F5 and Wordfence. When a filter blocks standard payloads, tamper variants (single/double URL-encoding, comment splitting, case alternation) are tried - and a bypass is reported only when the original payload lands **decoded** in the response. Measured: raw payload -> HTTP 403; encoded once -> HTTP 200, decoded.
191
+
192
+ **OS command injection, SSTI, CRLF, sensitive files.** New in v0.6, each with a hard confirmation rule: OS command injection uses an exec marker plus a control probe (a server that merely reflects input shows both markers; a server that executes shows the exec marker more often - measured `x2 vs x1`), SSTI requires `{{7*7}}` to come back as `49`, CRLF requires our injected header to materialize, and sensitive files (`.env`, `.git/config`, backups) require a content signature - never just a 200. Every finding is tagged with its CWE automatically (CWE-78, CWE-1336, CWE-113, CWE-538), and version banners are matched against an offline CVE database (spoofable banners stay `potential`).
193
+
194
+ **CAPTCHA: detect, do not solve.** reCAPTCHA, hCaptcha, Cloudflare Turnstile and challenge pages are detected and reported. Solving them automatically is out of scope by design - that line does not move.
195
+
196
+ **Broken-link hijacking.** Every outbound link is health-checked: dead domains (DNS verified twice), parked domains (tight fingerprints), broken links (404/410), unreachable hosts, and private-target links - recorded but never fetched, so a hostile page cannot weaponize your scanner as an SSRF probe.
197
+
198
+ **Resource takeover fingerprints.** A 404 answered with a provider's unclaimed-resource page (AWS S3, GitHub Pages, Heroku, Azure, Shopify, Fastly, Pantheon, Tumblr, Surge, Bitbucket) is a takeover setup. Fingerprint-only: no DNS tricks, no active claiming, ever.
199
+
200
+ **Recon orchestration.** subfinder -> httpx -> nmap, whichever are installed, with defensive parsing: passive-DNS noise capped, per-tool timeouts degrade into notes, and a crashed nmap is reported as *failed* - never as "no open ports".
201
+
202
+ **Rate limiting and prioritization.** `--rate` is a thread-safe requests/second ceiling (measured: 12 requests paced to 2.20s at rate 5; 0.02s unlimited). A transparent scoring model orders high-signal parameters first - deterministic and auditable, deliberately not a "neural network" claim.
203
+
204
+ **Toolkit and updates.** JWT decode with an honest "signature NOT verified" note, base64/URL/hex both directions, numeric version comparison against GitHub releases (`0.3 < 0.10`), self-update from a git checkout.
205
+
206
+ ## Anti false positives and false negatives
207
+
208
+ False positives waste your triage time. False negatives get clients breached. Summit engineers against both, and the evidence runner proves it:
209
+
210
+ | Mechanism | What it kills |
211
+ |---|---|
212
+ | **Two-stage XSS check** - a unique canary goes first; payloads only fire on parameters that actually reflect | payload noise on parameters that never reflect |
213
+ | **Baseline diffing** - every probe compared against the same request untouched | error strings already sitting in the page |
214
+ | **Divergence + baseline match** (boolean SQLi) - `AND 1=1` must match the baseline, `AND 1=2` must differ | pages that simply vary per request |
215
+ | **Wildcard baseline** (fuzzer) - a random nonexistent path is measured first | "everything returns 200" servers flooding the report |
216
+ | **DNS double-check** (linkcheck) - a host must fail to resolve twice | transient resolver hiccups becoming fake hijack reports |
217
+ | **SSRF guard** - private/link-local/metadata ranges recorded, never fetched | your scanner weaponized against internal networks |
218
+ | **Tamper honesty** (WAF bypass) - requires the payload decoded in the response | bypass reports that would not survive a browser |
219
+ | **Tracker/opaque param filter** - `utm_*`, `fbclid`, 40+ char tokens never probed | wasted requests and padded reports |
220
+ | **Negative control in CI** - a healthy link that must stay unreported, asserted every push | silent regressions into false-positive territory |
221
+ | **Scope lock** - the spider never leaves the target host | crawling half the internet, and legal exposure |
222
+ | **Confidence labels** - fact vs heuristic, on every finding | one flat "everything is critical" triage queue |
223
+ | **Unbreakable probe hosts** - `.example` cannot resolve | third-party callbacks and accidental DoS |
224
+
225
+ ## Check catalog
226
+
227
+ | Check | Type | Severity | Confirmation basis |
228
+ |---|---|---|---|
229
+ | Missing security headers | passive | low | header absence |
230
+ | Cookie flags (Secure / HttpOnly / SameSite) | passive | low-medium | header parse |
231
+ | SQL error / stack-trace disclosure | passive | medium | baseline-diffed signatures |
232
+ | Server and tech version disclosure | passive | info | header parse |
233
+ | CORS wildcard with credentials | passive | low | header parse |
234
+ | Email exposure | passive | info | regex |
235
+ | WAF fingerprint | passive | info | tight vendor signatures |
236
+ | CAPTCHA / anti-bot challenge | passive | info | challenge markers, reported not solved |
237
+ | Resource takeover signature | passive | high | provider unclaimed-resource page on 404 -> `confirmed` |
238
+ | SQL injection, error-based | active | critical | fresh DB error vs baseline -> `confirmed` |
239
+ | SQL injection, boolean-based | active | critical | response divergence -> `potential` |
240
+ | SQL injection, time-based blind | active | critical | calibrated delay reproduced on every probe -> `potential` |
241
+ | GraphQL introspection enabled | passive-origin | low | real `__schema` payload -> `confirmed` |
242
+ | Reflected XSS | active | high | canary + raw payload reflection -> `confirmed` |
243
+ | WAF filter bypass | active | high | tampered payload lands decoded -> `confirmed` |
244
+ | Host header injection | active | high | marker domain echoed vs baseline -> `confirmed` |
245
+ | CORS origin reflection | active | high | arbitrary origin reflected + credentials -> `confirmed` |
246
+ | OS command injection | active | critical | exec marker outruns control marker -> `confirmed`, CWE-78 |
247
+ | Server-side template injection (RCE) | active | critical | `{{7*7}}` evaluates to 49 -> `confirmed`, CWE-1336 |
248
+ | CRLF injection / response splitting | active | high | injected header materializes -> `confirmed`, CWE-113 |
249
+ | Sensitive file exposure (.env, .git) | passive-origin | high | content signature, not just a 200 -> `confirmed`, CWE-538 |
250
+ | Known CVE in version banner | passive | high | offline CVE database match -> `potential` (banners spoof) |
251
+ | Open redirect | active | medium | 3xx Location to probe host -> `confirmed` |
252
+ | Path traversal | active | high | OS file indicators -> `confirmed` |
253
+ | Broken access control (BOLA/IDOR) | authorize | critical | identical response for low-privilege role -> `confirmed` |
254
+ | Hidden parameter (reflected) | mine | medium | unique marker reflected -> `confirmed` |
255
+ | Hidden parameter (behavior) | mine | low | status/size shift -> `potential` |
256
+ | Link to dead domain (hijack) | linkcheck | high | DNS failure, verified twice -> `confirmed` |
257
+ | Link to parked domain (hijack) | linkcheck | high | tight parking fingerprints -> `confirmed` |
258
+ | Broken outbound link | linkcheck | medium | HTTP 404/410 -> `confirmed` |
259
+ | Unreachable outbound link | linkcheck | low | fails after retry -> `potential` |
260
+ | Outbound link to private IP | linkcheck | info | DNS resolution -> `confirmed`, never fetched |
261
+ | TLS certificate expired / self-signed | tls | high-medium | certificate dates and issuer -> `confirmed` |
262
+ | Legacy TLS versions accepted | tls | medium | handshake completed with TLSv1.0/1.1 -> `confirmed` |
263
+ | Directory fuzz | fuzz | info | status + wildcard baseline |
264
+
265
+ ## How summit compares
266
+
267
+ | | summit | ZAP | Burp Suite |
268
+ |---|---|---|---|
269
+ | Price | free, MIT | free | paid core |
270
+ | UI | CLI + HTML/JSON reports | full GUI | full GUI |
271
+ | Scriptable in CI | yes, that is the point | add-ons | paid automation |
272
+ | Confidence-labelled findings | yes | partial | partial |
273
+ | Authorization testing (Autorize-style) | built in, scriptable | add-on | paid workflows |
274
+ | Hidden parameter mining (Param Miner-style) | built in | add-on | add-on |
275
+ | OpenAPI-driven scanning | built in | add-on | add-on |
276
+ | WAF detection + bypass probing | built in | partial | partial |
277
+ | Broken-link hijacking | built in | add-on | paid extension |
278
+ | Rate limiting | built in, thread-safe | add-on | paid |
279
+ | JWT/encoder toolkit | built in | add-on | built in |
280
+ | Takeover fingerprints, host header, CORS | built in | add-ons | add-ons |
281
+ | Codebase you can audit in an afternoon | ~3.6k lines | large | closed source |
282
+ | TLS-intercepting proxy | on the roadmap | yes | yes |
283
+
284
+ We are not trying to replace either of them. Summit is the small tool you drop into a pipeline or onto a VPS box, and the codebase you can actually read line by line.
285
+
286
+ ## Roadmap
287
+
288
+ - [ ] TLS interception in the proxy (generated CA)
289
+ - [ ] POST form and JSON body injection points
290
+ - [ ] Authenticated scanning (cookies, headers)
291
+ - [ ] CNAME-level subdomain takeover (DNS resolution + service verification)
292
+ - [ ] Plugin API for custom checks
293
+ - [ ] Request interception UI
294
+
295
+ ## Community and contributors
296
+
297
+ A repository that helps people back grows through word-of-mouth:
298
+
299
+ - **Questions** -> [Q&A discussion](https://github.com/pennacle-security/summit/discussions/categories/q-a) - beginner questions welcome, answered gladly
300
+ - **Ideas & roadmap votes** -> [Ideas](https://github.com/pennacle-security/summit/discussions/categories/ideas)
301
+ - **Show what you scanned** -> [Show and tell](https://github.com/pennacle-security/summit/discussions/categories/show-and-tell)
302
+ - **Your first contribution** -> [good first issues](https://github.com/pennacle-security/summit/labels/good%20first%20issue) come with step-by-step instructions
303
+ - First issues and PRs get a personal review and a spot below; the welcome bot says hello too
304
+
305
+ If summit saved you time on an engagement, a star helps the next person find it.
306
+
307
+ <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
308
+ <!-- prettier-ignore-start -->
309
+ <!-- markdownlint-disable -->
310
+
311
+ <table>
312
+ <tbody>
313
+ <tr>
314
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/SakarPaisen"><img src="https://avatars.githubusercontent.com/u/141169555?v=4?s=100" width="100px;" alt="SakarPaisen"/><br /><sub><b>SakarPaisen</b></sub></a><br /><a href="https://github.com/pennacle-security/summit/commits?author=SakarPaisen" title="Code">💻</a></td>
315
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/mrvi0"><img src="https://avatars.githubusercontent.com/u/196581611?v=4?s=100" width="100px;" alt="mrvi0"/><br /><sub><b>mrvi0</b></sub></a><br /><a href="https://github.com/pennacle-security/summit/commits?author=mrvi0" title="Code">💻</a></td>
316
+ </tr>
317
+ </tbody>
318
+ </table>
319
+
320
+ <!-- markdownlint-enable -->
321
+ <!-- prettier-ignore-end -->
322
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
323
+
324
+ ## Contributing and security
325
+
326
+ PRs welcome - the [contributing guide](https://github.com/pennacle-security/.github/blob/main/CONTRIBUTING.md) covers the process, and adding a scan check is roughly thirty lines if you follow the pattern. [examples/vuln_app.py](examples/vuln_app.py) gives you a live target to test against.
327
+
328
+ Security issues go through private disclosure only. Details in the [security policy](https://github.com/pennacle-security/.github/blob/main/SECURITY.md).
329
+
330
+ ## Legal and license
331
+
332
+ Summit is built for authorized security testing: your own systems, or systems you have written permission to test. We are not responsible for misuse. Licensed under [MIT](LICENSE).