ADscan v3.0.1
TL;DR
-
🕒 Much tougher time handling: PDC retries, RPC fallback, NTP edge cases fixed.
-
🌐 More reliable DNS & domain management:
dhcpcd/dnsmasq//etc/hostsissues fixed and cleaned up. -
🧠 BloodHound-first group enumeration with LDAP as a fallback.
-
⚙️ New CI command to run ADscan in CI pipelines.
-
🔐 Spraying & rusthound-ce hardened: LDAPS timeout fallback, isolated venv, spraying bug fixes.
-
🧷 Better automation: auto password extraction during spidering/search, extra retries for flaky flag retrieval.
-
🎨 General UX/UI improvements and redesign of the TUI.
After upgrading to 3.0.1, run:
pipx upgrade adscan && adscan install && adscan check
🔄 Important behavior changes
BloodHound-first group enumeration
Group enumeration now uses BloodHound as the primary source, with LDAP used as a fallback when BH is unavailable or fails.
This improves consistency of group data and lines up better with BH-centric workflows.
New CI command
A dedicated CI command has been added to integrate ADscan into CI pipelines (CI/CD, nightly lab checks, etc.).
Check adscan --help for the new CI entrypoint and available flags.
Spraying toolkit in an isolated venv
The password spraying toolkit has been moved into its own isolated virtualenv, reducing dependency conflicts and side effects on the system Python.
🧭 Reliability & stability improvements
Time sync hardening
-
Added 3 attempts to synchronize the clock with the PDC, making Kerberos and other time-sensitive operations more reliable.
-
Added a clock synchronization fallback via RPC when the primary method fails.
-
Fixed a bug that occurred when NTP was closed/unavailable so time sync now degrades gracefully instead of breaking flows.
DNS & network robustness
-
Fixed a bug where
dhcpcdcould remove/etc/resolv.confduringdnsmasqsetup. -
Introduced a new method to remove stale entries from both the
dnsmasqconfiguration and/etc/hosts, improving reliability when domains/IPs change between runs. -
Fixed a bug where DNS would not resolve correctly if
start_authorstart_unauthhad not been executed yet.
BloodHound / rusthound-ce integration
- Fixed an LDAPS timeout issue in
rusthound-ceand ensured a proper fallback without LDAPS when secure LDAP is not reachable.
Spraying & flags
-
Fixed a password spraying bug introduced with the newer
bloodhound-cliversion. -
Ensured the spraying toolkit runs in an isolated venv (see above) to avoid dependency clashes.
-
Fixed cases where flags were sometimes not retrieved by adding 3 retries on the relevant operations.
System integration
- Fixed a system command bus error that could sporadically break shell/system calls.
🤖 UX / automation improvements
Automatic password extraction
- Added automatic password extraction during spidering and when searching descriptions.
When ADscan finds content that looks like credentials, it now attempts to extract and surface them more reliably.
DNS / domain management polish
- The new stale-entry removal for
dnsmasqand/etc/hostskeeps your environment closer to a “known good” state across multiple runs and domain changes.
General UX/UI redesign
- General TUI/UX improvements and layout tweaks to make output more readable and navigation smoother (more structured output, better grouping, clearer prompts).
🛠️ Additional fixes & checks
-
Added specific Python tool version checks to avoid subtle incompatibility issues.
-
Fixed the check summary so it now accurately reflects the real state of the environment.
📦 Upgrade notes
After installing 3.0.1, refresh the toolchain and verify everything is healthy:
pipx upgrade adscan && adscan install && adscan check
If you already run ADscan in CI/CD, review the new CI command via adscan --help and adjust your pipeline scripts accordingly.
📣 Feedback
If you hit issues or regressions:
-
Open a GitHub issue with:
-
ADscan version
-
Distro/version
-
Redacted logs (no domains/hostnames/creds)
-
This release is heavily focused on reliability (time, DNS, BH integration) and operator experience, so any edge cases you report help harden ADscan for everyone. 🙏