modules

package
v0.5.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2026 License: MIT Imports: 332 Imported by: 0

Documentation

Overview

Package modules defines the scanner module system: the base Module interface plus the ActiveModule and PassiveModule interfaces, the optional capability interfaces (ContextualActiveModule, Prioritized, VulnClassifier, TechAware, TimeoutHinter, Flusher, ScopeAwareModule), and the thread-safe Registry that the executor dispatches through. Concrete scanners live under active/ and passive/; modkit/ provides base types and default behavior, infra/ provides block detection and request filtering, and modtest/ provides a Docker-free unit-test harness. See docs/development/developing-modules.md.

Index

Constants

View Source
const (
	TagTierLight     = "light"
	TagTierModerate  = "moderate"
	TagTierHeavy     = "heavy"
	TagTierIntrusive = "intrusive"
)

Module intensity-tier tags. A module declares at most one of these in its Tags() slice to advertise how expensive/aggressive it is. The native scan runner uses the tier together with the resolved --intensity to decide which modules run (see internal/runner intensity tier ceiling):

  • light reconnaissance, fingerprinting, cheap exposure probes
  • moderate standard active testing (csrf, xxe, debug-exposure, …)
  • heavy expensive blind/timing probes (sqli-blind, ssti-blind, ssrf-blind, command-injection-timing, file-upload, request-smuggling, …)
  • intrusive rare, high-side-effect checks reserved for the deepest scans

Keep this vocabulary aligned with the tier tags declared in module metadata and with the ModuleTier* contract test in default_registry_contract_test.go.

View Source
const (
	TierRankLight     = 1
	TierRankModerate  = 2
	TierRankHeavy     = 3
	TierRankIntrusive = 4
)

Tier ranks order the tier tags from cheapest (light) to most aggressive (intrusive). ModuleTierRank returns one of these for a tagged module, or TierAlwaysOn (0) for an untagged one. The native scan runner compares a module's rank against an intensity-derived ceiling — this is the single source of the ordering both sides share.

View Source
const (
	ScanScopeInsertionPoint = modkit.ScanScopeInsertionPoint
	ScanScopeRequest        = modkit.ScanScopeRequest
	ScanScopeHost           = modkit.ScanScopeHost
)
View Source
const (
	PassiveScanScopeRequest  = modkit.PassiveScanScopeRequest
	PassiveScanScopeResponse = modkit.PassiveScanScopeResponse
	PassiveScanScopeBoth     = modkit.PassiveScanScopeBoth
)
View Source
const AllInsertionPointTypes = modkit.AllInsertionPointTypes
View Source
const TagHygiene = "hygiene"

TagHygiene marks a module as a hardening advisory: it reports a missing or weak best-practice control (a security header, a cookie attribute, a TLS protocol/cipher policy) rather than an exploitable condition. Such a module fires on nearly every response of nearly every host, so on a crawl of any size it buries the exploitable findings under a wall of Info/Low rows that the operator already knows the answer to.

The tag is orthogonal to the tier tags in tier_tags.go: a tier says how expensive/aggressive a module is, this says how noisy its output is. A hygiene module is typically "light" — cheap to run, tedious to read.

The native scan runner gates these off below --intensity deep (see internal/runner hygieneModulesEnabled). They remain selectable at any intensity via --module-tag hygiene or --module-id <id>, and can be restored globally with `dynamic-assessment.hygiene_modules: true`.

View Source
const TierAlwaysOn = 0

TierAlwaysOn is the rank assigned to a module that declares no tier tag. It is strictly below every real tier so an untagged module is never excluded by an intensity ceiling — a missing tag must never silently drop a module (e.g. the core xss_stored / xss_dom_confirm modules carry no tier tag and must run at every intensity).

Variables

View Source
var (
	URLParamTypes  = modkit.URLParamTypes
	BodyParamTypes = modkit.BodyParamTypes
	CookieTypes    = modkit.CookieTypes
	HeaderTypes    = modkit.HeaderTypes
	AllParamTypes  = modkit.AllParamTypes
)
View Source
var DefaultRegistry = newDefaultRegistry()

DefaultRegistry is the default registry with all built-in modules.

View Source
var NewBaseActiveModule = modkit.NewBaseActiveModule
View Source
var NewBaseModule = modkit.NewBaseModule
View Source
var NewBasePassiveModule = modkit.NewBasePassiveModule
View Source
var NewInsertionPointTypeSet = modkit.NewInsertionPointTypeSet

