mirror of
https://github.com/KeygraphHQ/shannon.git
synced 2026-06-10 17:27:49 +02:00
1af42339b9
* feat(preflight): add credential validation activity * refactor(preflight): tighten error retryability and dedup failure-point enum * refactor(preflight): extract resolvePromptDir helper and cap failure_detail at 250 chars * refactor(preflight): inline validator rules into intro paragraph * refactor(preflight): restyle validator prompt with XML tags and tool list * chore(preflight): bump auth validation timeout to 10 minutes * feat: provision playwright stealth config for browser auto-discovery * feat(stealth): strengthen browser fingerprint with chrome.runtime and realistic plugins * feat(prompts): add pipeline-testing stub for validate-authentication * refactor(stealth): swap zx for node:fs in playwright-config-writer * feat(auth): add email_login credentials with login-flow substitution * fix(auth): propagate email_login through credentials sanitizer * fix(config): drop dangerous-pattern check on credentials.password * feat(auth-validation): instruct agent to mask sensitive values in failure_detail * docs(auth): document email_login credentials for magic-link and email-OTP flows * docs(auth): add login_flow authoring guide with placeholder reference * feat(auth): make credentials.password optional for passwordless flows * docs(auth): drop redundant placeholder hint from login_flow examples
242 lines
8.2 KiB
JSON
242 lines
8.2 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://example.com/pentest-config-schema.json",
|
|
"title": "Penetration Testing Configuration Schema",
|
|
"description": "Schema for YAML configuration files used in the penetration testing agent",
|
|
"type": "object",
|
|
"properties": {
|
|
"authentication": {
|
|
"type": "object",
|
|
"description": "Authentication configuration for the target application",
|
|
"properties": {
|
|
"login_type": {
|
|
"type": "string",
|
|
"enum": ["form", "sso", "api", "basic"],
|
|
"description": "Type of authentication mechanism"
|
|
},
|
|
"login_url": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "URL for the login page or endpoint"
|
|
},
|
|
"credentials": {
|
|
"type": "object",
|
|
"description": "Login credentials",
|
|
"properties": {
|
|
"username": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 255,
|
|
"description": "Username or email for authentication"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 255,
|
|
"description": "Password for authentication"
|
|
},
|
|
"totp_secret": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z2-7]+=*$",
|
|
"description": "TOTP secret for two-factor authentication (Base32 encoded, case insensitive)"
|
|
},
|
|
"email_login": {
|
|
"type": "object",
|
|
"description": "Email account credentials for magic-link or OTP follow-through flows",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string",
|
|
"format": "email",
|
|
"description": "Email address used to receive magic links or OTPs"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 255,
|
|
"description": "Password for the email account"
|
|
},
|
|
"totp_secret": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z2-7]+=*$",
|
|
"description": "TOTP secret for the email account's two-factor authentication (Base32 encoded)"
|
|
}
|
|
},
|
|
"required": ["address", "password"],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": ["username"],
|
|
"additionalProperties": false
|
|
},
|
|
"login_flow": {
|
|
"type": "array",
|
|
"description": "Step-by-step instructions for the login process",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 500
|
|
},
|
|
"minItems": 1,
|
|
"maxItems": 20
|
|
},
|
|
"success_condition": {
|
|
"type": "object",
|
|
"description": "Condition that indicates successful authentication",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["url_contains", "element_present", "url_equals_exactly", "text_contains"],
|
|
"description": "Type of success condition to check"
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 500,
|
|
"description": "Value to match against the success condition"
|
|
}
|
|
},
|
|
"required": ["type", "value"],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": ["login_type", "login_url", "credentials", "success_condition"],
|
|
"additionalProperties": false
|
|
},
|
|
"pipeline": {
|
|
"type": "object",
|
|
"description": "Pipeline execution settings for retry behavior and concurrency",
|
|
"properties": {
|
|
"retry_preset": {
|
|
"type": "string",
|
|
"enum": ["default", "subscription"],
|
|
"description": "Retry preset. 'subscription' extends timeouts for Anthropic subscription rate limit windows (5h+)."
|
|
},
|
|
"max_concurrent_pipelines": {
|
|
"type": "string",
|
|
"pattern": "^[1-5]$",
|
|
"description": "Max concurrent vulnerability pipelines (1-5, default: 5)"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"rules": {
|
|
"type": "object",
|
|
"description": "Testing rules that define what to focus on or avoid during penetration testing",
|
|
"properties": {
|
|
"avoid": {
|
|
"type": "array",
|
|
"description": "Rules defining areas to avoid during testing",
|
|
"items": {
|
|
"$ref": "#/$defs/rule"
|
|
},
|
|
"maxItems": 50
|
|
},
|
|
"focus": {
|
|
"type": "array",
|
|
"description": "Rules defining areas to focus on during testing",
|
|
"items": {
|
|
"$ref": "#/$defs/rule"
|
|
},
|
|
"maxItems": 50
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"vuln_classes": {
|
|
"type": "array",
|
|
"description": "Vulnerability classes to test. When omitted, all five classes run. When set, only listed classes run; their vuln+exploit agents and report sections are included.",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": ["injection", "xss", "auth", "authz", "ssrf"]
|
|
},
|
|
"minItems": 1,
|
|
"maxItems": 5,
|
|
"uniqueItems": true
|
|
},
|
|
"exploit": {
|
|
"type": "string",
|
|
"enum": ["true", "false"],
|
|
"description": "Whether to run the exploitation phase (default true). Set false to run only analysis."
|
|
},
|
|
"report": {
|
|
"type": "object",
|
|
"description": "Report filtering and guidance applied by the report agent.",
|
|
"properties": {
|
|
"min_severity": {
|
|
"type": "string",
|
|
"enum": ["low", "medium", "high", "critical"],
|
|
"description": "Minimum severity threshold; findings below are dropped by the report agent."
|
|
},
|
|
"min_confidence": {
|
|
"type": "string",
|
|
"enum": ["low", "medium", "high"],
|
|
"description": "Minimum confidence threshold; findings below are dropped by the report agent."
|
|
},
|
|
"guidance": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 500,
|
|
"description": "Free-text guidance to the report agent (e.g., 'Drop findings about missing security headers')."
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"rules_of_engagement": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 1000,
|
|
"description": "Free-text instructions to the agent that render into every prompt."
|
|
},
|
|
"login": {
|
|
"type": "object",
|
|
"description": "Deprecated: Use 'authentication' section instead",
|
|
"deprecated": true
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Description of the target environment, its deployment context, and any information that helps guide the security assessment",
|
|
"minLength": 1,
|
|
"maxLength": 500,
|
|
"pattern": "\\S"
|
|
}
|
|
},
|
|
"anyOf": [
|
|
{ "required": ["authentication"] },
|
|
{ "required": ["rules"] },
|
|
{ "required": ["authentication", "rules"] },
|
|
{ "required": ["description"] },
|
|
{ "required": ["vuln_classes"] },
|
|
{ "required": ["exploit"] },
|
|
{ "required": ["report"] },
|
|
{ "required": ["rules_of_engagement"] }
|
|
],
|
|
"additionalProperties": false,
|
|
"$defs": {
|
|
"rule": {
|
|
"type": "object",
|
|
"description": "A single testing rule",
|
|
"properties": {
|
|
"description": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 200,
|
|
"description": "Human-readable description of the rule"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["url_path", "subdomain", "domain", "method", "header", "parameter", "code_path"],
|
|
"description": "Type of rule (what aspect of requests or source code to match against)"
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 1000,
|
|
"description": "Value to match"
|
|
}
|
|
},
|
|
"required": ["description", "type", "value"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|