Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
606 commits
Select commit Hold shift + click to select a range
bafc1ef
Move always_emit check after _omit clause and add tests
liquidsec Mar 2, 2026
80c92c8
Fix formatting
liquidsec Mar 2, 2026
610c3f4
Merge pull request #2934 from blacklanternsecurity/fix-omit-events
liquidsec Mar 2, 2026
4d2a844
Merge branch '3.0' into asn-as-targets
liquidsec Mar 2, 2026
692cb85
use API instead of python library, add in_scope_only option, warnings
TheTechromancer Mar 2, 2026
691285e
Merge branch '3.0' into stable
TheTechromancer Mar 2, 2026
f8e11a6
fix tests for 3.0
TheTechromancer Mar 2, 2026
48f44c1
ruffed
TheTechromancer Mar 2, 2026
6fdb2fd
Fix double-parsing of targets in BBOTTarget init
liquidsec Mar 2, 2026
0da987c
Merge branch '3.0' into fix-target-double-parsing
liquidsec Mar 2, 2026
deeb2aa
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 2, 2026
8232d69
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 2, 2026
e42be78
baddns preset tiers, auto-filter submodules, rename intense→heavy
liquidsec Mar 1, 2026
0224798
baddns preset tiers, auto-filter submodules, rename intense→heavy
liquidsec Mar 1, 2026
cc18e37
Merge pull request #2940 from blacklanternsecurity/fix-target-double-…
TheTechromancer Mar 2, 2026
a93b378
merge dev
TheTechromancer Mar 2, 2026
0b5460e
Merge branch '3.0' into asn-as-targets
liquidsec Mar 2, 2026
3a48e1e
agents.md
TheTechromancer Mar 2, 2026
a7a25fd
remove slop
TheTechromancer Mar 2, 2026
754a9a1
fix ASN target len() overflow and JSON serialization errors
liquidsec Mar 2, 2026
fc96554
store ASN event data as dict for proper JSON round-trip
liquidsec Mar 2, 2026
b651f90
fix ASN event display in logs and discovery context
liquidsec Mar 2, 2026
b098da1
remove stale whitelist references
liquidsec Mar 2, 2026
933c41c
adding the goodest boy
liquidsec Mar 2, 2026
ce64621
last vulnerability references
liquidsec Mar 3, 2026
ec4094e
Merge pull request #2941 from blacklanternsecurity/agents-md
TheTechromancer Mar 3, 2026
f7fa624
Merge branch '3.0' into asn-as-targets
liquidsec Mar 3, 2026
7aed19a
Fix lightfuzz crash on non-ASCII parameter values in is_base64()
liquidsec Mar 3, 2026
798f6b7
Merge branch '3.0' into asn-as-targets
liquidsec Mar 4, 2026
9c238be
lint
liquidsec Mar 4, 2026
f6ae3a1
Merge pull request #2939 from Control-Punk-Delete/stable
TheTechromancer Mar 4, 2026
3587ce4
Suppress excavate JWT detection when badsecrets is enabled, add confi…
liquidsec Mar 4, 2026
ab1a6ed
Fix lightfuzz deserialization Error Resolution false positives
liquidsec Mar 4, 2026
389b8aa
Fix excavate crash when jQuery parameter extraction fails JSON parsing
liquidsec Mar 4, 2026
7c95b33
Make user_agent_suffix a proper config value
liquidsec Mar 4, 2026
74c371f
Fix interactsh poll loop: backoff, max retries, clean shutdown
liquidsec Mar 4, 2026
34d5895
Add lightfuzz SSRF submodule, generalize interactsh callback
liquidsec Mar 4, 2026
2e397d9
Reduce padding oracle false positives in lightfuzz crypto module
liquidsec Mar 4, 2026
6935a64
Add tests for narrow-charset rejection and jitter confirmation round
liquidsec Mar 5, 2026
f313b69
Fix Parrot CI failures by using official mirror directly
liquidsec Mar 5, 2026
236b02f
Use MIT mirror for Parrot CI instead of broken redirector
liquidsec Mar 5, 2026
8576715
Clear all existing Parrot sources before setting MIT mirror
liquidsec Mar 5, 2026
01d8e90
Detect Parrot via parrot.list, not ID (image reports ID=debian)
liquidsec Mar 5, 2026
06600a2
Improve event memory footprint
liquidsec Mar 5, 2026
07ae9c3
Avoid redundant regex compilation and string ops in modules
liquidsec Mar 5, 2026
1d633cc
Fix lightfuzz crash when additional_param_value is None in crypto sub…
liquidsec Mar 5, 2026
4aa554c
ruff format
liquidsec Mar 5, 2026
2bc27d6
Merge pull request #2953 from blacklanternsecurity/memory-optimizations
TheTechromancer Mar 5, 2026
4215b10
Merge pull request #2952 from blacklanternsecurity/fix-parrot-test
TheTechromancer Mar 5, 2026
f65a4b6
Merge pull request #2951 from blacklanternsecurity/padding-oracle-fp-…
TheTechromancer Mar 5, 2026
f57c72f
Merge pull request #2950 from blacklanternsecurity/lightfuzz-ssrf-and…
TheTechromancer Mar 5, 2026
6c54d2f
Merge pull request #2949 from blacklanternsecurity/user-agent-suffix-…
TheTechromancer Mar 5, 2026
85e8e42
Merge pull request #2944 from blacklanternsecurity/lightfuzz-deserial…
TheTechromancer Mar 5, 2026
cf3d21f
Merge pull request #2930 from blacklanternsecurity/events-attribution…
TheTechromancer Mar 5, 2026
eb5df19
Fix orphaned asyncio tasks causing 'Task was destroyed but it is pend…
liquidsec Mar 4, 2026
1398d8f
Fix unclosed file handles in module loader
liquidsec Mar 4, 2026
3774696
Merge pull request #2943 from blacklanternsecurity/fix/task-destroyed…
TheTechromancer Mar 5, 2026
b04301f
Merge branch '3.0' into 3.0-lightfuzzdocs
liquidsec Mar 5, 2026
8c96a1d
fix fonflicts
TheTechromancer Mar 5, 2026
8691e3b
moderate -> medium
TheTechromancer Mar 5, 2026
62f3750
Add SSRF submodule to lightfuzz docs, rename MODERATE confidence to M…
liquidsec Mar 5, 2026
4219861
Merge pull request #2918 from blacklanternsecurity/3.0-lightfuzzdocs
TheTechromancer Mar 5, 2026
13b46b9
Merge branch '3.0' into duplicate-jwt-detection
liquidsec Mar 5, 2026
9a97782
Filter JWT IdentifyOnly in badsecrets instead of suppressing excavate…
liquidsec Mar 5, 2026
3fed726
Move legba module out of deadly folder and remove deadly directory
liquidsec Mar 5, 2026
40ef697
Merge pull request #2956 from blacklanternsecurity/move-legba
TheTechromancer Mar 5, 2026
015c53f
Merge branch '3.0' into dependabot/github_actions/dev/github-actions-…
liquidsec Mar 5, 2026
033971a
Migrate ASN helper to asndb library and address PR review comments
liquidsec Mar 5, 2026
b90f1d3
Merge 3.0 into improve-azure-functions
liquidsec Mar 5, 2026
a736ac0
Merge pull request #2942 from blacklanternsecurity/duplicate-jwt-dete…
liquidsec Mar 5, 2026
d817d91
Merge pull request #2907 from blacklanternsecurity/improve-azure-func…
liquidsec Mar 5, 2026
c5a08c1
Merge pull request #2936 from blacklanternsecurity/dependabot/github_…
liquidsec Mar 5, 2026
f83189b
Migrate to radixtarget 4.x with composition pattern
liquidsec Mar 5, 2026
e2b184c
Fix asndb API calls and radixtarget 4.x string-only compatibility
liquidsec Mar 6, 2026
08483fb
lint
liquidsec Mar 6, 2026
c11ab32
format
liquidsec Mar 6, 2026
ea90c0f
Replace SHA1 hashing with seahash and FNV-1a 64-bit
liquidsec Mar 6, 2026
bcb4e7d
Fix test_scan hosts assertion for radixtarget 4.x string-only API
liquidsec Mar 6, 2026
94b2fc5
Fix portscan passing IPv4Address to radixtarget 4.x search()
liquidsec Mar 6, 2026
e7e7f86
Merge branch '3.0' into asn-as-targets
liquidsec Mar 6, 2026
84a5214
Merge branch 'asn-as-targets' into migrate-to-asndb-library
liquidsec Mar 6, 2026
529f7a9
ruff format scanner.py
liquidsec Mar 6, 2026
401d68c
Merge remote-tracking branch 'origin/3.0' into badsecrets-baddns-majo…
liquidsec Mar 6, 2026
caaa28c
Merge remote-tracking branch 'origin/3.0' into badsecrets-baddns-majo…
liquidsec Mar 6, 2026
6b5ed7e
Fix shodan_enterprise: remove redundant ASN emission, use framework s…
liquidsec Mar 6, 2026
7f33c76
Remove asndb mock from test_target_basic, use real API
liquidsec Mar 6, 2026
e0dc57f
Merge pull request #2957 from blacklanternsecurity/migrate-to-asndb-l…
liquidsec Mar 6, 2026
a294f89
Merge branch '3.0' into asn-as-targets
liquidsec Mar 6, 2026
3f7a2fa
Fix double-request bug in pgp module and remove stale TODO
liquidsec Mar 6, 2026
6b1f8bb
Merge pull request #2961 from blacklanternsecurity/pgp-fix
liquidsec Mar 6, 2026
8d4d3e5
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 7, 2026
d8549b2
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 7, 2026
db09d2b
Added trajan module
N7WEra Mar 11, 2026
1a40850
trajan tests
TheTechromancer Mar 16, 2026
9326df6
Merge branch '3.0' into N7WEra/stable
TheTechromancer Mar 16, 2026
b2fb831
add technology consumption
TheTechromancer Mar 16, 2026
6edb807
better deduping
TheTechromancer Mar 16, 2026
6daf761
ruffed
TheTechromancer Mar 16, 2026
09ffde4
created date
TheTechromancer Mar 16, 2026
47ce098
fix gowitness bug
TheTechromancer Mar 17, 2026
8d56a8b
ruffed
TheTechromancer Mar 17, 2026
483ce78
fix portfilter for waf
TheTechromancer Mar 17, 2026
360ec9a
Merge pull request #2974 from blacklanternsecurity/fix-gowitness-bug
TheTechromancer Mar 17, 2026
34020c0
run_process() fix, jenkins warning
TheTechromancer Mar 20, 2026
4e9c512
Clarify seed expansion scope guard naming and comments
liquidsec Mar 20, 2026
5a587ac
Use real asndb API in ASN module test instead of mocks
liquidsec Mar 20, 2026
e3e5a89
fix run process
TheTechromancer Mar 20, 2026
bbdf7fb
Default as_completed max_concurrent to 20
liquidsec Mar 20, 2026
4674f75
Remove mock from unknown ASN test, use private IP instead
liquidsec Mar 20, 2026
cb86351
ruff format conftest.py
liquidsec Mar 20, 2026
08942f4
Merge pull request #2741 from blacklanternsecurity/asn-as-targets
TheTechromancer Mar 20, 2026
09c4da1
Merge pull request #2966 from N7WEra/stable
TheTechromancer Mar 20, 2026
16918a6
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 20, 2026
7c1f07f
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 20, 2026
7470af1
ruff format baddns_direct.py
liquidsec Mar 20, 2026
35efd1a
ruff format baddns_direct.py
liquidsec Mar 20, 2026
101b8fb
Pass BBOT_IO_API_KEY to test runner for asndb API access
liquidsec Mar 21, 2026
daf0e06
Pass BBOT_IO_API_KEY to test runner for asndb API access
liquidsec Mar 21, 2026
9fb13f2
Fix asndb singleton not being reset after cleanup
liquidsec Mar 22, 2026
8b5804e
Fix asndb singleton not being reset after cleanup
liquidsec Mar 22, 2026
01f5bd3
Merge remote-tracking branch 'origin/dev' into 3.0
liquidsec Mar 22, 2026
7db8704
Fix asndb singleton being permanently closed by ASN seed expansion
liquidsec Mar 22, 2026
15c4af6
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 22, 2026
e9bd719
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 22, 2026
6f09580
Fix severity levels to use INFO, add AST test for baddns max severity…
liquidsec Mar 22, 2026
44ffba1
Fix severity levels to use INFO, add AST test for baddns max severity…
liquidsec Mar 22, 2026
86883f0
Pin kreuzberg <4.5 for Ubuntu 22.04 glibc compat, fix distro test HOME
liquidsec Mar 22, 2026
eedd69b
Merge pull request #2982 from blacklanternsecurity/fix-kreuzberg-deps
liquidsec Mar 23, 2026
3e2772b
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 23, 2026
cf5101c
Merge branch '3.0' into badsecrets-baddns-major-version-compat
liquidsec Mar 23, 2026
969076f
Standardize preset naming, flag system, and event tags (#2959)
liquidsec Mar 23, 2026
8b1e1ca
Remove kreuzberg/pypdfium2 from pyproject.toml (belongs in module dep…
liquidsec Mar 23, 2026
9ddf981
Remove kreuzberg/pypdfium2 from pyproject.toml (belongs in module dep…
liquidsec Mar 23, 2026
ba17420
Merge pull request #2933 from blacklanternsecurity/badsecrets-baddns-…
liquidsec Mar 23, 2026
450946f
Merge pull request #2933 from blacklanternsecurity/badsecrets-baddns-…
liquidsec Mar 23, 2026
8c60053
The fix uses the same .get() + None check + continue pattern from PR …
aconite33 Mar 23, 2026
d85d55f
Fix PyRadixTarget pickle error and gowitness URL correlation failures
aconite33 Mar 23, 2026
0a7b629
Merge 3.0, fix stale flag/preset references in docs and tests
liquidsec Mar 23, 2026
58a4083
Fix BBOTTarget pickle support for engine subprocess
liquidsec Mar 23, 2026
2032b04
Fix BBOTTarget pickle support for engine subprocess
liquidsec Mar 23, 2026
29d898d
Fix gowitness URL correlation by using scheme-and-port-agnostic keys
aconite33 Mar 23, 2026
ec6dd40
Add http_title field to pydantic and SQL event models
liquidsec Mar 23, 2026
60939bb
Drop local pickle fix in favor of PR #2983
aconite33 Mar 23, 2026
18b4553
Merge remote-tracking branch 'origin/fix-target-pickle' into mtr/gowi…
aconite33 Mar 23, 2026
c7d20d7
ruff format gowitness.py
aconite33 Mar 23, 2026
4b85f51
Merge branch '3.0' into mtr/gowitness_fix
liquidsec Mar 23, 2026
de31418
Merge pull request #2983 from blacklanternsecurity/fix-target-pickle
liquidsec Mar 23, 2026
731f707
Merge branch '3.0' into mtr/gowitness_fix
liquidsec Mar 23, 2026
e653c58
Fix azure_tenant crash on non-existent source_domain attribute
liquidsec Mar 23, 2026
7ed18cc
Add source_domain to event __slots__, restore in azure_tenant
liquidsec Mar 24, 2026
c2697b1
Fix gowitness URL correlation for multiple URLs on same host
aconite33 Mar 24, 2026
2caf180
Add unit test for gowitness _resolve_parent tiered lookup
aconite33 Mar 24, 2026
05e5393
Bump gowitness to 3.1.1, add multi-port integration test
aconite33 Mar 24, 2026
f3c59c6
Fix retirejs crash: parent URL event data is a string, not a dict
liquidsec Mar 24, 2026
f940a64
Add unified .url property to BaseEvent, migrate all modules
liquidsec Mar 24, 2026
bc06f14
Rename noisy→loud, restore safe flag with test enforcement
liquidsec Mar 24, 2026
022876f
Improve lightfuzz preset descriptions with detailed feature tables
liquidsec Mar 24, 2026
b7c0604
Merge pull request #2985 from blacklanternsecurity/mtr/gowitness_fix
TheTechromancer Mar 24, 2026
48da875
Add host_metadata field, scope down BaseEvent __slots__ to subclasses
liquidsec Mar 24, 2026
78bd657
Make URL_UNVERIFIED inherit from DictHostEvent, data is now a dict
liquidsec Mar 24, 2026
3a6f2ec
Merge pull request #2987 from blacklanternsecurity/fix-retirejs-paren…
liquidsec Mar 24, 2026
5a75eb8
Migrate remaining modules from event.data to event.url for URL events
liquidsec Mar 24, 2026
f561bda
Migrate cloudcheck to host_metadata, simplify cloud tags
liquidsec Mar 24, 2026
c0e6759
Fix baddns_direct: check for cloudflare tag directly
liquidsec Mar 24, 2026
42b3cae
Update context strings and test assertions for URL dict data
liquidsec Mar 24, 2026
99ae4e1
Fix remaining test failures from URL dict migration
liquidsec Mar 24, 2026
7906990
Fix speculate passing URL dict to url_parents
liquidsec Mar 24, 2026
eca3e94
ruff format
liquidsec Mar 24, 2026
97cb6b7
Update tests for URL dict data and simplified cloud tags
liquidsec Mar 24, 2026
6dae4d2
Reclassify portscan and iis_shortnames as loud
liquidsec Mar 24, 2026
0a5051d
Fix test assertions for URL dict data and event_data lists
liquidsec Mar 24, 2026
3501f3a
Fix more test assertions: e.data -> e.url/e.pretty_string for URL events
liquidsec Mar 24, 2026
2db2eaf
Merge 3.0, resolve conflicts in retirejs and gowitness
liquidsec Mar 24, 2026
09f61de
Fix EventSeed url property, more test assertion fixes
liquidsec Mar 24, 2026
0a371a7
Fix remaining event.data references in modules and tests
liquidsec Mar 25, 2026
7863798
Fix bucket template filter and remaining test data references
liquidsec Mar 25, 2026
2f05546
Fix oauth event.data references for URL dict migration
liquidsec Mar 25, 2026
6a7971d
Move http_title and status_code into URL data dict
liquidsec Mar 25, 2026
624ee9e
Regenerate docs for portscan/iis_shortnames loud reclassification
liquidsec Mar 25, 2026
0c99434
Add test_host_metadata covering serialization, URL data dict, http_ti…
liquidsec Mar 25, 2026
7a33ad9
Add host_metadata structure assertions to cloudcheck test
liquidsec Mar 25, 2026
c13ed88
Fix speculate emitting duplicate URL_UNVERIFIEDs from URL dict events
liquidsec Mar 25, 2026
feadca4
Fix test_exclude_cdn: add cdn type tag alongside provider name
liquidsec Mar 25, 2026
96f34d1
Fix code_repository and social modules for DictHostEvent URL events
liquidsec Mar 25, 2026
7989ace
Fix DictHostEvent breakage in ffuf_shortnames and test monkeypatches
liquidsec Mar 25, 2026
79aac59
Fix trufflehog test: patch clone_git_repository instead of mutating e…
liquidsec Mar 25, 2026
d45d2a4
Fix stderr lock crash during interpreter shutdown
liquidsec Mar 25, 2026
9f6fbd8
Fix Docker-based test hangs: close pymongo client, await docker stop
liquidsec Mar 25, 2026
957c0c1
Cancel orphaned async tasks in test fixture teardown, fix portscan te…
liquidsec Mar 25, 2026
f5cbbf7
Fix baddns-heavy preset: INFORMATIONAL -> INFO
liquidsec Mar 26, 2026
005f047
Fix kafka test hang: use auto_offset_reset=earliest and add timeout
liquidsec Mar 26, 2026
4cce566
remove source domain event attr
TheTechromancer Mar 26, 2026
3650dcc
Restore safe flag assertions in preset tests
liquidsec Mar 26, 2026
9e28b27
Merge pull request #2989 from blacklanternsecurity/fix-shutdown-stder…
TheTechromancer Mar 26, 2026
09024d1
Merge pull request #2986 from blacklanternsecurity/preset-naming-stan…
liquidsec Mar 26, 2026
007424f
Relax portscan syn_scanned assertion for async batch splitting
liquidsec Mar 27, 2026
29be8cd
Use asndb verify=False, respect global ssl_verify config
liquidsec Mar 27, 2026
8b02acb
Merge pull request #2995 from blacklanternsecurity/asndb-no-verify
liquidsec Mar 27, 2026
6213183
Support files as targets/seeds/blacklist in presets
liquidsec Mar 27, 2026
9a06d11
Merge branch '3.0' into files-as-targets-presets
liquidsec Mar 27, 2026
e771036
Bound DNS engine caches with LRU eviction to prevent unbounded memory…
liquidsec Mar 31, 2026
cb5940b
Add scan memory benchmarks and MB support in benchmark report
liquidsec Mar 31, 2026
15a68e3
Fix scan memory benchmarks to exclude Scanner init from tracemalloc
liquidsec Mar 31, 2026
590e979
Run scan memory benchmarks as subprocesses for clean tracemalloc
liquidsec Mar 31, 2026
e1e24ce
Run scan memory benchmarks as subprocesses for clean tracemalloc
liquidsec Mar 31, 2026
38db27e
Strip HTTP response bodies after all modules finish processing (refco…
liquidsec Mar 31, 2026
c6d6ac4
Intern repeated strings in resolved_hosts and dns_children
liquidsec Mar 31, 2026
c542341
fix three bugs in DNS brute-force canary check (#3004)
aconite33 Mar 31, 2026
f848f04
remove unused DNSBrute import to fix ruff F401 lint error
aconite33 Mar 31, 2026
1929e24
Add comment to _minimize() docstring
liquidsec Mar 31, 2026
b5816e4
Merge pull request #3006 from blacklanternsecurity/additional-string-…
TheTechromancer Apr 1, 2026
bdd9e93
Add scan throughput benchmarks, make HTTP module portable across bran…
liquidsec Apr 1, 2026
32aa5a1
Extract embedded benchmark scripts into standalone files
liquidsec Apr 1, 2026
38b735e
Merge pull request #3007 from blacklanternsecurity/scan-benchmarks-3.0
liquidsec Apr 1, 2026
240f618
Merge pull request #3003 from blacklanternsecurity/wildcard-cache-limit
liquidsec Apr 1, 2026
6b359ac
Merge pull request #3001 from blacklanternsecurity/additional-memory-…
liquidsec Apr 1, 2026
e9d3f90
Use PresetPath for file resolution in preset targets/seeds/blacklist
liquidsec Apr 1, 2026
ec7a50e
Merge branch '3.0' into files-as-targets-presets
liquidsec Apr 1, 2026
d268448
Merge branch '3.0' into memory-optimize-refcount-httpresponse
liquidsec Apr 1, 2026
c879fc6
Merge _release() into _minimize() for clarity
liquidsec Apr 1, 2026
a0b630b
replace unit test with integration test that exercises actual brute.p…
aconite33 Apr 1, 2026
751df73
ruff format test_module_dnsbrute.py
aconite33 Apr 1, 2026
07ea250
Merge pull request #2996 from blacklanternsecurity/files-as-targets-p…
liquidsec Apr 2, 2026
db8d16c
Move _minimize() stripping logic to HTTP_RESPONSE override
liquidsec Apr 2, 2026
edefefc
Merge pull request #3002 from blacklanternsecurity/memory-optimize-re…
liquidsec Apr 2, 2026
32b8692
Improve URL event stdout display format
liquidsec Apr 3, 2026
b4e4718
Merge pull request #3023 from blacklanternsecurity/url-display-format
liquidsec Apr 3, 2026
c3e4c07
Show FINDING severity breakdown in status line, add overridable _stat…
liquidsec Apr 4, 2026
0c4063b
fix SCAN event timestamp format
TheTechromancer Apr 9, 2026
9c0d36b
support comments in target lists
TheTechromancer Apr 10, 2026
deda309
ruffed
TheTechromancer Apr 10, 2026
928b09d
install pip in the bbot venv
TheTechromancer Apr 13, 2026
39b9d31
Merge pull request #3024 from blacklanternsecurity/finding-severity-s…
liquidsec Apr 13, 2026
c8d9758
Skip gateway error codes (502/503/504) in IIS shortnames detection
liquidsec Apr 13, 2026
7b3f96b
better comment support
TheTechromancer Apr 13, 2026
b9f627c
ruffed
TheTechromancer Apr 13, 2026
96f5627
Add human-readable stdout display format for all dict-based event types
liquidsec Apr 13, 2026
5a0d8d4
Convert ws:// and wss:// URLs to HTTP equivalents instead of raising …
liquidsec Apr 13, 2026
677f7c0
Merge pull request #3035 from blacklanternsecurity/event-display-format
liquidsec Apr 13, 2026
98020dd
Don't promote out-of-scope PTRs by default
TheTechromancer Apr 14, 2026
cc43dfc
ruffed
TheTechromancer Apr 14, 2026
3f561d1
Merge pull request #3005 from blacklanternsecurity/fix-dnsbrute-canar…
TheTechromancer Apr 14, 2026
c25ea68
Merge pull request #3037 from blacklanternsecurity/websocket-url-fix
liquidsec Apr 14, 2026
09837cf
Merge pull request #3034 from blacklanternsecurity/fix-iis-shortnames…
liquidsec Apr 14, 2026
5ef9949
Merge pull request #3031 from blacklanternsecurity/support-target-com…
TheTechromancer Apr 14, 2026
8ea7d66
fix affiliatestest
TheTechromancer Apr 14, 2026
e10a161
Merge pull request #3039 from blacklanternsecurity/filter-ptrs
TheTechromancer Apr 14, 2026
1a2eb33
fix docker publishing
TheTechromancer Apr 15, 2026
fc30505
Merge pull request #3033 from blacklanternsecurity/fix-pip-installs
TheTechromancer Apr 15, 2026
d8f056e
Merge pull request #3041 from blacklanternsecurity/docker-publishing
TheTechromancer Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
143 changes: 64 additions & 79 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ permissions:
jobs:
benchmark:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6
with:
Expand All @@ -29,10 +29,11 @@ jobs:
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v7

- name: Install dependencies
run: |
pip install poetry
poetry install --with dev
run: uv sync --group dev

- name: Install system dependencies
run: |
Expand All @@ -42,7 +43,7 @@ jobs:
# Generate benchmark comparison report using our branch-based script
- name: Generate benchmark comparison report
run: |
poetry run python bbot/scripts/benchmark_report.py \
uv run python bbot/scripts/benchmark_report.py \
--base ${{ github.base_ref }} \
--current ${{ github.head_ref }} \
--output benchmark_report.md \
Expand All @@ -51,7 +52,7 @@ jobs:

# Upload benchmark results as artifacts
- name: Upload benchmark results
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: benchmark-results
path: |
Expand All @@ -66,101 +67,85 @@ jobs:
with:
script: |
const fs = require('fs');

try {
const report = fs.readFileSync('benchmark_report.md', 'utf8');

// Find existing benchmark comment (with pagination)

// Helper: find existing benchmark comments on this PR
async function findBenchmarkComments() {
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
per_page: 100, // Get more comments per page
per_page: 100,
});

// Debug: log all comments to see what we're working with

console.log(`Found ${comments.data.length} comments on this PR`);
comments.data.forEach((comment, index) => {
console.log(`Comment ${index}: user=${comment.user.login}, body preview="${comment.body.substring(0, 100)}..."`);
});

const existingComments = comments.data.filter(comment =>

const benchmarkComments = comments.data.filter(comment =>
comment.body.toLowerCase().includes('performance benchmark') &&
comment.user.login === 'github-actions[bot]'
);

console.log(`Found ${existingComments.length} existing benchmark comments`);

if (existingComments.length > 0) {
// Sort comments by creation date to find the most recent
const sortedComments = existingComments.sort((a, b) =>

console.log(`Found ${benchmarkComments.length} existing benchmark comments`);
return benchmarkComments;
}

// Helper: post or update the benchmark comment
async function upsertComment(body) {
const existing = await findBenchmarkComments();

if (existing.length > 0) {
const sorted = existing.sort((a, b) =>
new Date(b.created_at) - new Date(a.created_at)
);

const mostRecentComment = sortedComments[0];
console.log(`Updating most recent benchmark comment: ${mostRecentComment.id} (created: ${mostRecentComment.created_at})`);


await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: mostRecentComment.id,
body: report
comment_id: sorted[0].id,
body: body
});
console.log('Updated existing benchmark comment');

// Delete any older duplicate comments
if (existingComments.length > 1) {
console.log(`Deleting ${existingComments.length - 1} older duplicate comments`);
for (let i = 1; i < sortedComments.length; i++) {
const commentToDelete = sortedComments[i];
console.log(`Attempting to delete comment ${commentToDelete.id} (created: ${commentToDelete.created_at})`);

try {
await github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: commentToDelete.id
});
console.log(`Successfully deleted duplicate comment: ${commentToDelete.id}`);
} catch (error) {
console.error(`Failed to delete comment ${commentToDelete.id}: ${error.message}`);
console.error(`Error details:`, error);
}
console.log(`Updated benchmark comment: ${sorted[0].id}`);

// Clean up older duplicates
for (let i = 1; i < sorted.length; i++) {
try {
await github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: sorted[i].id
});
console.log(`Deleted duplicate comment: ${sorted[i].id}`);
} catch (e) {
console.error(`Failed to delete comment ${sorted[i].id}: ${e.message}`);
}
}
} else {
// Create new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: report
body: body
});
console.log('Created new benchmark comment');
}
} catch (error) {
console.error('Failed to post benchmark results:', error);

// Post a fallback comment
const fallbackMessage = [
'## Performance Benchmark Report',
'',
'> ⚠️ **Failed to generate detailed benchmark comparison**',
'> ',
'> The benchmark comparison failed to run. This might be because:',
'> - Benchmark tests don\'t exist on the base branch yet',
'> - Dependencies are missing',
'> - Test execution failed',
'> ',
'> Please check the [workflow logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.',
'> ',
'> 📁 Benchmark artifacts may be available for download from the workflow run.'
].join('\\n');

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: fallbackMessage
});
}
}