Functions

func DerivedContentClasses

func DerivedContentClasses(moduleTags []string) []string

DerivedContentClasses returns the content classes implied by a module's tags using contentClassByTag. Returns nil when no tag maps to a class (the module is content-agnostic). Used as the fallback when a module does not implement ContentClassAware explicitly.

func DerivedRequiredTechs

func DerivedRequiredTechs(moduleTags []string) []string

DerivedRequiredTechs returns the intersection of moduleTags and the known tech-tag set. When a module does not implement TechAware explicitly, the executor uses this as its required-tech allowlist so framework-specific modules (tagged "spring", "rails", etc.) are gated automatically.

func GetActiveModulesID

func GetActiveModulesID() []string

GetActiveModulesID returns IDs of all registered active modules.

func GetPassiveModulesID

func GetPassiveModulesID() []string

GetPassiveModulesID returns IDs of all registered passive modules.

func IsHygieneModule added in v0.4.9

func IsHygieneModule(tags []string) bool

IsHygieneModule reports whether a module's tags declare TagHygiene.

func ModuleTierRank

func ModuleTierRank(tags []string) int

ModuleTierRank returns the intensity rank implied by a module's tags. It returns TierAlwaysOn (0) when no tier tag is present. If more than one tier tag is declared (not expected), the highest rank wins so the module is gated by its most aggressive classification.

func ResolveModulePatterns

func ResolveModulePatterns(patterns []string) []string

ResolveModulePatterns resolves user-provided patterns into exact module IDs using fuzzy matching against module IDs and names.

func ResolveModuleTags

func ResolveModuleTags(tags []string) []string

ResolveModuleTags returns module IDs for all modules matching any of the given tags.

Types

type ActiveModule

type ActiveModule interface {
	Module

	// AllowedInsertionPointTypes returns which insertion point types this module supports.
	// Return AllInsertionPointTypes to accept all types.
	AllowedInsertionPointTypes() InsertionPointTypeSet

	// ScanPerInsertionPoint performs scanning for a specific insertion point.
	ScanPerInsertionPoint(
		ctx *httpmsg.HttpRequestResponse,
		ip httpmsg.InsertionPoint,
		httpClient *http.Requester,
		scanCtx *ScanContext,
	) ([]*output.ResultEvent, error)

	// ScanPerRequest performs scanning once per unique request.
	ScanPerRequest(
		ctx *httpmsg.HttpRequestResponse,
		httpClient *http.Requester,
		scanCtx *ScanContext,
	) ([]*output.ResultEvent, error)

	// ScanPerHost performs scanning once per unique host.
	ScanPerHost(
		ctx *httpmsg.HttpRequestResponse,
		httpClient *http.Requester,
		scanCtx *ScanContext,
	) ([]*output.ResultEvent, error)
}

ActiveModule is the interface for active scanning modules. Active modules send HTTP requests to detect vulnerabilities.

Implementations must be thread-safe as scan methods will be called concurrently from multiple scanner goroutines.

func GetActiveModules

func GetActiveModules() []ActiveModule

GetActiveModules returns all registered active modules.

func GetActiveModulesByIDs

func GetActiveModulesByIDs(ids []string) []ActiveModule

GetActiveModulesByIDs returns active modules matching the given IDs.

type BaseActiveModule

type BaseActiveModule = modkit.BaseActiveModule

type BaseModule

type BaseModule = modkit.BaseModule

Re-export base types

type BasePassiveModule

type BasePassiveModule = modkit.BasePassiveModule

type BatchFlusher

type BatchFlusher interface {
	FlushFindings(scanCtx *ScanContext) ([]*output.ResultEvent, error)
}

BatchFlusher is an optional interface for passive modules that buffer data and produce deferred findings at end-of-scan. Unlike Flusher (side-effects only), BatchFlusher returns result events that the executor emits through the normal result pipeline (post-hooks, DB storage, callbacks).

type BodyDifferentialConfirmable

type BodyDifferentialConfirmable interface {
	ConfirmsByBodyDifferential() bool
}

