Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
262 commits
Select commit Hold shift + click to select a range
e2b9402
Update scope accuracy test for sslcert HTTP_RESPONSE dependency
liquidsec Mar 27, 2026
294dedb
Fix module flags: web-basic→web, remove invalid aggressive/deadly flags
liquidsec Mar 27, 2026
0425a95
Fix Blacklist.get() crash when _make_event_seed returns None
liquidsec Mar 28, 2026
862c714
Strip quotes from DNS records in clean_dns_record()
liquidsec Mar 28, 2026
bcb218f
Handle certspotter rate-limit error responses gracefully
liquidsec Mar 28, 2026
391b6cc
Offload excavate YARA matching to thread pool via run_in_executor
liquidsec Mar 28, 2026
be5d190
Remove ip-* and http-title-* tags from http module, use _resolved_hos…
liquidsec Mar 28, 2026
8038ff2
Increase default thread pool size to prevent executor starvation
liquidsec Mar 28, 2026
c471785
Fix infinite loop in _drain_queues when module queue is None/False
liquidsec Mar 28, 2026
687f74d
web_brute: bump _module_threads to 4, wire rate/concurrency options
liquidsec Mar 28, 2026
2d7024f
Pin blasthttp >= 0.1.4 for min(global, per_call) rate limiting
liquidsec Mar 28, 2026
343ced4
Fix web_brute_shortnames missing concurrency/rate attrs from parent
liquidsec Mar 28, 2026
9b87b2c
Fix benchmark workflow: reset tracked files before branch checkout
liquidsec Mar 28, 2026
9611ad4
Separate CPU-bound thread pool from I/O executor
liquidsec Mar 30, 2026
c783e72
Name thread pools explicitly (run_in_executor_io/cpu), add backlog stats
liquidsec Mar 30, 2026
f96e3d1
Merge thread pool backlog into events-in-queue status line
liquidsec Mar 30, 2026
e97b880
ci: add CLA workflow
aconite33 Mar 30, 2026
dcdd46d
ci: add org members to CLA allowlist
aconite33 Mar 30, 2026
6d84a4a
ci: use dynamic org membership check for CLA
aconite33 Mar 30, 2026
646b6eb
fix: use GITHUB_TOKEN for org membership check in CLA workflow
aconite33 Mar 31, 2026
ee514b6
fix: handle org membership check for both PR and comment events
aconite33 Mar 31, 2026
1099707
fix: set commit status to success when skipping CLA for org members
aconite33 Mar 31, 2026
5318a7a
fix: use author_association for CLA membership check
aconite33 Mar 31, 2026
5ee7b34
fix: use org-scoped app token for membership check
aconite33 Mar 31, 2026
076b175
fix: use org-scoped app token for reliable CLA membership check
aconite33 Mar 31, 2026
593fe04
fix: disable lock-pullrequest-aftermerge in CLA workflow
aconite33 Mar 31, 2026
64c1afe
Merge remote-tracking branch 'origin/3.0' into blasthttp-integration-…
liquidsec Apr 1, 2026
648ce4e
fix CLA workflow to properly skip bots and check all committers
aconite33 Apr 1, 2026
83833e7
drop unnecessary actions:write and contents:write permissions
aconite33 Apr 1, 2026
de4f04b
Merge pull request #3013 from blacklanternsecurity/fix-cla-bot-skip
aconite33 Apr 1, 2026
649e32e
Merge remote-tracking branch 'origin/stable' into merge-stable-into-dev
aconite33 Apr 1, 2026
fde791c
Merge pull request #3016 from blacklanternsecurity/merge-stable-into-dev
aconite33 Apr 1, 2026
d57a125
Merge pull request #3017 from blacklanternsecurity/dev
aconite33 Apr 1, 2026
c6431ab
Reduce event loop saturation for major scan throughput improvement
liquidsec Apr 2, 2026
622088b
use blasthttp 0.2.0 native async, shrink IO thread pool
liquidsec Apr 3, 2026
5fbcbf1
Merge pull request #3021 from blacklanternsecurity/blasthttp-integrat…
liquidsec Apr 3, 2026
38fe7c0
merge blasthttp-integration-clean (resolve web_brute canary conflict)
liquidsec Apr 3, 2026
719c60e
clean up stale comment
liquidsec Apr 3, 2026
57b6b38
fix missing await in test_batch_rate_limit_min_wins
liquidsec Apr 3, 2026
0d4884b
Merge branch 'blasthttp-integration-clean' into eventloop-optimization
liquidsec Apr 3, 2026
b19ff4b
Merge 3.0: URL display format, redirect_location, memory minimize ref…
liquidsec Apr 3, 2026
0d68bcc
Merge blasthttp-integration-clean into eventloop-optimization
liquidsec Apr 3, 2026
cb6459a
Unify request_batch/request_custom_batch, fix task leak on early exit
liquidsec Apr 3, 2026
5cb09bd
Merge blasthttp-integration-clean: unified request_batch with worker …
liquidsec Apr 3, 2026
8abf7d8
Replace Python request_batch worker pool with native Rust blasthttp b…
liquidsec Apr 3, 2026
0317823
Merge pull request #3019 from blacklanternsecurity/eventloop-optimiza…
liquidsec Apr 3, 2026
271a65e
Fix request_batch mock: intercept at Rust client level so WebHelper.r…
liquidsec Apr 3, 2026
e7e61a9
Filter redirect-to-root hits in web_brute as soft 404s, remove dead i…
liquidsec Apr 3, 2026
cfd2d97
Filter WAF block pages in web_brute using YARA-compiled WAF strings
liquidsec Apr 4, 2026
8b45e5d
Reduce memory: free batch results during iteration, strip header/hash…
liquidsec Apr 4, 2026
40a6211
Strip WEB_PARAMETER processing fields in minimize()
liquidsec Apr 4, 2026
7f7e081
Strip dns_children, raw_dns_records, resolved_hosts in base minimize()
liquidsec Apr 4, 2026
b9f0641
Reduce http batch_size from 500 to 250 to lower peak memory per batch
liquidsec Apr 4, 2026
aa68002
Fix web_brute_shortnames missing waf_yara_rules from parent setup()
liquidsec Apr 4, 2026
876465b
Some fun adjectives :D
ausmaster Apr 7, 2026
09cbc86
Alphabet is hard
ausmaster Apr 7, 2026
1b5cdc2
Merge pull request #3030 from blacklanternsecurity/fun-stuff
ausmaster Apr 8, 2026
6f2abbe
Fix log spam: BlasthttpResponse body dumped via f-string interpolation
liquidsec Apr 12, 2026
f06144e
Merge branch '3.0' into blasthttp-integration-clean
liquidsec Apr 13, 2026
daf59f7
Remove noisy debug logging from paramminer and HttpCompare diff
liquidsec Apr 13, 2026
fdf9364
Reduce debug logging noise in event handling, paramminer, HttpCompare…
liquidsec Apr 13, 2026
c33ad4e
Remove intercept pipeline and output queueing debug noise
liquidsec Apr 13, 2026
c1579ca
Log paramminer binary_search entry only on top-level call
liquidsec Apr 13, 2026
c19fdfa
Fix graph orphans for omitted event types in preserve_graph output mo…
liquidsec Apr 14, 2026
5f8c8c3
Merge branch '3.0' into fix-graph-orphan
liquidsec Apr 14, 2026
60686f4
Merge remote-tracking branch 'origin/3.0' into blasthttp-integration-…
liquidsec Apr 14, 2026
eb7d948
Merge branch '3.0' into blasthttp-integration-clean
liquidsec Apr 14, 2026
d20d464
merge 3.0
TheTechromancer Apr 15, 2026
ad7c344
bump blastdns version, test wip
TheTechromancer Apr 15, 2026
97fafda
Fix iis_shortnames test referencing deleted httpx module
liquidsec Apr 16, 2026
6670cc1
Merge remote-tracking branch 'origin/blasthttp-integration-clean' int…
liquidsec Apr 16, 2026
487833f
Bump baddns to 2.1.0, pass blastdns client, MODERATE→MEDIUM
liquidsec Apr 16, 2026
f1cd3dd
Fix baddns_zone NSEC test for blastdns MockClient compatibility
liquidsec Apr 16, 2026
e63a693
work on tests
TheTechromancer Apr 16, 2026
233c86c
Merge pull request #2007 from blacklanternsecurity/3.0
TheTechromancer Apr 16, 2026
cecf097
Bump deepdiff from 8.6.1 to 8.6.2
dependabot[bot] Apr 16, 2026
978b7ec
Bump ruff from 0.15.4 to 0.15.9
dependabot[bot] Apr 16, 2026
84f6380
Merge branch 'dev' into blasthttp-integration-clean
liquidsec Apr 16, 2026
cc1ba9c
Bump tornado from 6.5.4 to 6.5.5
dependabot[bot] Apr 16, 2026
9114931
Merge branch 'dev' into blastdns
TheTechromancer Apr 16, 2026
7508702
Merge pull request #3026 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 16, 2026
3f7d3d4
Merge branch 'dev' into dependabot/pip/dev/deepdiff-8.6.2
liquidsec Apr 16, 2026
289d40e
fix some bugs
TheTechromancer Apr 16, 2026
20f5b92
bug fixing
TheTechromancer Apr 16, 2026
c78a840
merge dev
TheTechromancer Apr 16, 2026
c381d99
Merge pull request #2979 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 17, 2026
2b69e37
Update nuclei
blsaccess Apr 19, 2026
441a31c
Update fastapi requirement from <0.129.0,>=0.115.5 to >=0.115.5,<0.137.0
dependabot[bot] Apr 19, 2026
ef52e2b
Update mkdocstrings requirement from <0.31,>=0.22 to >=0.22,<1.1
dependabot[bot] Apr 19, 2026
9d0faaa
Update pytest-env requirement from <1.2.0,>=0.8.2 to >=0.8.2,<1.7.0
dependabot[bot] Apr 19, 2026
01a0d41
Update dnspython requirement from <2.8.0,>=2.7.0 to >=2.7.0,<2.9.0
dependabot[bot] Apr 19, 2026
8813dc0
Merge pull request #3048 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
55cf377
Merge pull request #3052 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
03b28f0
Bump pytest-asyncio from 1.2.0 to 1.3.0
dependabot[bot] Apr 20, 2026
f821f2b
Update cachetools requirement from <7.0.0,>=5.3.2 to >=5.3.2,<8.0.0
dependabot[bot] Apr 20, 2026
8c25a19
Merge pull request #3044 from blacklanternsecurity/update-nuclei
liquidsec Apr 20, 2026
3a41df6
Merge pull request #3051 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
77375cd
Merge pull request #3050 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
93c55b5
ruffed
TheTechromancer Apr 20, 2026
8a10731
Merge branch 'dev' into blastdns
TheTechromancer Apr 20, 2026
f43bf0d
better dns documentation, publish versioning
TheTechromancer Apr 20, 2026
a20ff02
Merge pull request #3053 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
9517f53
Merge branch 'dev' into blastdns
liquidsec Apr 21, 2026
57b7322
Fix benchmark workflow: reset tracked files before branch checkout
liquidsec Mar 28, 2026
498f33c
Merge pull request #3054 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 21, 2026
4b39d07
restore dns tests
TheTechromancer Apr 22, 2026
8600595
restore more original assertions
TheTechromancer Apr 22, 2026
7b47917
Merge pull request #3042 from blacklanternsecurity/blastdns
TheTechromancer Apr 22, 2026
dcbcac7
[create-pull-request] automated change
TheTechromancer Apr 23, 2026
4467c05
Merge branch 'dev' into blasthttp-integration-clean
liquidsec Apr 23, 2026
a1e453e
Merge pull request #3055 from blacklanternsecurity/update-docs
TheTechromancer Apr 23, 2026
dfcf17b
Fix portscan ping_first losing hostname correlation
liquidsec Apr 23, 2026
03d71d2
fix docs pipeline
TheTechromancer Apr 23, 2026
afc7640
update docs
TheTechromancer Apr 23, 2026
c643dc6
Merge pull request #3056 from blacklanternsecurity/fix-docs-pipeline
TheTechromancer Apr 23, 2026
fc34b3c
fix docs pipeline, again
TheTechromancer Apr 24, 2026
6b44199
better
TheTechromancer Apr 24, 2026
fe1263d
Bump blasthttp to 0.3.2
liquidsec Apr 24, 2026
3534205
Merge pull request #3018 from blacklanternsecurity/dependabot/pip/tor…
liquidsec Apr 24, 2026
45aa36c
Merge pull request #3057 from blacklanternsecurity/fix-docs-pipeline
TheTechromancer Apr 24, 2026
e3eb41d
bug: fix neo4j clienterror on host_metadata
cnnrshd Apr 25, 2026
ba36463
Merge branch 'blacklanternsecurity:stable' into neo4j-fix
cnnrshd Apr 25, 2026
85119a0
Update websockets requirement from <16.0.0,>=14.0.0 to >=14.0.0,<17.0.0
dependabot[bot] Apr 26, 2026
2953db4
Bump ruff from 0.15.10 to 0.15.12
dependabot[bot] Apr 26, 2026
a582684
paramminer: prune dead-weight wordlists
liquidsec Apr 26, 2026
6f774c1
paramminer: modern adds, dedicated cookies wordlist, mutate_case + br…
liquidsec Apr 26, 2026
7d01014
Merge branch 'dev' into neo4j-fix
TheTechromancer Apr 28, 2026
83a809a
Merge pull request #3065 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 28, 2026
49e24d9
Update pytest requirement from <9,>=8.3.1 to >=8.3.1,<10
dependabot[bot] Apr 28, 2026
29c554f
enhancement: in fingerprintx, emit `URL_UNVERIFIED` event upon detect…
TrebledJ Apr 28, 2026
eb4c79a
support ipv6, add test
TheTechromancer Apr 30, 2026
837359c
Merge pull request #3067 from blacklanternsecurity/paramminer-wordlis…
liquidsec May 1, 2026
1f93c7a
Merge pull request #3060 from cnnrshd/neo4j-fix
TheTechromancer May 1, 2026
9de96b6
Merge pull request #3068 from TrebledJ/patch-2
TheTechromancer May 1, 2026
f5e4ded
fix(test): parse baddns submodule source via file, not inspect.getsource
liquidsec May 1, 2026
16de8e0
Merge remote-tracking branch 'origin/dev' into blasthttp-integration-…
liquidsec May 1, 2026
5be4993
Merge pull request #3069 from blacklanternsecurity/fix-baddns-test-py313
TheTechromancer May 1, 2026
7faf668
Merge branch 'dev' into blasthttp-integration-clean
liquidsec May 1, 2026
f0d08e5
Restore _task_counter on precheck/postcheck without re-introducing ev…
liquidsec May 1, 2026
f448bf4
Remove vestigial _ensure_minimal_target shim
liquidsec May 1, 2026
9f9124b
Remove BBOTTarget pickle support
liquidsec May 1, 2026
554feb4
Restore compact form of test_manager_scope_accuracy.py and harden ruf…
liquidsec May 1, 2026
d1e5d59
Excavate: extract IPv6 URLs (#1815)
ChrisJr404 May 3, 2026
210b95e
Add Linktree to social module (#2399)
ChrisJr404 May 3, 2026
b3e40f5
Add Hetzner Object Storage bucket-cataloger module (#1876)
ChrisJr404 May 4, 2026
2c99274
Merge pull request #3072 from ChrisJr404/feat/social-linktree-2399
TheTechromancer May 4, 2026
a26ed7e
Merge pull request #3061 from blacklanternsecurity/dependabot/pip/dev…
liquidsec May 5, 2026
025dfb7
Update uvicorn requirement from <0.40,>=0.32 to >=0.32,<0.47
dependabot[bot] May 5, 2026
e38370f
update cloudcheck, baddns
TheTechromancer May 5, 2026
77f07d9
blashttp request_batch_stream
TheTechromancer May 5, 2026
61b7a29
update baddns version in modules
TheTechromancer May 5, 2026
5396147
http.py proper streaming
TheTechromancer May 5, 2026
d45f5fa
Merge pull request #3080 from blacklanternsecurity/blasthttp-streaming
liquidsec May 5, 2026
0ddf8f6
migrate to blasthttp 0.5.0: drop BlasthttpResponse wrapper, use blast…
liquidsec May 6, 2026
620bb82
Merge pull request #3073 from ChrisJr404/feat/bucket-hetzner-1876
TheTechromancer May 6, 2026
9130c81
bump blasthttp to 0.5.0 and rename web_brute -> webbrute
liquidsec May 7, 2026
3e0f53d
update web_brute -> webbrute references in modules, presets, and tests
liquidsec May 7, 2026
6ead620
style: ruff format
ChrisJr404 May 7, 2026
52dee5f
bump blasthttp to 0.5.1 (binary content fix in mock)
liquidsec May 7, 2026
107415f
Merge pull request #3071 from ChrisJr404/feat/excavate-ipv6-1815
liquidsec May 7, 2026
ce8a832
Merge pull request #3081 from blacklanternsecurity/blasthttp-mock-mig…
liquidsec May 7, 2026
64c2193
Merge pull request #3066 from blacklanternsecurity/dependabot/pip/dev…
liquidsec May 7, 2026
688dcfa
add scan memory benchmark instrumentation
liquidsec May 8, 2026
dccc968
spill HTTP_RESPONSE bodies to disk via per-scan LRU + zstd
liquidsec May 8, 2026
2cb07bc
Merge pull request #3083 from blacklanternsecurity/scan-memory-benchm…
liquidsec May 8, 2026
2d75eb4
fix _module_consumers leak in python output module
liquidsec May 8, 2026
ee85beb
Merge branch 'blasthttp-integration-clean' into http-body-spill
liquidsec May 8, 2026
c1f2677
fix python-module consumer-counter restore for non-module tests
liquidsec May 8, 2026
78eea8f
trim per-event memory footprint via lazy-init heavy fields
liquidsec May 8, 2026
ac0c6e9
fix gitdumper regex_files cwd-walk via mutable default args
liquidsec May 8, 2026
5df3903
gitdumper: add download size cap, recursion limit, cycle detection
liquidsec May 8, 2026
01e482d
Bump the github-actions group across 1 directory with 7 updates
dependabot[bot] May 10, 2026
893870b
Merge pull request #3086 from blacklanternsecurity/fix-gitdumper-cwd-…
TheTechromancer May 11, 2026
6e6e8de
Merge branch 'dev' into blasthttp-integration-clean
liquidsec May 11, 2026
209dc5f
Merge branch 'blasthttp-integration-clean' into http-body-spill
liquidsec May 11, 2026
694ea64
throttle ingress under memory pressure
liquidsec May 11, 2026
9135a16
Merge pull request #3063 from blacklanternsecurity/dependabot/pip/dev…
liquidsec May 12, 2026
7dd31c6
Merge pull request #3043 from blacklanternsecurity/dependabot/github_…
liquidsec May 12, 2026
e895bc0
Merge pull request #2992 from blacklanternsecurity/blasthttp-integrat…
liquidsec May 12, 2026
0190d32
CPU: swap weighted_shuffle to O(n log n), cache ip_address lookups
liquidsec May 12, 2026
0e11a32
Merge branch 'dev' into fix-graph-orphan
liquidsec May 12, 2026
c171610
use MappingProxyType for _EMPTY_DICT to prevent singleton poisoning
liquidsec May 13, 2026
a191047
revert _is_graph_important change; keep JS URL orphan repro test
liquidsec May 13, 2026
8e1ee99
remove smuggler module
liquidsec May 13, 2026
e892c8c
Merge pull request #3091 from blacklanternsecurity/remove-smuggler-mo…
liquidsec May 13, 2026
2dc7d3d
bump blasthttp to 0.6.0, pass files= through WebHelper
liquidsec May 14, 2026
cbaf9a3
Allow dnsbrute to accept a list of wordlists
SpamFaux May 14, 2026
9f3d042
fix gowitness server hint to use 'report server' subcommand (#3092)
liquidsec May 15, 2026
7b1e91d
nuclei: self-heal stale template state after killed update
liquidsec May 15, 2026
d6f1a56
remove parrot MIT-mirror override
liquidsec May 15, 2026
9a84da7
don't echo encrypted sudo password blob in askpass error
liquidsec May 15, 2026
abfa5b9
restore the few event-pipeline debug lines that aren't redundant
liquidsec May 15, 2026
c413772
Merge remote-tracking branch 'origin/dev' into logging-cleanup
liquidsec May 15, 2026
74dee07
ruff formatting fix
SpamFaux May 15, 2026
786be96
Move multi-wordlist merge logic into helpers.wordlist()
SpamFaux May 15, 2026
d2deb4c
Merge pull request #3098 from blacklanternsecurity/sudo-askpass-no-ci…
liquidsec May 15, 2026
9e21bd8
Merge pull request #3097 from blacklanternsecurity/parrot-mirror-over…
liquidsec May 15, 2026
9220d54
reject conflicting body kwargs in WebHelper.request()
liquidsec May 15, 2026
4cfaa9c
Merge pull request #3095 from blacklanternsecurity/gowitness-server-hint
liquidsec May 15, 2026
0adbb9c
isolate nuclei state under ~/.bbot/tools/nuclei-state/
liquidsec May 15, 2026
90a4776
Merge branch 'dev' into cpu-optimizations-2026
liquidsec May 15, 2026
dc87fbf
Merge branch 'dev' into http-body-spill
liquidsec May 15, 2026
8290635
Merge branch 'dev' into blasthttp-0.6.0
liquidsec May 15, 2026
a3ba08c
nuclei: allowlist subprocess env to block user env leaks
liquidsec May 16, 2026
d56548d
mirror request() body-kwarg conflict check in mock_blasthttp
liquidsec May 16, 2026
6ac5a5f
nuclei: flatten state dir to XDG layout, match all install phrasings
liquidsec May 16, 2026
e6c9b9d
fix env-isolation test: XDG_{CONFIG,CACHE}_HOME are set, not stripped
liquidsec May 16, 2026
01909f5
Merge branch 'dev' into feature/dnsbrute-multi-wordlist
liquidsec May 17, 2026
c4d3384
Update uvicorn requirement from <0.47,>=0.32 to >=0.32,<0.48
dependabot[bot] May 17, 2026
461e289
Bump ruff from 0.15.12 to 0.15.13
dependabot[bot] May 17, 2026
48313d7
require dnsresolve when DNS_NAME consumers are enabled
liquidsec May 18, 2026
f824ff0
Merge pull request #3100 from blacklanternsecurity/dependabot/pip/dev…
liquidsec May 18, 2026
9b739ef
check explicit opt-outs instead of dnsresolve absence
liquidsec May 18, 2026
d423533
Loosen retirejs test matching against upstream advisory drift
liquidsec May 18, 2026
38ab695
Merge pull request #3103 from blacklanternsecurity/retirejs-test-vers…
liquidsec May 18, 2026
e70ab34
Merge branch 'dev' into require-dnsresolve-for-dns-name-consumers
liquidsec May 18, 2026
783f586
Merge pull request #3093 from blacklanternsecurity/blasthttp-0.6.0
liquidsec May 18, 2026
6f82e01
Merge pull request #3102 from blacklanternsecurity/require-dnsresolve…
liquidsec May 18, 2026
cc7e561
Merge pull request #3036 from blacklanternsecurity/logging-cleanup
liquidsec May 18, 2026
8f03afe
cloudcheck: skip storage-bucket regex pass for IP-only events
liquidsec May 19, 2026
cfcb56c
Merge branch 'dev' into feature/dnsbrute-multi-wordlist
liquidsec May 19, 2026
de9488d
wire bbot_io_api_key config through ASNHelper to asndb
liquidsec May 19, 2026
c0774fb
pin wpscan to 3.8.28 for ruby 3.2 compat
liquidsec May 20, 2026
afc6dbf
Merge pull request #3111 from blacklanternsecurity/pin-wpscan-ruby-3.…
liquidsec May 20, 2026
af020b6
Merge branch 'dev' into wire-up-bbot-io-api-key
liquidsec May 20, 2026
8f38751
Merge pull request #3110 from blacklanternsecurity/wire-up-bbot-io-ap…
liquidsec May 20, 2026
bafd045
point anubisdb at anubisdb.com
liquidsec May 20, 2026
6d463a7
remove digitorus module
liquidsec May 20, 2026
f10d1a9
Fix set() non-determinism and remove redundant truncation code
SpamFaux May 20, 2026
b899bf0
Merge pull request #3085 from blacklanternsecurity/http-body-spill
liquidsec May 20, 2026
2806a94
Merge pull request #3113 from blacklanternsecurity/anubisdb-new-endpoint
liquidsec May 20, 2026
fbc8fad
Merge pull request #3114 from blacklanternsecurity/remove-digitorus
liquidsec May 20, 2026
b4778f3
Merge pull request #3107 from blacklanternsecurity/cloudcheck-skip-bu…
liquidsec May 20, 2026
d17935a
bump blasthttp to 0.7.0
liquidsec May 20, 2026
6ea71f2
Merge pull request #3038 from blacklanternsecurity/fix-graph-orphan
ausmaster May 20, 2026
0fbe70a
Merge pull request #3116 from blacklanternsecurity/bump-blasthttp-0.7.0
liquidsec May 20, 2026
1f2d9cf
Merge branch 'dev' into feature/dnsbrute-multi-wordlist
liquidsec May 21, 2026
0c98ba8
ruff format
liquidsec May 21, 2026
376d508
Document multi-wordlist support in other wordlist-using modules
liquidsec May 21, 2026
1fa8512
Merge pull request #3099 from blacklanternsecurity/dependabot/pip/dev…
liquidsec May 21, 2026
361c0cc
Merge pull request #3096 from blacklanternsecurity/nuclei-template-up…
liquidsec May 21, 2026
d23dfd5
Document URL/path validity in legba wordlist descriptions
liquidsec May 21, 2026
cd872de
Validate wordlist input at top of wordlist()
liquidsec May 21, 2026
402cff1
Merge branch 'dev' into feature/dnsbrute-multi-wordlist
liquidsec May 21, 2026
cc5d641
remove sitedossier module
liquidsec May 21, 2026
24c9379
remove passivetotal module
liquidsec May 21, 2026
e7e2f3f
Merge pull request #3121 from blacklanternsecurity/remove-sitedossier
liquidsec May 21, 2026
ffc5e34
Merge pull request #3088 from blacklanternsecurity/cpu-optimizations-…
liquidsec May 21, 2026
f971cb2
Merge pull request #3122 from blacklanternsecurity/remove-passivetotal
liquidsec May 21, 2026
feacaba
Merge pull request #3094 from blacklanternsecurity/feature/dnsbrute-m…
liquidsec May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:

# Comment on PR with benchmark results
- name: Comment benchmark results on PR
uses: actions/github-script@v8
uses: actions/github-script@v9
with:
script: |
const fs = require('fs');
Expand Down
97 changes: 97 additions & 0 deletions .github/workflows/cla.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: "CLA Assistant"
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, closed, synchronize]

permissions:
pull-requests: write
statuses: write

jobs:
CLAAssistant:
runs-on: ubuntu-latest
steps:
- name: Generate token from GitHub App
id: app-token
uses: actions/create-github-app-token@v3
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: blacklanternsecurity

- name: Check all committers against org and allowlist
id: cla-check
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: |
if [ "${{ github.event_name }}" = "pull_request_target" ]; then
PR_NUM="${{ github.event.pull_request.number }}"
else
PR_NUM="${{ github.event.issue.number }}"
fi

COMMITTERS=$(gh api "repos/${{ github.repository }}/pulls/$PR_NUM/commits" --paginate --jq '.[].author.login' | sort -u)
ALL_EXEMPT=true

for LOGIN in $COMMITTERS; do
# treat commits with no associated GitHub login as non-exempt
if [ -z "$LOGIN" ] || [ "$LOGIN" = "null" ]; then
echo "Unknown committer (no GitHub login) — not exempt"
ALL_EXEMPT=false
break
fi

EXEMPT=false

# check if account type is Bot (GitHub App accounts)
AUTHOR_TYPE=$(gh api "users/${LOGIN}" --jq '.type' 2>/dev/null || echo "Unknown")
if [ "$AUTHOR_TYPE" = "Bot" ]; then
echo "$LOGIN is a Bot account — exempt"
EXEMPT=true
fi

# check org membership
if [ "$EXEMPT" = "false" ]; then
if gh api "orgs/blacklanternsecurity/members/$LOGIN" > /dev/null 2>&1; then
echo "$LOGIN is an org member — exempt"
EXEMPT=true
fi
fi

if [ "$EXEMPT" = "false" ]; then
echo "$LOGIN is not exempt — CLA required"
ALL_EXEMPT=false
break
fi
done

echo "all_exempt=$ALL_EXEMPT" >> "$GITHUB_OUTPUT"

- name: Skip CLA when all committers are exempt
if: steps.cla-check.outputs.all_exempt == 'true' && github.event_name == 'pull_request_target'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh api --method POST "repos/${{ github.repository }}/statuses/${{ github.event.pull_request.head.sha }}" \
-f state=success \
-f context="CLAAssistant" \
-f description="CLA check skipped — all committers are org members or bots"

- name: "CLA Assistant"
if: |
(steps.cla-check.outputs.all_exempt != 'true') &&
((github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target')
uses: contributor-assistant/github-action@v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PERSONAL_ACCESS_TOKEN: ${{ steps.app-token.outputs.token }}
with:
path-to-signatures: "signatures/version1/cla.json"
path-to-document: "https://github.com/blacklanternsecurity/CLA/blob/main/ICLA.md"
branch: "main"
allowlist: "dependabot[bot],github-actions[bot],renovate[bot]"
remote-organization-name: "blacklanternsecurity"
remote-repository-name: "CLA"
lock-pullrequest-aftermerge: "false"
8 changes: 0 additions & 8 deletions .github/workflows/distro_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,6 @@ jobs:
. /etc/os-release
if [ "$ID" = "ubuntu" ] || [ "$ID" = "debian" ] || [ "$ID" = "kali" ] || [ "$ID" = "parrotsec" ]; then
export DEBIAN_FRONTEND=noninteractive
# Pin Parrot to MIT mirror to avoid stale third-party mirrors (e.g. mirror.clarkson.edu)
# Note: parrotsec/security image reports ID=debian, so we detect via parrot.list
if [ -f /etc/apt/sources.list.d/parrot.list ]; then
rm -f /etc/apt/sources.list /etc/apt/sources.list.old /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources
echo "deb https://mirrors.mit.edu/parrot/ echo main contrib non-free non-free-firmware" > /etc/apt/sources.list.d/parrot.list
echo "deb https://mirrors.mit.edu/parrot/ echo-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list.d/parrot.list
echo "deb https://mirrors.mit.edu/parrot/ echo-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list.d/parrot.list
fi
apt-get update
apt-get -y install curl git bash build-essential docker.io libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
elif [ "$ID" = "alpine" ]; then
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/docs_updater.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install dependencies
run: uv sync --group dev
run: uv sync --frozen --group dev
- name: Generate docs
run: |
uv run bbot/scripts/docs.py
uv run --no-sync bbot/scripts/docs.py
- name: Create or Update Pull Request
uses: peter-evans/create-pull-request@v8
with:
Expand Down
48 changes: 25 additions & 23 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
name: pytest-debug-logs-${{ env.PYTHON_VERSION }}
path: pytest_debug.log
- name: Upload Code Coverage
uses: codecov/codecov-action@v5
uses: codecov/codecov-action@v6
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./cov.xml
Expand All @@ -61,9 +61,9 @@ jobs:
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
Expand All @@ -76,30 +76,36 @@ jobs:
- name: Calculate version
id: calc_version
run: |
# Get base version from latest stable tag (exclude rc tags, strip 'v' prefix)
LATEST_STABLE_TAG=$(git describe --tags --abbrev=0 --exclude="*rc*")
BASE_VERSION=$(echo "$LATEST_STABLE_TAG" | sed 's/^v//')
# Source of truth for base version is pyproject.toml
BASE_VERSION=$(python3 -c "
import re
text = open('pyproject.toml').read()
print(re.search(r'^version\s*=\s*\"([^\"]+)\"', text, re.MULTILINE).group(1))
")

if [[ "${{ github.ref }}" == "refs/heads/stable" ]]; then
# Stable: clean version from tag
VERSION="$BASE_VERSION"
elif [[ "${{ github.ref }}" == "refs/heads/dev" ]]; then
# Dev: version.distancerc (e.g., 3.0.0.123rc)
DISTANCE=$(git rev-list ${LATEST_STABLE_TAG}..HEAD --count)
# Dev: base version + commit distance from stable as rc (e.g., 3.0.0.123rc)
STABLE_HEAD=$(git rev-parse origin/stable 2>/dev/null || git rev-list --max-parents=0 HEAD)
DISTANCE=$(git rev-list ${STABLE_HEAD}..HEAD --count)
VERSION="${BASE_VERSION}.${DISTANCE}rc"
fi

echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Calculated version: $VERSION"

# Write version to file for hatchling to pick up
echo "__version__ = \"$VERSION\"" > bbot/_version.py
# For dev builds, write the rc version to pyproject.toml for hatchling
# Stable builds use pyproject.toml as-is
if [[ "${{ github.ref }}" == "refs/heads/dev" ]]; then
sed -i "s/^version = .*/version = \"$VERSION\"/" pyproject.toml
fi
- name: Build Pypi package
if: github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/dev'
run: uv build
- name: Publish Pypi package
if: github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/dev'
uses: pypa/gh-action-pypi-publish@release/v1.13
uses: pypa/gh-action-pypi-publish@release/v1.14
with:
password: ${{ secrets.PYPI_API_TOKEN }}
- name: Get BBOT version
Expand All @@ -115,18 +121,16 @@ jobs:
echo "BBOT_VERSION_MAJOR=$MAJOR" >> $GITHUB_OUTPUT
- name: Publish to Docker Hub (dev)
if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
push: true
context: .
tags: |
blacklanternsecurity/bbot:dev
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION }}
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR_MINOR }}
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR }}
- name: Publish to Docker Hub (stable)
if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
push: true
context: .
Expand All @@ -138,19 +142,17 @@ jobs:
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR }}
- name: Publish Full Docker Image to Docker Hub (dev)
if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
push: true
file: Dockerfile.full
context: .
tags: |
blacklanternsecurity/bbot:dev-full
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION }}-full
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR_MINOR }}-full
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR }}-full
- name: Publish Full Docker Image to Docker Hub (stable)
if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
push: true
file: Dockerfile.full
Expand Down Expand Up @@ -239,7 +241,7 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install dependencies
run: uv sync --only-group docs
run: uv sync --frozen --group docs
- name: Configure Git
run: |
git config user.name github-actions
Expand All @@ -253,11 +255,11 @@ jobs:
- name: Generate docs (stable branch)
if: github.ref == 'refs/heads/stable'
run: |
uv run mike deploy Stable
uv run --no-sync mike deploy Stable
- name: Generate docs (dev branch)
if: github.ref == 'refs/heads/dev'
run: |
uv run mike deploy Dev
uv run --no-sync mike deploy Dev
- name: Publish docs
run: |
git switch gh-pages
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ __pycache__/
/data/
/neo4j/
.DS_Store
pytest_debug.log
17 changes: 9 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ BBOT has extremely thorough tests, including **one or more individual tests for
## Tooling

