Conversation
Bumps [pyjwt](https://github.com/jpadilla/pyjwt) from 2.11.0 to 2.12.1. - [Release notes](https://github.com/jpadilla/pyjwt/releases) - [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst) - [Commits](jpadilla/pyjwt@2.11.0...2.12.1) --- updated-dependencies: - dependency-name: pyjwt dependency-version: 2.12.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 7.0.0 to 7.1.0. - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](pytest-dev/pytest-cov@v7.0.0...v7.1.0) --- updated-dependencies: - dependency-name: pytest-cov dependency-version: 7.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
…pytest-cov-7.1.0 Bump pytest-cov from 7.0.0 to 7.1.0
…pyjwt-2.12.1 Bump pyjwt from 2.11.0 to 2.12.1
Bumps [anyio](https://github.com/agronholm/anyio) from 4.12.1 to 4.13.0. - [Release notes](https://github.com/agronholm/anyio/releases) - [Commits](agronholm/anyio@4.12.1...4.13.0) --- updated-dependencies: - dependency-name: anyio dependency-version: 4.13.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.6 to 3.1.7. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](pallets/werkzeug@3.1.6...3.1.7) --- updated-dependencies: - dependency-name: werkzeug dependency-version: 3.1.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Added Dockerfile, and basic usage directions
…anyio-4.13.0 Bump anyio from 4.12.1 to 4.13.0
…werkzeug-3.1.7 Bump werkzeug from 3.1.6 to 3.1.7
This file was a stale poetry export that listed transitive deps (like requests) no longer in pyproject.toml, causing Dependabot to open PRs for phantom dependencies.
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5 to 46.0.6. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](pyca/cryptography@46.0.5...46.0.6) --- updated-dependencies: - dependency-name: cryptography dependency-version: 46.0.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…cryptography-46.0.6 Bump cryptography from 46.0.5 to 46.0.6
Added Dockerfile and brief usage instructions to README.md
Remove redundant mkdir, add --no-cache-dir to pip install, strip trailing whitespace, and add .dockerignore to exclude build artifacts and IDE files from the image.
Add Dockerfile
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #374 +/- ##
===========================================
- Coverage 100.00% 99.70% -0.30%
===========================================
Files 30 30
Lines 3084 3081 -3
===========================================
- Hits 3084 3072 -12
- Misses 0 9 +9 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Bumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to 2.20.0. - [Release notes](https://github.com/pygments/pygments/releases) - [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES) - [Commits](pygments/pygments@2.19.2...2.20.0) --- updated-dependencies: - dependency-name: pygments dependency-version: 2.20.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [poetry](https://github.com/python-poetry/poetry) from 2.3.2 to 2.3.3. - [Release notes](https://github.com/python-poetry/poetry/releases) - [Changelog](https://github.com/python-poetry/poetry/blob/main/CHANGELOG.md) - [Commits](python-poetry/poetry@2.3.2...2.3.3) --- updated-dependencies: - dependency-name: poetry dependency-version: 2.3.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com>
…ry-2.3.3 Bump poetry from 2.3.2 to 2.3.3
|
I have read the CLA Document and I hereby sign the CLA 0 out of 2 committers have signed the CLA. |
…ents-2.20.0 Bump pygments from 2.19.2 to 2.20.0
Bumps [django](https://github.com/django/django) from 5.2.12 to 5.2.13. - [Commits](django/django@5.2.12...5.2.13) --- updated-dependencies: - dependency-name: django dependency-version: 5.2.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [respx](https://github.com/lundberg/respx) from 0.22.0 to 0.23.1. - [Release notes](https://github.com/lundberg/respx/releases) - [Changelog](https://github.com/lundberg/respx/blob/master/CHANGELOG.md) - [Commits](lundberg/respx@0.22.0...0.23.1) --- updated-dependencies: - dependency-name: respx dependency-version: 0.23.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.2 to 9.0.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](pytest-dev/pytest@9.0.2...9.0.3) --- updated-dependencies: - dependency-name: pytest dependency-version: 9.0.3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com>
…django-5.2.13 Bump django from 5.2.12 to 5.2.13
…st-9.0.3 Bump pytest from 9.0.2 to 9.0.3
|
recheck |
…respx-0.23.1 Bump respx from 0.22.0 to 0.23.1
Python 3.13 made base64.b64decode strict about input length (rejects length mod 4 == 1). The test sliced [:-44] on the URL-encoded string to strip the 44-char hash, but the URL-encoded hash is longer than 44 chars (% escapes), so leftover hash bytes remained and produced an invalid base64 length after unquote. Unquote first, then slice.
- Replace [tool.poetry] with PEP 621 [project] table - Switch build backend from poetry-core/poetry-dynamic-versioning to hatchling - Drop dynamic versioning; pin version in badsecrets/__version__.py (mirrors baddns) - Add [dependency-groups].dev for dev deps - Generate uv.lock; remove poetry.lock - CI: replace poetry with astral-sh/setup-uv, uv sync, uv run, uv build - Update CLI fallback message and matching test
…3.13+ Same root cause as the PBKDF2_crypt fix: [:-44] is applied to the URL-encoded fixture, but %-escapes make the encoded hash longer than 44 chars, leaving leftover bytes in what's supposed to be the encrypted portion. Python 3.13+ rejects the resulting base64 length; earlier versions tolerated it.
migrate from poetry to uv
Updates the requirements on [django](https://github.com/django/django) to permit the latest version. - [Commits](django/django@4.1.2...5.2.14) --- updated-dependencies: - dependency-name: django dependency-version: 5.2.14 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…django-5.2.14 Update django requirement from <6.0.0,>=4.1.2 to >=5.2.14,<6.0.0
migrate from httpx to blasthttp
deprecate the blacklist3r CLI tool
deprecate the blacklist3r CLI tool
The cookies branch of carve() previously only emitted SecretFound, with no
IdentifyOnly fallback like the headers and body branches had. Likewise,
check_all_modules (the manual / 'badsecrets <product>' path) only ran
check_secret. As a result, recognizable cryptographic products with unknown
keys were silently dropped — most visibly Laravel cookies (carve_locations
is just ('cookies',)).
Both paths now mirror the headers/body symmetry:
- carve() cookies branch falls back to identify() when check_secret misses,
gated on validate_carve.
- check_all_modules returns a list of dicts (now including IdentifyOnly hits),
matching carve_all_modules's shape.
- carve_all_modules and check_all_modules suppress all IdentifyOnly results
when any module produces a SecretFound — actionable hits outrank
recognition-only candidates.
- cli.py product-mode iterates the new list and dispatches SecretFound vs
IdentifyOnly to the appropriate report; URL-mode unaffected.
bbot is unaffected: it imports only carve_all_modules and consumes the list
return that already existed.
…yonly-fallback surface IdentifyOnly results from cookies and manual product mode
1.1.0 release
Tooling: Poetry → uv (#390)
[tool.poetry]→ PEP 621[project]+[dependency-groups].poetry-core+poetry-dynamic-versioning→hatchling.badsecrets/__version__.py(mirrors baddns; major/minor bumps trigger PyPI publish).astral-sh/setup-uv@v6+uv sync/uv run/uv build.uv.lockreplacespoetry.lock.HTTP: httpx → blasthttp (#391)
httpxwithblasthttp(Rust-backed async client). httpx and respx are dropped entirely.base.py: rename thehttpx_response=kwarg tohttp_response=. Carve now duck-types — works with anything exposing.text/.headers/.cookies. bbot's existing call surface (carve_all_modules(body=, headers=, cookies=, url=, …)) is unchanged.probe_all_modules()accepts an optionalhttp_client=so callers (CLI, bbot) can share a client.shiro_rememberme,ltpa_token,globalprotect) switch toblasthttp.BlastHTTPand accepthttp_client=for injection.cli.py,telerik_knownkey.py,blacklist3r.py,symfony_knownkey.py.respxreplaced byblasthttp.mock.BlasthttpMock; newtests/conftest.pyexposes abh_mockfixture that auto-patches each CLI script'sBlastHTTPimport.Library: surface IdentifyOnly results from cookies and manual product mode (#393)
Closes the long-standing gap where
badsecrets -u <laravel-protected-site>printedNo secrets found :(even though the cookie was correctly identified — only the APP_KEY wasn't in the wordlist.carve()cookies branch: adds an IdentifyOnly fallback gated onvalidate_carve, mirroring the headers/body branches.check_all_modules()(thebadsecrets <product>path) returns a list of dicts (each taggedSecretFoundorIdentifyOnly), matchingcarve_all_modules()'s shape.carve_all_modules()andcheck_all_modules()suppress every IdentifyOnly result whenever any SecretFound exists — actionable hits outrank recognition-only candidates.carve()and per-detecting_modulededup across CLI fetches: oneLaravelSignedCookiesIdentifyOnly per module per scan, not one per cookie per response.laravel_signedcookies,ltpa_token,shiro_rememberme,peoplesoft_pstoken,telerik_hashkey,telerik_encryptionkey) to anchor on actual format prefixes and excludeeyJ-prefixed values from the encrypted-base64 patterns.cli.pyproduct-mode iterates the new list and dispatchesSecretFoundvsIdentifyOnlyto the appropriate report. URL-mode unchanged.Cleanup
blacklist3rCLI tool (deprecate the blacklist3r CLI tool #392, deprecate the blacklist3r CLI tool #394). Capabilities are now covered by the main viewstate modules; standalone tool was dead-weight maintenance burden.base64.b64decode:test_PBKDF2_cryptandtest_PBKDF1_MS_cryptslice URL-encoded fixtures correctly (664f690, b28c38d).bbot compatibility
bbot only imports
carve_all_modules, which already returned a list. No bbot-side changes required for this release.