BodyDifferentialConfirmable is an optional interface for active modules whose findings should be re-confirmed by the executor's safety net before being reported. When a module implementing it returns true, the executor replays the finding's payload-applied request and compares it against a clean (no-payload) baseline (the pre-scan baseline already on the item, plus one fresh fetch), requiring a reproducible, payload-driven in-band difference and rejecting status flips and dynamic-noise diffs (via modkit.ConfirmBodyDifferential).

Only modules whose true-positive signal IS an in-band body/header difference should opt in. Modules whose signal is out-of-band (OAST), timing-based, a small error string, or whose payload mutates server state (and so must not be replayed) must NOT implement this — they keep their own confirmation.

type ContentClassAware

type ContentClassAware interface {
	RequiredContentClasses() []string
}

ContentClassAware is implemented by modules whose findings structurally require a specific response body class (the canonical names mirror modkit.ContentClass: "html", "json", "xml", "text", "binary"). The executor skips such a module on a record whose response is a confirmed *different* structured class (it fails open on unknown / text). A module that does not implement this interface — and carries none of the content-class tags below — runs against every content type.

This gate is applied to PASSIVE modules only: a passive analyzer that cannot parse the body shape it was given produces nothing, so skipping it can never hide a finding it could otherwise have made. Active modules are intentionally not gated this way — many probe a host independently of the triggering record's body, where content-class gating would cause false negatives.

type ContextualActiveModule

type ContextualActiveModule interface {
	ScanPerInsertionPointContext(
		ctx context.Context,
		item *httpmsg.HttpRequestResponse,
		ip httpmsg.InsertionPoint,
		httpClient *http.Requester,
		scanCtx *ScanContext,
	) ([]*output.ResultEvent, error)

	ScanPerRequestContext(
		ctx context.Context,
		item *httpmsg.HttpRequestResponse,
		httpClient *http.Requester,
		scanCtx *ScanContext,
	) ([]*output.ResultEvent, error)

	ScanPerHostContext(
		ctx context.Context,
		item *httpmsg.HttpRequestResponse,
		httpClient *http.Requester,
		scanCtx *ScanContext,
	) ([]*output.ResultEvent, error)
}

ContextualActiveModule is an optional interface for active modules that support cancellation and timeout propagation through context. The executor prefers these methods when a module implements them, passing the per-call timeout/cancellation context so the module can thread it into cancellable HTTP requests (http.Requester.ExecuteContext). Modules can adopt this incrementally without breaking the legacy ActiveModule interface.

type ContextualPassiveModule

type ContextualPassiveModule interface {
	ScanPerRequestContext(ctx context.Context, item *httpmsg.HttpRequestResponse, scanCtx *ScanContext) ([]*output.ResultEvent, error)
	ScanPerHostContext(ctx context.Context, item *httpmsg.HttpRequestResponse, scanCtx *ScanContext) ([]*output.ResultEvent, error)
}

ContextualPassiveModule is an optional interface for passive modules that support cancellation and timeout propagation through context. Modules can implement this incrementally without breaking the legacy PassiveModule interface.

type Flusher

type Flusher interface {
	Flush(scanCtx *ScanContext)
}

Flusher is an optional interface for passive modules that buffer data and need end-of-scan finalization. The executor calls Flush after all workers have finished processing.

type InsertionPointTypeSet

type InsertionPointTypeSet = modkit.InsertionPointTypeSet

type Module

type Module interface {
	// ID returns unique identifier for the module (e.g., "sqli-error-based").
	ID() string

	// Name returns human-readable name (e.g., "SQLi Error Based Scanner").
	Name() string

	// Description returns detailed description (may contain markdown).
	Description() string

	// ShortDescription returns one-line summary for listings.
	ShortDescription() string

	// ConfirmationCriteria returns a description of how this module confirms a finding.
	ConfirmationCriteria() string

	// Severity returns the severity of issues found by this module.
	Severity() severity.Severity

	// Confidence returns the confidence level of findings produced by this module.
	Confidence() severity.Confidence

	// ScanScopes returns bitmask of supported scan scopes.
	// Must return at least one of: ScanScopeInsertionPoint, ScanScopeRequest, ScanScopeHost.
	ScanScopes() ScanScope

	// Tags returns classification tags for this module (e.g., "xss", "spring", "light").
	// Used for filtering modules via --module-tag flag.
	Tags() []string

	// CanProcess returns true if this module can process the given request.
	// Default implementations skip media files and certain HTTP methods.
	// Modules with special needs (like proxy_escape_detection) can override this.
	CanProcess(ctx *httpmsg.HttpRequestResponse) bool
}