- **Package manager**: [uv](https://docs.astral.sh/uv/)
- **Linter/formatter**: [ruff](https://docs.astral.sh/ruff/) (pinned to 0.15.2)
- **Linter/formatter**: [ruff](https://docs.astral.sh/ruff/) (pinned to 0.15.10)
- **Test framework**: [pytest](https://docs.pytest.org/) with pytest-asyncio
- **Python**: 3.10 - 3.14

Expand Down Expand Up @@ -146,6 +146,7 @@ Key helpers:
| Helper | What it does |
|--------|-------------|
| `self.helpers.request(url)` | Make an HTTP request (with retries, SSL handling, etc.) |
| `self.helpers.blasthttp` | Shared blasthttp client (rate-limited via `web.http_rate_limit` config) |
| `self.helpers.resolve(host)` | DNS resolution |
| `self.helpers.is_ip(s)` | Check if string is an IP |
| `self.helpers.is_dns_name(s)` | Check if string is a hostname |
Expand Down Expand Up @@ -219,7 +220,7 @@ from .base import ModuleTestBase

class TestMyModule(ModuleTestBase):
async def setup_after_prep(self, module_test):
module_test.httpx_mock.add_response(
module_test.blasthttp_mock.add_response(
url="https://api.example.com/lookup?domain=blacklanternsecurity.com",
json={"emails": ["info@blacklanternsecurity.com"]},
)
Expand Down Expand Up @@ -370,7 +371,7 @@ Whether to process seed events (the initial targets provided to the scan).
Whether to accept "special" URLs (e.g. JavaScript files) that are not normally distributed to web modules.

```python
# httpx.py - needs to process all URLs including special ones
# http.py - needs to process all URLs including special ones
accept_url_special = True
```

Expand Down Expand Up @@ -535,7 +536,7 @@ _preserve_graph = True
Exclude this module from scan statistics. Used by output and report modules.

##### `_disable_auto_module_deps` (bool) -- default: `False`
Prevent BBOT from automatically enabling dependency modules. For example, if your module watches `URL` events, BBOT normally auto-enables `httpx`. Set this to `True` to prevent that.
Prevent BBOT from automatically enabling dependency modules. For example, if your module watches `URL` events, BBOT normally auto-enables `http`. Set this to `True` to prevent that.

---

Expand Down Expand Up @@ -875,7 +876,7 @@ class TestMyModule(ModuleTestBase):
targets = ["http://127.0.0.1:8888"]

# Optional: override which modules are enabled
modules_overrides = ["httpx", "my_module"]
modules_overrides = ["http", "my_module"]

# Optional: override config
config_overrides = {"modules": {"my_module": {"some_option": True}}}
Expand All @@ -887,7 +888,7 @@ class TestMyModule(ModuleTestBase):
async def setup_after_prep(self, module_test):
"""Called AFTER the scan is prepared. Modify modules, add mocks here."""
# Mock an HTTP response
module_test.httpx_mock.add_response(
module_test.blasthttp_mock.add_response(
url="https://api.example.com/lookup?domain=blacklanternsecurity.com",
json={"results": ["sub.blacklanternsecurity.com"]},
)
Expand Down Expand Up @@ -920,7 +921,7 @@ The test lifecycle runs:

### Test Utilities

- **`module_test.httpx_mock`** - mock HTTP responses (from pytest-httpx)
- **`module_test.blasthttp_mock`** - mock HTTP responses
- **`module_test.httpserver`** - real HTTP server on port 8888
- **`module_test.httpserver_ssl`** - real HTTPS server on port 9999
- **`module_test.mock_dns(data)`** - mock DNS responses
Expand All @@ -933,7 +934,7 @@ Real example -- `test_module_robots.py`:
```python
class TestRobots(ModuleTestBase):
targets = ["http://127.0.0.1:8888"]
modules_overrides = ["httpx", "robots"]
modules_overrides = ["http", "robots"]
config_overrides = {"modules": {"robots": {"include_sitemap": True}}}

async def setup_after_prep(self, module_test):
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ pipx install --pip-args '\--pre' bbot

_For more installation methods, including [Docker](https://hub.docker.com/r/blacklanternsecurity/bbot), see [Getting Started](https://www.blacklanternsecurity.com/bbot/Stable/)_

> **Speed tip:** BBOT's DNS engine spins up ten workers per resolver in `/etc/resolv.conf`. Adding more unfiltered resolvers dramatically speeds up scans. See the [sample resolv.conf](docs/data/resolv-sample.conf) and [Tips and Tricks](https://www.blacklanternsecurity.com/bbot/Stable/scanning/tips_and_tricks/#speed-up-scans-with-more-dns-resolvers) for details.

## Example Commands

### 1) Subdomain Finder
Expand Down
6 changes: 4 additions & 2 deletions bbot/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from importlib.metadata import version, PackageNotFoundError

try:
from bbot._version import __version__
except ImportError:
__version__ = version("bbot")
except PackageNotFoundError:
__version__ = "0.0.0"
1 change: 0 additions & 1 deletion bbot/_version.py

This file was deleted.

Loading
Loading