API failure cutoff cannot retire a module that fails
Describe the bug api_failure_abort_threshold exists to retire a module whose API is failing. Two independent properties of its implementation mean it only fires on a sustained run of failures against everything the module talks to. A module that fails most of the time, or fails against one host while another stays healthy, runs for the entire scan and never reports a problem.
The threshold resolves to 10
web.api_retries = 2 # defaults.yml:122 self._default_api_retries = config web.api_retries, default 2 # base.py:168 api_retries = max(2+1, len(api_keys)) = 3 # base.py:367 _api_failure_abort_threshold = 3 # base.py:114 api_failure_abort_threshold = (3 * 3) + 1 = 10 # base.py:371
api_request retries internally — for _ in range(self.api_retries) (base.py:1340) . Each failed attempt increments the counter, so one fully-failed call contributes 3.
BBOT Command bbot -m dnsdumpster,bufferoverrun,virustotal -t evilcorp.com --debug
OS, BBOT Installation Method + Version OS: Ubuntu 24.04.4 LTS Installation method: git clone + uv (running from source) BBOT version: 3.0.2 Python: 3.12.3 Commit: d5c1526cc
BBOT Config
Secrets (API keys, tokens, etc.) have been redacted.
To include secrets, set "redact_secrets: false" in your preset or BBOT config.
description: befuddled_marilyn config: modules: trickest: {} builtwith: {} gitlab_onprem: {} leakix: {} fullhunt: {} securitytrails: {} ip2location: {} censys_ip: {} chaos: {} ipstack: {} shodan_dns: {} hunterio: {} dehashed: {} c99: {} virustotal: {} censys_dns: {} portscan: top_ports: 100 ping_first: true rate: 1000 dns: threads: 200 brute_threads: 2000 web: spider_distance: 1 spider_depth: 1 spider_links_per_page: 1 module_handle_event_timeout: 300 exclude_flags:
- download exclude_modules:
- baddns
- baddns_direct
- baddns_zone
- dnscaa
- gitlab_onprem
- shodan_idb
- trufflehog
- wayback flags:
- affiliates
- cloud-enum
- code-enum
- email-enum
- subdomain-enum modules:
- http
- portscan output_modules:
- csv
- json
- subdomains
Logs/Screenshots
If possible, produce the bug while --debug is enabled, and attach the relevant parts of the output.
Source: blacklanternsecurity/bbot