Module is the base interface for all scanner modules. All modules must be thread-safe as scan methods will be called concurrently.

type PassiveModule

type PassiveModule interface {
	Module

	// Scope returns what parts of the HTTP transaction to analyze.
	Scope() PassiveScanScope

	// ScanPerRequest performs passive analysis on each request/response.
	ScanPerRequest(ctx *httpmsg.HttpRequestResponse, scanCtx *ScanContext) ([]*output.ResultEvent, error)

	// ScanPerHost performs passive analysis once per unique host.
	ScanPerHost(ctx *httpmsg.HttpRequestResponse, scanCtx *ScanContext) ([]*output.ResultEvent, error)
}

PassiveModule is the interface for passive scanning modules. Passive modules analyze existing HTTP traffic without sending additional requests.

Implementations must be thread-safe as scan methods will be called concurrently from multiple goroutines.

func GetPassiveModules

func GetPassiveModules() []PassiveModule

GetPassiveModules returns all registered passive modules.

func GetPassiveModulesByIDs

func GetPassiveModulesByIDs(ids []string) []PassiveModule

GetPassiveModulesByIDs returns passive modules matching the given IDs.

type PassiveScanScope

type PassiveScanScope = modkit.PassiveScanScope

type PerScanModule

type PerScanModule interface {
	Fresh() any
}

PerScanModule is an optional interface for active modules that carry mutable state meaningful only within ONE scan (per-host dedup maps, per-scan budgets, compare clients, discovery maps). The registry stores a single shared singleton of each module, so without isolation that state bleeds across concurrent server-mode scans. The runner replaces such a module with a fresh instance for each scan (see freshenPerScanModules); modules whose per-scan state is already isolated via dedup.Lazy(scanCtx.DedupMgr()) or ScanContext need not implement it.

Fresh returns a new instance with zeroed per-scan state. It is typed `any` rather than ActiveModule so a module package can implement it without importing pkg/modules — which would form an import cycle with the registry; the runner asserts the result back to ActiveModule. Implementations are one line:

func (m *Module) Fresh() any { return New() }

type Prioritized

type Prioritized interface {
	Priority() int
}

Prioritized is an optional interface for modules that declare execution priority. Lower values indicate higher priority (0 = highest). Modules without this interface default to DefaultModulePriority (100). Higher priority modules are spawned first, getting earlier access to rate-limit slots.

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry manages all scanner modules. Thread-safe for concurrent access.

func NewRegistry

func NewRegistry() *Registry

NewRegistry creates a new registry.

func (*Registry) ActiveModuleCount

func (r *Registry) ActiveModuleCount() int

ActiveModuleCount returns the number of active modules.

func (*Registry) GetActiveModules

func (r *Registry) GetActiveModules() []ActiveModule

GetActiveModules returns all active modules.

func (*Registry) GetActiveModulesByIDs

func (r *Registry) GetActiveModulesByIDs(ids []string) []ActiveModule

GetActiveModulesByIDs filters active modules by IDs. Input IDs are lowercased for user-input normalization; registered module IDs are guaranteed lowercase by RegisterActive.

func (*Registry) GetActiveModulesID

func (r *Registry) GetActiveModulesID() []string

GetActiveModulesID returns IDs of all active modules.

func (*Registry) GetPassiveModules

func (r *Registry) GetPassiveModules() []PassiveModule

GetPassiveModules returns all passive modules.

func (*Registry) GetPassiveModulesByIDs

func (r *Registry) GetPassiveModulesByIDs(ids []string) []PassiveModule

GetPassiveModulesByIDs filters passive modules by IDs. Input IDs are lowercased for user-input normalization; registered module IDs are guaranteed lowercase by RegisterPassive.

func (*Registry) GetPassiveModulesID

func (r *Registry) GetPassiveModulesID() []string

GetPassiveModulesID returns IDs of all passive modules.

func (*Registry) PassiveModuleCount

func (r *Registry) PassiveModuleCount() int

PassiveModuleCount returns the number of passive modules.

func (*Registry) RegisterActive

func (r *Registry) RegisterActive(m ActiveModule) *Registry

RegisterActive adds an active module to the registry. Panics if a module with the same ID is already registered or if the ID is not lowercase. Returns the registry to support fluent API.