let report;
try {
report = fs.readFileSync('benchmark_report.md', 'utf8');
} catch (e) {
console.error('Failed to read benchmark report:', e.message);
report = `## Performance Benchmark Report

> **Failed to generate detailed benchmark comparison**
>
> The benchmark comparison failed to run. This might be because:
> - Benchmark tests don't exist on the base branch yet
> - Dependencies are missing
> - Test execution failed
>
> Please check the [workflow logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
>
> Benchmark artifacts may be available for download from the workflow run.`;
}

await upsertComment(report);
29 changes: 20 additions & 9 deletions .github/workflows/distro_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,20 @@ jobs:
os: ["ubuntu:22.04", "ubuntu:24.04", "debian", "archlinux", "fedora", "kalilinux/kali-rolling", "parrotsec/security"]
steps:
- uses: actions/checkout@v6
- name: Install Python and Poetry
- name: Install Python and uv
run: |
if [ -f /etc/os-release ]; then
. /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 Expand Up @@ -51,22 +59,25 @@ jobs:
pyenv rehash
python3.11 -m pip install --user pipx
python3.11 -m pipx ensurepath
pipx install poetry
pipx install uv
"
- name: Set OS Environment Variable
run: echo "OS_NAME=${{ matrix.os }}" | sed 's|[:/]|_|g' >> $GITHUB_ENV
- name: Run tests
run: |
export PATH="$HOME/.local/bin:$PATH"
export PATH="$HOME/.pyenv/bin:$PATH"
export PATH="$HOME/.pyenv/shims:$PATH"
# Preserve pyenv/pipx paths installed under the GitHub-set HOME
export PATH="/github/home/.local/bin:$PATH"
export PATH="/github/home/.pyenv/bin:$PATH"
export PATH="/github/home/.pyenv/shims:$PATH"
# Fix HOME to match euid (root) so rustup/cargo don't refuse to build
export HOME="$(getent passwd $(whoami) | cut -d: -f6)"
export BBOT_DISTRO_TESTS=true
poetry env use python3.11
poetry install
poetry run pytest --reruns 2 --exitfirst -o timeout_func_only=true --timeout 1200 --disable-warnings --log-cli-level=INFO .
uv python pin 3.11
uv sync --group dev
uv run pytest --reruns 2 --exitfirst -o timeout_func_only=true --timeout 1200 --disable-warnings --log-cli-level=INFO .
- name: Upload Debug Logs
if: always()
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: pytest-debug-logs-${{ env.OS_NAME }}
path: pytest_debug.log
8 changes: 4 additions & 4 deletions .github/workflows/docs_updater.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ jobs:
uses: actions/setup-python@v6
with:
python-version: "3.x"
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install dependencies
run: |
pip install poetry
poetry install
run: uv sync --group dev
- name: Generate docs
run: |
poetry run bbot/scripts/docs.py
uv run bbot/scripts/docs.py
- name: Create or Update Pull Request
uses: peter-evans/create-pull-request@v8
with:
Expand Down
Loading
Loading