Skip to content

Commit a92e99a

Browse files
Release v5.16.1 (#114)
* Reduce GTM false positives in malware sniffer * Update bundled scanner wordlists * Update bundled scanner wordlists * Add remote HTTP wordlist support * Improve path-specific transport failure * Add proxy-list rotation policy control * Add proxy-list rotation policy control * Add dotCMS fingerprint detection * Document retries fail streak scan guard * Fix ignored skip progress counter * Preserve proxy CLI overrides for resumed scans * Normalize progress counter width * Improve remote wordlist startup and header validation * Deduplicate fingerprint evidence output * Propagate entrypoint exit codes * Preserve fractional delay values * Validate port overrides consistently * Validate method overrides consistently * Validate recursive scan options consistently * Validate report output options consistently * Validate thread count options consistently * Normalize WAF option handling * Document CLI normalization rules * Preserve scan workspace during pause * Align indexof progress marker * Update early finish warning test * Simplify cache-control provider state * Harden rainbow logging formatter * Deduplicate fingerprint probe requests * Expand passive WAF vendor markers * Update dictionary * Add debug runtime diagnostics summary * Move debug runtime diagnostics below summary * Stop ignoring common discovery paths by default * Add regression coverage for fingerprint and text report branches * Prepare 5.16.1 release
1 parent f38d161 commit a92e99a

70 files changed

Lines changed: 10228 additions & 491 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,134 @@ If a risk cannot be eliminated with deterministic tests, document it in the resp
141141

142142
---
143143

144+
## CLI/config/session normalization rules
145+
146+
CLI arguments, wizard configuration values, and session resume snapshots must follow one consistent normalization model.
147+
148+
When adding or changing any CLI option that can also appear in `opendoor.conf`, wizard output, or session snapshots:
149+
150+
- keep `argparse` defaults as `None` when the option can be restored from wizard/session state;
151+
- place runtime defaults in `src/lib/browser/config.py`, not in `argparse`, when the default must not overwrite restored state;
152+
- validate direct CLI input in `src/core/options/filter.py`;
153+
- validate wizard/session values again in `BrowserConfig`, because those values may bypass CLI parsing;
154+
- preserve explicit CLI overrides in `Controller.scan_action()` after wizard/session params are restored;
155+
- keep direct launcher and installed entrypoint behavior aligned.
156+
157+
### Explicit override model
158+
159+
Use this precedence for runtime params:
160+
161+
```text
162+
explicit CLI value > session-loaded value > wizard/config value > BrowserConfig runtime default
163+
```
164+
165+
Do not let parser defaults overwrite wizard/session values.
166+
167+
For boolean `store_true` style flags, prefer:
168+
169+
```text
170+
argparse default=None
171+
BrowserConfig default=False
172+
```
173+
174+
This allows the controller to distinguish:
175+
176+
```text
177+
flag omitted -> do not override restored wizard/session state
178+
flag explicitly set -> override restored wizard/session state
179+
```
180+
181+
Do not add `--no-*` negation flags in a patch release unless the maintainer explicitly approves the new public CLI semantics.
182+
183+
### Boolean normalization
184+
185+
Boolean-like values from wizard/config/session must be normalized consistently.
186+
187+
Accepted true values:
188+
189+
```text
190+
true, True, 1, yes, on
191+
```
192+
193+
Accepted false values:
194+
195+
```text
196+
false, False, 0, no, off
197+
```
198+
199+
Invalid boolean-like values must fail early with a clear validation error.
200+
201+
### Numeric option normalization
202+
203+
Numeric options must not silently fall back when the user provided an invalid value.
204+
205+
Examples:
206+
207+
```text
208+
--threads 0
209+
--port 0
210+
--delay -1
211+
--recursive-depth 0
212+
```
213+
214+
Invalid explicit values must reach validation and fail early instead of being dropped as falsy values.
215+
216+
If an option has a runtime clamp, keep validation and clamping separate:
217+
218+
```text
219+
invalid range -> validation error
220+
valid high value -> documented runtime clamp, if legacy behavior requires it
221+
```
222+
223+
### CSV/list option normalization
224+
225+
CSV/list options must be normalized consistently:
226+
227+
- trim whitespace;
228+
- remove empty tokens unless an empty value has explicit semantics;
229+
- deduplicate while preserving order when duplicate execution would be harmful;
230+
- validate every token;
231+
- keep user-visible order when order affects behavior.
232+
233+
Unknown values must fail early instead of reaching plugin/report/runtime loading.
234+
235+
### Raw request interaction
236+
237+
When a CLI option can also be inferred from `--raw-request`, keep precedence deterministic:
238+
239+
```text
240+
explicit CLI value > raw-request value > runtime default
241+
```
242+
243+
Raw-request-derived values must pass the same validation helpers as direct CLI values.
244+
245+
### Required tests for CLI/config/session changes
246+
247+
For every new or changed CLI/config/session option, add or update tests for:
248+
249+
- normal CLI flow;
250+
- invalid CLI values;
251+
- wizard/config normalization;
252+
- session-load normalization;
253+
- explicit CLI override over wizard state;
254+
- explicit CLI override over session state;
255+
- `BrowserConfig` runtime default;
256+
- `BrowserConfig` validation for values that bypass CLI parsing;
257+
- direct launcher and installed entrypoint behavior when exit code or runtime execution can be affected.
258+
259+
Prefer focused tests in the existing suites:
260+
261+
```text
262+
tests.test_core_options
263+
tests.test_core_filter
264+
tests.test_controller
265+
tests.test_lib_browser_config
266+
```
267+
268+
Add runtime/session-specific tests only when the option affects scan execution, report output, fingerprinting, WAF behavior, transport, or session snapshots.
269+
270+
---
271+
144272
## Packaging rules
145273

146274
- Keep `pyproject.toml` present and valid.

CHANGELOG.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,41 @@
11
CHANGELOG
22
=======
3-
v5.16.0 (16.05.2026)
3+
v5.16.1 (24.05.2026)
4+
---------------------------
5+
- (fix) reduced duplicate fingerprint traffic by reusing exact same method+URL probe responses within a single fingerprint pass.
6+
- (fix) avoided false early-finish warnings when planned wordlist entries are intentionally skipped before HTTP submission, such as internally ignored paths.
7+
- (fix) aligned `indexof` runtime progress output with other sniffer findings by rendering it as `OK (IndexOf)` without changing detection or report semantics.
8+
- (fix) preserved managed runtime wordlist workspaces across interactive `Ctrl+C` pause/resume while keeping cleanup for aborts, process termination and normal scan completion.
9+
- (fix) normalized `--fingerprint` handling across CLI, wizard and session resume flows while keeping fingerprinting opt-in and cached session results reusable.
10+
- (fix) normalized WAF detection flags across CLI, wizard and session resume flows while preserving `waf_safe_mode` as an opt-in runtime profile that enables passive WAF detection.
11+
- (fix) validated `--threads` values, preserved explicit thread-count overrides for wizard/session resume flows, and raised the safe runtime thread clamp from 25 to 50.
12+
- (fix) validated scan report selections, normalized `--reports-dir`, and preserved explicit report output overrides for wizard/session resume flows.
13+
- (fix) validated recursive scan options, preserved explicit recursive CLI overrides for wizard/session resume flows, and kept recursive defaults stable at runtime.
14+
- (fix) validated `--method` values, preserved explicit method overrides for wizard/session resume flows, and kept raw-request method handling deterministic.
15+
- (fix) validated `--port` values as TCP ports, preserved explicit port overrides for wizard/session resume flows, and rejected invalid raw-request Host ports early.
16+
- (fix) propagated `--fail-on-bucket` exit codes through the installed `opendoor` entrypoint so CI/CD runs behave the same as `python opendoor.py`.
17+
- (fix) preserved fractional `--delay` values (0.1, 0.25...etc), rejected negative delays, and allowed explicit delay overrides for wizard/session resume flows.
18+
- (fix) reduced malware sniffer false positives by ignoring legitimate Google Tag Manager noscript hidden iframes while preserving detection for non-GTM hidden iframe injections.
19+
- (fix) kept scans running when individual paths exhaust configured retries while preserving configurable abort protection for consecutive retry failures.
20+
- (fix) ignored-path progress output so `skip [...]` shows the current scan position instead of `00000`.
21+
- (fix) proxy CLI overrides for wizard and session resume flows so explicit `--proxy`, `--proxy-pool`, and `--proxy-list --proxy-rotation` selections replace restored proxy settings correctly.
22+
- (fix) filtered/calibrated progress counters to use the same dynamic width as regular scan findings.
23+
- (fix) fingerprint evidence output to avoid repeating identical evidence values when the same marker is confirmed by multiple signal sources.
24+
- (fix) ResponseError: Unknown response status : `477` (non standart error) so scans no longer abort on unexpected HTTP status codes.
25+
- (fix) stopped pre-skipping common error, index, redirect-like, and not-found paths from the bundled ignore list so they are scanned and classified normally.
26+
- (fix) made active shadow probe requests honor the configured scan delay while preserving existing retry, timeout, proxy and request-stack behavior.
27+
- (enhancement) improved the active `shadow` sniffer with bounded path-template probes such as `{file}}2.{ext}` while keeping per-scan probe limits.
28+
- (enhancement) improved the `stacktrace` sniffer to detect exposed database connection identity errors like `Could not make a database connection using user@host` while avoiding generic connection-error false positives.
29+
- (enhancement) hardened `--header` validation and normalization, including wizard/session CLI override handling.
30+
- (enhancement) added remote HTTP(S) wordlist support through `--wordlist`, including streaming download progress and a 500 MB safety limit.
31+
- (enhancement) added `--proxy-rotation random|sequential` to control existing `--proxy-list` rotation, preserving `random` as the default and adding deterministic file-order sequential mode.
32+
- (enhancement) added DotCMS and DiafanCMS detection to `--fingerprint`.
33+
- (enhancement) added configurable `--retries-fail-streak` to control scan aborts after consecutive exhausted retry paths. Default: `10`.
34+
- (enhancement) expanded passive WAF recognition coverage with additional 21 WAF systems. Details : (https://opendoor.readthedocs.io/detection/waf-detection/).
35+
- (ux) added debug-only runtime diagnostics to the terminal scan summary.
36+
- (dictionary) cleaned and normalized the internal directories list (+2365 potential interesting paths).
37+
38+
v5.16.0 (17.05.2026)
439
---------------------------
540
- (fix) rendered fingerprint progress as a rotating single-line indicator and persisted only the final `done` state to reduce duplicate progress output.
641
- (fix) proxy and transport-loss handling: proxy scans now validate the proxy without directly probing the target, filtered proxy timeouts remain visible, and direct scans abort cleanly after repeated exhausted transport failures when a target goes offline mid-scan.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ It helps security researchers, penetration testers, bug bounty hunters, DevSecOp
5656
- subdomain enumeration;
5757
- multi-threading scans for faster lookups;
5858
- single target, target file, stdin, IPv4 CIDR, and IPv4 range input modes;
59-
- custom wordlists, prefixes, shuffling to break scan patterns and extension filters;
59+
- custom wordlists, prefixes, shuffling to break scan patterns and extension filters, remote wordlists supports;
6060
- custom request headers, cookies forwarding, and raw HTTP request templates;
6161
- response filters by status, size, text, regex, and body length;
6262
- response sniffers for detecting directory listings, empty responses, known file exposures, active shadow-copy probes, collation, possible exposed secrets, errors, exposed debug stack traces, and verified open redirect vulnerabilities;
@@ -107,7 +107,7 @@ OpenDoor includes a heuristic fingerprint engine for detecting probable applicat
107107

108108
| Category | Examples |
109109
|----------------------------|---|
110-
| CMS | WordPress, Drupal, Joomla, TYPO3, Open Journal Systems, InstantCMS, CMS.S3 / Megagroup, Discuz!, NetCat |
110+
| CMS | WordPress, Drupal, Joomla, TYPO3, Open Journal Systems, InstantCMS, DiafanCMS, CMS.S3 / Megagroup, Discuz!, NetCat |
111111
| E-commerce | Magento, WooCommerce, Shopify, PrestaShop, OpenCart, Shopware, Webasyst / Shop-Script |
112112
| Frameworks / app platforms | Laravel, Symfony, Django, Flask, FastAPI, Express, NestJS, Next.js, Nuxt, Rails, Spring |
113113
| Runtime / language stack | PHP, Node.js, JavaScript, Python, Ruby, .NET, Java/JVM, Elixir, static-site targets |
@@ -293,7 +293,7 @@ Useful sniffers include:
293293
| `skipsizes=46:1024` | Skip responses inside a noisy size range. |
294294
| `stacktrace` | Detect exposed debug/runtime stack traces and internal error details. |
295295
| `secret` | Detect possible exposed API keys, tokens, private keys and credentials with redacted report metadata. |
296-
| `shadow` | Actively probe confirmed `200 OK` file-like hits for exposed backup/shadow copies such as `.bak`, `.old` etc variants. |
296+
| `shadow` | Actively probe confirmed `200 OK` file-like hits for bounded backup/shadow variants such as `.bak`, `.old`, and path templates like `index2.php`. |
297297
| `openredirect` | Actively verify redirect-like query parameters with controlled marker URLs and report only confirmed open redirect vulnerabilities. |
298298
| `malware` | Detect possible malicious content, webshell markers, injected scripts or obfuscated payloads. |
299299

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.16.0
1+
5.16.1

0 commit comments

Comments
 (0)