func (*Registry) RegisterPassive

func (r *Registry) RegisterPassive(m PassiveModule) *Registry

RegisterPassive adds a passive module to the registry. Panics if a module with the same ID is already registered or if the ID is not lowercase. Returns the registry to support fluent API.

func (*Registry) ResolveModulePatterns

func (r *Registry) ResolveModulePatterns(patterns []string) []string

ResolveModulePatterns resolves user-provided patterns into exact module IDs using fuzzy matching. Each pattern is matched (case-insensitive) against:

  • Exact module ID match
  • Substring match on module ID
  • Substring match on module name

Returns deduplicated list of matched module IDs (both active and passive). Patterns that match nothing are silently ignored.

func (*Registry) ResolveModuleTags

func (r *Registry) ResolveModuleTags(tags []string) []string

ResolveModuleTags returns deduplicated module IDs for all modules that have at least one of the given tags (OR condition). Tags are matched case-insensitively.

type ScanContext

type ScanContext = modkit.ScanContext

Re-export ScanContext

type ScanScope

type ScanScope = modkit.ScanScope

type ScopeAwareModule

type ScopeAwareModule interface {
	ScopeAware() bool
}

ScopeAwareModule is an optional interface for passive modules that should only run on in-scope records. Modules returning true will be skipped when the current item is out of scope. Default behavior (not implementing this interface) is to run on all records regardless of scope.

type TechAware

type TechAware interface {
	RequiredTechs() []string
}

TechAware is an optional interface for modules that only make sense against certain technology stacks. Implement it on framework-specific modules (e.g. Spring, Rails, Django) to skip them on incompatible targets.

Semantics (allowlist):

  • Return an empty slice (or do not implement) → module always runs.
  • Return ["spring", "java"] → module runs only if the request's host has at least one of those tech tags detected by the *_fingerprint passive modules earlier in the same scan.
  • If no tech has been detected for the host yet, the executor fails open and runs the module anyway, so first-request scans aren't pruned.

Tech tags are lowercase strings that match the tag used by fingerprint modules (e.g. "spring", "rails", "django", "laravel", "express", "nextjs", "aspnet", "php", "wordpress").

type TimeoutHinter

type TimeoutHinter interface {
	TimeoutHint() time.Duration
}

TimeoutHinter is an optional interface for active or passive modules that need more time than the global per-module timeout (PassiveModuleTimeout for passive modules, ActiveModuleTimeout for active modules). The executor only honors the hint when it exceeds the applicable default; modules that do not implement this interface use the executor's default timeout.

type VulnClassifier

type VulnClassifier interface {
	VulnClass() string // e.g., "xss", "sqli", "ssti"
}

VulnClassifier is an optional interface for modules that declare their vulnerability class for cross-module deduplication. When a module reports a finding, the executor marks the (URL, param, vuln_class) as found. Other modules with the same vuln class can check and skip redundant scanning.

Directories

