3.0.0 - 2026-03-23 #71
samugit83
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Added
Custom Nuclei Templates Integration — custom nuclei templates (
mcp/nuclei-templates/) are now manageable via the UI with per-project selection, dynamically discovered by the agent, and included in automated recon scans:.yaml/.ymlnuclei templates directly from Project Settings → Nuclei → Template Options. Templates are global (shared across all projects). Upload validates nuclei template format (requiresid:andinfo:withname:andseverity:). API:GET/POST/DELETE /api/nuclei-templatesnucleiSelectedCustomTemplatesString[] per project (default:[]). Different projects can enable different templates from the same global pool/opt/nuclei-templates/and dynamically appends all template paths (id, severity, name) to theexecute_nucleitool description, so the agent automatically knows what custom templates are available-t /custom-templates/{path}flags to nuclei. Recon logs list each selected template by name/actuator,/heapdump,/env,/jolokia,/gatewayendpoints — URL encoding, semicolon injection, path traversal, and alternate base path evasion techniquesSSL Verify Toggle for OpenAI-compatible LLM Providers (community PR feat: add SSL verify toggle for OpenAI-compatible LLM providers #70) —
sslVerifyboolean (default:true) lets users skip SSL certificate verification when connecting to internal/self-hosted LLM endpoints with self-signed certificates. Full stack: Prisma schema, API route, frontend checkbox, agenthttpx.Client(verify=False)injection.Dockerfile
DEBIAN_FRONTEND=noninteractive(community PR fix: prevent interactive prompts during package installation #63) — added toagentic,recon_orchestrator, andguinea_pigsDockerfiles to suppress interactiveapt-getprompts during builds.ParamSpider Passive Parameter Discovery — mines the Wayback Machine CDX API for historically-documented URLs containing query parameters. Only returns parameterized URLs (with
?key=value), with values replaced by a configurable placeholder (defaultFUZZ), making results directly usable for fuzzing. Runs in Phase 4 (Resource Enumeration) in parallel with Katana, Hakrawler, and GAU. Passive — no traffic to target. No API keys required. Disabled by default; stealth mode auto-enables it. Full stack integration:paramspider_helpers.pywithrun_paramspider_discovery()(subprocess per domain, stdout + file output parsing, scope filtering, temp dir cleanup) andmerge_paramspider_into_by_base_url()(sources array merge, parameter enrichment, deduplication)PARAMSPIDER_*settings (enabled, placeholder, timeout)ParamSpiderSection.tsxwith enable toggle, placeholder input, timeout settingArjun Parameter Discovery — discovers hidden HTTP query and body parameters on endpoints by testing ~25,000 common parameter names. Runs in Phase 4 (Resource Enumeration) after FFuf, testing discovered endpoints from crawlers/fuzzers rather than just base URLs. Disabled by default; stealth mode forces passive-only; RoE caps rate. Full stack integration:
arjun_helpers.pywith multi-method parallel execution viaThreadPoolExecutor— each selected method (GET/POST/JSON/XML) runs as a separate Arjun subprocess simultaneouslyARJUN_*settings (methods, max endpoints, threads, timeout, chunk size, rate limit, stable mode, passive mode, disable redirects, custom headers)ArjunSection.tsxwith multi-select method checkboxes, max endpoints field, scan parameters, stable/passive/redirect toggles, custom headers textareaARJUN_PASSIVE=True(CommonCrawl/OTX/WaybackMachine only, no active requests to target)FFuf Directory Fuzzer — brute-force directory/endpoint discovery using wordlists, complementing crawlers (Katana, Hakrawler, GAU) by finding hidden content (admin panels, backup files, configs, undocumented APIs). Runs in Phase 4 (Resource Enumeration) after jsluice and before Kiterunner. Disabled by default; stealth mode disables it; RoE caps rate. Full stack integration:
ffuf_helpers.pywithrun_ffuf_discovery(), JSON output parsing, scope filtering, deduplication, and smart fuzzing under crawler-discovered base pathscommon.txt,raft-medium-directories.txt,directory-list-2.3-small.txt)FFUF_*settings (threads, rate, timeout, wordlist, match/filter codes, extensions, recursion, auto-calibrate, smart fuzz, custom headers)FfufSection.tsxwith full settings UI, wordlist dropdown (built-in SecLists + custom uploads), custom wordlist upload/delete via API.txtwordlists per-project via/api/projects/[id]/wordlists(GET/POST/DELETE), shared between webapp and recon containers via Docker volume mountRedAmon Terminal — interactive PTY shell access to the kali-sandbox container directly from the graph page via xterm.js. Provides full Kali Linux terminal with all pre-installed pentesting tools (Metasploit, Nmap, Nuclei, Hydra, sqlmap, etc.) without leaving the browser. Architecture: Browser (xterm.js) → WebSocket → Agent FastAPI proxy (
/ws/kali-terminal) → kali-sandbox terminal server (PTY/bin/bashon port 8016):terminal_server.py— WebSocket PTY server usingos.fork+ptymodule with async I/O vialoop.add_reader(), connection limits (max 5 sessions), resize validation (clamped 1-500), process group cleanup, andasyncio.Eventfor clean shutdown/ws/kali-terminalWebSocket endpoint inapi.py— bidirectional relay with proper task cancellation (asyncio.gatherwithreturn_exceptions)KaliTerminal.tsx— React component with dark Ayu theme, connection status indicator, auto-reconnect with exponential backoff (5 attempts), fullscreen toggle, browser-side keepalive ping (30s), proper xterm.js teardown, ARIA accessibility attributes127.0.0.1:8016:8016),TERMINAL_WS_PORTandKALI_TERMINAL_WS_URLenv vars"Remote Shells" renamed to "Reverse Shell" — tab renamed for clarity to distinguish from the new RedAmon Terminal tab. The Reverse Shell tab manages agent-opened sessions (meterpreter, netcat, etc.), while RedAmon Terminal provides direct interactive sandbox access.
Hakrawler Integration — DOM-aware web crawler running as Docker container (
jauderho/hakrawler). Runs in parallel with Katana, GAU, and Kiterunner during resource enumeration. Configurable depth, threads, subdomain inclusion, and scope filtering. Disabled automatically in stealth mode.jsluice JavaScript Analysis — Passive JS analysis tool for extracting URLs, API endpoints, and embedded secrets (AWS keys, GitHub tokens, GCP credentials, etc.) from discovered JavaScript files. Runs sequentially after the parallel crawling phase.
Secret Node in Neo4j — Generic
Secretnode type linked toBaseURLvia[:HAS_SECRET]. Source-agnostic design supports jsluice now and future secret discovery tools. Includes deduplication, severity classification, and redacted samples.Hakrawler enabled by default — New projects have Hakrawler and Include Subdomains enabled by default.
Tool Confirmation Gate — per-tool human-in-the-loop safety gate that pauses the agent before executing dangerous tools (
execute_nmap,execute_naabu,execute_nuclei,execute_curl,metasploit_console,msf_restart,kali_shell,execute_code,execute_hydra). Full multi-layer integration:DANGEROUS_TOOLSfrozenset inproject_settings.py,ToolConfirmationRequestPydantic model instate.py, two new LangGraph nodes (await_tool_confirmation,process_tool_confirmation) intool_confirmation_nodes.pyawaiting_tool_confirmationandtool_confirmation_pendingstate, graph pauses atawait_tool_confirmation(END) and resumes viaprocess_tool_confirmationrouting to execute_tool/execute_plan (approve), think (reject), or patching tool_args (modify)tool_confirmation(client→server) andtool_confirmation_request(server→client) message types,ToolConfirmationMessagemodel,handle_tool_confirmation()handler with streaming resumptionToolExecutionCard(single mode) andPlanWaveCard(plan mode) withpending_approvalstatus,awaitingToolConfirmationstate disables chat input, warning badge in chat header when disabledREQUIRE_TOOL_CONFIRMATION(default:true) toggle in Project Settings → Agent Behaviour → Approval Gates, with autonomous operation risk warning when disabledagentRequireToolConfirmationBoolean field (default: true)Hard Guardrail — deterministic, non-disableable domain blocklist for government, military, educational, and international organization domains. Cannot be toggled off regardless of project settings. Implemented identically in Python (
agentic/hard_guardrail.py) and TypeScript (webapp/src/lib/hard-guardrail.ts):.gov,.mil,.edu,.int, and country-code variants (.gov.uk,.ac.jp,.gob.mx,.gouv.fr, etc.)Zero-config setup —
.envfile completely removed — all user-configurable settings (NVD API key, ngrok auth token, chisel server URL/auth) are now managed from the Global Settings UI page and stored in PostgreSQL. No.envor.env.examplefile is needed.Availability Testing Attack Skill — new built-in attack skill for disrupting service availability. Includes LLM prompt templates for DoS vector selection, resource exhaustion, flooding, and crash exploits. Full integration across the stack:
denial_of_service_prompts.pywith DoS-specific workflow guidance, vector classification, and impact assessment promptsdenial_of_service) integrated into classification, phase transitions, and tool registryDosSection.tsxconfiguration component in the project form for enabling/disabling and tuning DoS parametersExpanded Finding Types — 8 new goal/outcome
finding_typevalues for ChainFinding nodes, covering real-world pentesting outcomes beyond the original 10 types:data_exfiltration— data successfully stolen/exfiltratedlateral_movement— pivot to another system in the networkpersistence_established— backdoor, cron job, or persistent access installeddenial_of_service_success— service confirmed down after DoS attacksocial_engineering_success— phishing or social engineering succeededremote_code_execution— arbitrary code execution achievedsession_hijacked— existing user session taken overinformation_disclosure— sensitive info leaked (source code, API keys, error messages)Goal Finding Visualization — ChainFinding diamond nodes on the attack surface graph now visually distinguish goal/outcome findings from informational ones:
#4ade80), non-goal diamonds remain amber#276d43), non-goal diamonds are dark yellow (#3d3107), other chain nodes remain dark grey#9ca3af) for clear visual distinctionInline Model Picker — the model badge in the AI assistant drawer is now clickable, opening a searchable modal to switch LLM model on the fly. Models are grouped by provider with context-length badges and descriptions. Includes a manual-input fallback when the models API is unreachable. Shared model utilities (
ModelOptiontype,formatContextLength,getDisplayName) extracted intomodelUtils.tsand reused across the drawer and project form.Animated Loading Indicator — replaced static "Processing..." text in the AI assistant chat with a dynamic loading experience:
URLScan.io OSINT Integration — new passive enrichment module that queries URLScan.io's Search API to discover subdomains, IPs, TLS metadata, server technologies, domain age, and screenshots from historical scans. Runs in the recon pipeline after domain discovery, before port scanning. Full integration across the stack:
recon/urlscan_enrich.py— fetches historical scan data from URLScan.io for each discovered domain. Works without API key (public results) or with API key (higher rate limits and access to private scans)urlscanprovider is automatically removed from GAU's data sources to avoid redundant API calls to the same underlying dataurlscanEnabledtoggle andurlscanMaxResults(default: 500) configurable per project. Optional API key in Global Settings → API KeysUrlscanSection.tsxin the Discovery & OSINT tab with passive badge, API key status indicator, and max results configurationExternalDomain Node — new graph node type for tracking out-of-scope domains encountered during reconnaissance. Provides situational awareness about the target's external dependencies without scanning them:
(:ExternalDomain { domain, sources[], redirect_from_urls[], redirect_to_urls[], status_codes_seen[], titles_seen[], servers_seen[], ips_seen[], countries_seen[], times_seen, first_seen_at, updated_at })(d:Domain)-[:HAS_EXTERNAL_DOMAIN]->(ed:ExternalDomain)(domain, user_id, project_id)with tenant-scoped indexupdate_graph_from_external_domains()method for creating ExternalDomain nodes and HAS_EXTERNAL_DOMAIN relationshipsGRAPH.SCHEMA.mdupdated with full ExternalDomain documentationSubfinder Integration — new passive subdomain discovery source in the recon pipeline. Queries 50+ online sources (certificate transparency, DNS databases, web archives, threat intelligence feeds) via ProjectDiscovery's Subfinder Docker image. No API keys required for basic operation (20+ free sources). Full multi-layer integration:
run_subfinder()indomain_recon.pyusing Docker-in-Docker pattern, JSONL parsing, max results cappingsubfinderEnabled(default: true),subfinderMaxResults(default: 5000),subfinderDockerImageacross Prisma schema, project settings, and defaultsprojectdiscovery/subfinder:latestadded to Docker image pre-pull listPuredns Wildcard Filtering — new post-discovery validation step that removes wildcard DNS entries and DNS-poisoned subdomains before they reach the rest of the pipeline. Runs after the 5 discovery tools merge their results and before DNS resolution. Full multi-layer integration:
run_puredns_resolve()indomain_recon.pyusing Docker-in-Docker pattern with configurable threads, rate limiting, wildcard batch size, and skip-validation optionpurednsEnabled(default: true),purednsThreads(default: 0 = auto),purednsRateLimit(default: 0 = unlimited),purednsDockerImageacross Prisma schema, project settings, and defaultsfrost19k/puredns:latestadded to Docker image pre-pull list, DNS resolver list auto-downloaded from trickest/resolvers (refreshed every 7 days)SUB_CONTAINER_IMAGESfor force-stop container cleanupAmass Integration — OWASP Amass subdomain enumeration added to the recon pipeline as a new passive/active discovery source. Queries 50+ data sources (certificate transparency logs, DNS databases, web archives, WHOIS records) via the official Amass Docker image. Full multi-layer integration:
run_amass()indomain_recon.pyusing Docker-in-Docker pattern with configurable active mode, brute force, timeout, and max results cappingamassEnabled(default: false),amassMaxResults(default: 5000),amassTimeout(default: 10 min),amassActive(default: false),amassBrute(default: false),amassDockerImageacross Prisma schema, project settings, and defaultscaffix/amass:latestadded to Docker image pre-pull listParallelized Recon Pipeline (Fan-Out / Fan-In) — the reconnaissance pipeline now uses
concurrent.futures.ThreadPoolExecutorto run independent modules concurrently, significantly reducing total scan time while respecting data dependencies between groups:ThreadPoolExecutor(max_workers=5). Each tool refactored into a thread-safe function with its ownrequests.Session_isolatedfunction variants (run_port_scan_isolated,run_shodan_enrichment_isolated) accept a read-only snapshot and return only their data sectionThreadPoolExecutor(max_workers=20)inresolve_all_dns()_graph_update_bg). The main pipeline submits deep-copy snapshots and continues immediately._graph_wait_all()ensures completion before pipeline exit[level][Module]prefix format (e.g.,[+][crt.sh] Found 42 subdomains) for clarity in concurrent outputPer-source Subdomain Attribution — subdomain discovery now tracks which tool found each subdomain (crt.sh, hackertarget, subfinder, amass, knockpy). External domain entries carry accurate per-source labels instead of generic
cert_discovery.get_passive_subdomains()returnsdict{subdomain: set_of_sources}instead of a flat setCompact Subdomain Discovery UI — passive subdomain source toggles (crt.sh, HackerTarget, Subfinder, Amass, Knockpy) now display the tool name, max results input, and toggle on a single row instead of separate expandable sections
Discovery & OSINT Tab — new unified tab in the project form replacing the previous scattered tool placement. Groups all passive and active discovery tools in a single section:
NodeInfoTooltipcomponent,SECTION_INPUT_MAPandSECTION_NODE_MAPinnodeMapping.tsAgent Guardrail Toggle — the scope guardrail (LLM-based target verification) can now be enabled or disabled per project:
agentGuardrailEnabled(default:true) — when disabled, the agent skips the scope verification check on session startMulti-source CVE Attribution — CVE nodes created from Shodan data now track their source (
sourceproperty) instead of hardcoding "shodan", enabling future enrichment from multiple CVE databases (NVD, Vulners, etc.)API Key Rotation — configure multiple API keys per tool with automatic round-robin rotation to avoid rate limits. Each key in Global Settings now has a "Key Rotation" button that opens a modal to add extra keys and set the rotation interval (default: every 10 API calls). All keys (main + extras) are treated equally in the rotation pool. Full multi-layer integration:
ApiKeyRotationConfigmodel withuserId + toolNameunique constraint,extraKeys(newline-separated), androtateEveryN(default 10)GET /api/users/[id]/settingsreturnsrotationConfigswith key counts (frontend) or full keys (?internal=true);PUTaccepts rotation config upserts with masked-value preservationkey_rotation.py) in bothagentic/andrecon/containers — no new dependencies, no Docker image rebuild neededKeyRotatorper tool manager;web_search,shodan, andgoogle_dorktools userotator.current_key+tick()on each API call_fetch_user_settings_full()call replaces individual key fetches; rotators built for Shodan, URLScan, NVD, and Vulners; threaded through_shodan_get,_urlscan_search,lookup_cves_nvd, andlookup_cves_vulnersNVD/Vulners API Keys moved to Global Settings — NVD and Vulners API keys removed from the Project model and the project-level fallback chain. All 6 tool API keys (Tavily, Shodan, SerpAPI, NVD, Vulners, URLScan) are now exclusively user-scoped in Global Settings, consistent with the other keys.
Fixed
neo4j_client.pybanner property handling. Changedif vtoif v is not Noneto preserve empty strings and zero values that are valid banner dataChanged
This discussion was created from the release 3.0.0 - 2026-03-23.
Beta Was this translation helpful? Give feedback.
All reactions