Path Synopsis
active
aem_cloudsettings_injection
Package aem_cloudsettings_injection detects the AEM cloud-settings pre-auth write chain (CVE-2025-54246) and the Expression Language injection it enables (CVE-2025-54247 / CVE-2025-54248).
Package aem_cloudsettings_injection detects the AEM cloud-settings pre-auth write chain (CVE-2025-54246) and the Expression Language injection it enables (CVE-2025-54247 / CVE-2025-54248).
aem_content_discovery
Package aem_content_discovery implements a routing-aware AEM repository content-discovery module.
Package aem_content_discovery implements a routing-aware AEM repository content-discovery module.
aem_oob_injection
Package aem_oob_injection fires out-of-band probes for two AEM server-side request vulnerabilities that can only be confirmed via a collaborator callback: the AccessTokenServlet full-read SSRF (CVE-2025-54249) and the CRX Package Manager blind XXE (CVE-2025-54251).
Package aem_oob_injection fires out-of-band probes for two AEM server-side request vulnerabilities that can only be confirmed via a collaborator callback: the AccessTokenServlet full-read SSRF (CVE-2025-54249) and the CRX Package Manager blind XXE (CVE-2025-54251).
client_path_traversal_confirm
Package client_path_traversal_confirm browser-confirms Client-Side Path Traversal (CSPT).
Package client_path_traversal_confirm browser-confirms Client-Side Path Traversal (CSPT).
dashboard_exposure
Package dashboard_exposure actively probes for exposed third-party dashboards, admin consoles and self-hosted apps (Grafana, Airflow, GitLab, Jenkins, Ollama, vLLM, ...) using the shared dashboardsig catalog.
Package dashboard_exposure actively probes for exposed third-party dashboards, admin consoles and self-hosted apps (Grafana, Airflow, GitLab, Jenkins, Ollama, vLLM, ...) using the shared dashboardsig catalog.
grpc_surface_audit
Package grpc_surface_audit is an active security audit for gRPC-Web endpoints spoken over HTTP/1.1.
Package grpc_surface_audit is an active security audit for gRPC-Web endpoints spoken over HTTP/1.1.
llm_boundary_probe
Package llm_boundary_probe implements an active scanner that probes an application-level LLM chat endpoint for prompt-injection boundary failures: disclosure of the system prompt / configured secrets, and (best-effort) out-of-band tool/network actions triggered by injected instructions.
Package llm_boundary_probe implements an active scanner that probes an application-level LLM chat endpoint for prompt-injection boundary failures: disclosure of the system prompt / configured secrets, and (best-effort) out-of-band tool/network actions triggered by injected instructions.
sourcemap_ingest
Package sourcemap_ingest recovers an application's original source from an exposed source map and feeds the routes it names back into the scan.
Package sourcemap_ingest recovers an application's original source from an exposed source map and feeds the routes it names back into the scan.
websocket_security
Package websocket_security retains the legacy module constructor for callers that imported it directly.
Package websocket_security retains the legacy module constructor for callers that imported it directly.
Package iisgate provides an active, cached confirmation that a host genuinely runs IIS/ASP.NET before the heavier IIS modules probe it.
Package iisgate provides an active, cached confirmation that a host genuinely runs IIS/ASP.NET before the heavier IIS modules probe it.
aem
Package aem holds shared detection, probing, and dispatcher-bypass helpers used by the aem_* scanner module family (Adobe Experience Manager / Sling / CRX).
Package aem holds shared detection, probing, and dispatcher-bypass helpers used by the aem_* scanner module family (Adobe Experience Manager / Sling / CRX).
csptflow
Package csptflow holds the Client-Side Path Traversal (CSPT) flow-recognition primitives shared by the passive client_path_taint detector and the active client_path_traversal_confirm module.
Package csptflow holds the Client-Side Path Traversal (CSPT) flow-recognition primitives shared by the passive client_path_taint detector and the active client_path_traversal_confirm module.
dashboardsig
Package dashboardsig is a shared catalog of third-party dashboards, admin consoles, and self-hosted products (Grafana, Apache Airflow, GitLab, Jenkins, Kibana, Vault, Ollama, vLLM, ...) together with the signatures used to detect them two ways:
Package dashboardsig is a shared catalog of third-party dashboards, admin consoles, and self-hosted products (Grafana, Apache Airflow, GitLab, Jenkins, Kibana, Vault, Ollama, vLLM, ...) together with the signatures used to detect them two ways:
grpcweb
Package grpcweb is a dependency-free gRPC-Web (HTTP/1.1) frame codec.
Package grpcweb is a dependency-free gRPC-Web (HTTP/1.1) frame codec.
llm
Package llm provides a minimal OpenAI-compatible chat client and a dependency-free secret matcher shared by the LLM-aware active scanner modules (currently llm_boundary_probe).
Package llm provides a minimal OpenAI-compatible chat client and a dependency-free secret matcher shared by the LLM-aware active scanner modules (currently llm_boundary_probe).
mcp
Package mcp provides shared helpers for Model Context Protocol (MCP) scanner modules and the vigolium.mcp jsext API.
Package mcp provides shared helpers for Model Context Protocol (MCP) scanner modules and the vigolium.mcp jsext API.
parampollution
Package parampollution provides SHARED MUTATION INFRASTRUCTURE for HTTP Parameter Pollution (HPP) — crafting requests that carry the SAME parameter name more than once so a front-end (WAF / proxy / router) and the back-end application disagree about which occurrence is authoritative.
Package parampollution provides SHARED MUTATION INFRASTRUCTURE for HTTP Parameter Pollution (HPP) — crafting requests that carry the SAME parameter name more than once so a front-end (WAF / proxy / router) and the back-end application disagree about which occurrence is authoritative.
powerpages
Package powerpages holds shared detection and probing helpers for the powerpages_* scanner family (Microsoft Power Pages / Power Apps portals, backed by the Dataverse Web API at /_api/<entityset>).
Package powerpages holds shared detection and probing helpers for the powerpages_* scanner family (Microsoft Power Pages / Power Apps portals, backed by the Dataverse Web API at /_api/<entityset>).
saasprobe
Package saasprobe provides a shared, low-level probe helper for the SaaS data-exposure module families (Salesforce Aura, ServiceNow Service Portal widgets, Microsoft Power Pages / Dataverse).
Package saasprobe provides a shared, low-level probe helper for the SaaS data-exposure module families (Salesforce Aura, ServiceNow Service Portal widgets, Microsoft Power Pages / Dataverse).
salesforce
Package salesforce holds shared detection and Aura-protocol helpers for the salesforce_* scanner family (Salesforce Experience Cloud / Lightning "community" sites served through the Aura gateway).
Package salesforce holds shared detection and Aura-protocol helpers for the salesforce_* scanner family (Salesforce Experience Cloud / Lightning "community" sites served through the Aura gateway).
servicenow
Package servicenow holds shared detection and Service Portal widget helpers for the servicenow_* scanner family.
Package servicenow holds shared detection and Service Portal widget helpers for the servicenow_* scanner family.
xssencode
Package xssencode provides reusable payload-encoding primitives and WAF-aware mutation for the XSS modules.
Package xssencode provides reusable payload-encoding primitives and WAF-aware mutation for the XSS modules.
Package modkit provides type definitions for module scanning.
Package modkit provides type definitions for module scanning.
Package modtest provides shared helpers for unit-testing scanner modules against an in-process httptest.Server.
Package modtest provides shared helpers for unit-testing scanner modules against an in-process httptest.Server.
passive
client_path_taint
Package client_path_taint is a passive Client-Side Path Traversal (CSPT) candidate detector.
Package client_path_taint is a passive Client-Side Path Traversal (CSPT) candidate detector.
dashboard_fingerprint
Package dashboard_fingerprint passively recognises third-party dashboards, admin consoles and developer tools (Grafana, Airflow, GitLab, Jenkins, Ollama, ...) in already-observed responses, using the shared dashboardsig catalog.
Package dashboard_fingerprint passively recognises third-party dashboards, admin consoles and developer tools (Grafana, Airflow, GitLab, Jenkins, Ollama, ...) in already-observed responses, using the shared dashboardsig catalog.
js_beautify
Package js_beautify implements a passive module that unminifies and unpacks first-party JavaScript (React/Next/Vue SPA bundles) into readable source using the embedded jstangle tool (webcrack, no eval-based deobfuscation).
Package js_beautify implements a passive module that unminifies and unpacks first-party JavaScript (React/Next/Vue SPA bundles) into readable source using the embedded jstangle tool (webcrack, no eval-based deobfuscation).
mcp_dangerous_tool_exposure
Package mcp_dangerous_tool_exposure passively inventories the tools advertised by an MCP server and flags those whose names indicate high-impact, side- effecting capabilities (code execution, file write/delete, outbound fetch, raw SQL, secret access).
Package mcp_dangerous_tool_exposure passively inventories the tools advertised by an MCP server and flags those whose names indicate high-impact, side- effecting capabilities (code execution, file write/delete, outbound fetch, raw SQL, secret access).
shared
diffscan
Package diffscan provides differential analysis tools for detecting injection vulnerabilities through response comparison.
Package diffscan provides differential analysis tools for detecting injection vulnerabilities through response comparison.
filesig
Package filesig provides shared structural confirmation that a leaked server-side file's real content appears in a response.
Package filesig provides shared structural confirmation that a leaked server-side file's real content appears in a response.
jwtutil
Package jwtutil provides shared JSON Web Token parsing and classification for the secret/JWT scanner modules.
Package jwtutil provides shared JSON Web Token parsing and classification for the secret/JWT scanner modules.
xssbreakout
Package xssbreakout builds executable XSS breakout payloads shared across the reflected, DOM-confirm, and stored XSS modules so they confirm the same classes of flaw with one source of truth.
Package xssbreakout builds executable XSS breakout payloads shared across the reflected, DOM-confirm, and stored XSS modules so they confirm the same classes of flaw with one source of truth.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL