feat: backport config-driven run scoping and report filtering
Cherry-pick of upstream Shannon PR #326. Adds vuln_classes subset selection, exploit toggle, code_path avoid enforcement via SDK deny rules, deterministic findings rendering when exploit is disabled, report filtering (min_severity, min_confidence, guidance), and rules_of_engagement config field. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
@@ -118,6 +118,51 @@
|
||||
},
|
||||
"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",
|
||||
@@ -135,7 +180,11 @@
|
||||
{ "required": ["authentication"] },
|
||||
{ "required": ["rules"] },
|
||||
{ "required": ["authentication", "rules"] },
|
||||
{ "required": ["description"] }
|
||||
{ "required": ["description"] },
|
||||
{ "required": ["vuln_classes"] },
|
||||
{ "required": ["exploit"] },
|
||||
{ "required": ["report"] },
|
||||
{ "required": ["rules_of_engagement"] }
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"$defs": {
|
||||
@@ -151,17 +200,17 @@
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["path", "subdomain", "domain", "method", "header", "parameter"],
|
||||
"description": "Type of rule (what aspect of requests to match against)"
|
||||
"enum": ["url_path", "subdomain", "domain", "method", "header", "parameter", "code_path"],
|
||||
"description": "Type of rule (what aspect of requests or source code to match against)"
|
||||
},
|
||||
"url_path": {
|
||||
"value": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 1000,
|
||||
"description": "URL path pattern or value to match"
|
||||
"description": "Value to match"
|
||||
}
|
||||
},
|
||||
"required": ["description", "type", "url_path"],
|
||||
"required": ["description", "type", "value"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,27 @@
|
||||
# Description of the target environment (optional, max 500 chars)
|
||||
description: "Next.js e-commerce app on PostgreSQL. Local dev environment — .env files contain local-only credentials, not deployed to production."
|
||||
|
||||
# Limit which vulnerability classes run end-to-end (optional, default: all five)
|
||||
# vuln_classes: [injection, xss, auth, authz, ssrf]
|
||||
|
||||
# Skip the exploitation phase (optional, default: "true")
|
||||
# exploit: "false"
|
||||
|
||||
# Free-form engagement rules applied to analysis and exploitation agents (optional).
|
||||
# Example below is illustrative; edit, remove, or add sections as needed.
|
||||
# rules_of_engagement: |
|
||||
# Forbidden techniques:
|
||||
# - No password brute-force or credential stuffing. Cap login attempts at 5 per account.
|
||||
# - ...
|
||||
#
|
||||
# Operational:
|
||||
# - Throttle to under 5 requests per second per endpoint. Back off 60 seconds on any 429 response.
|
||||
# - ...
|
||||
#
|
||||
# Data handling:
|
||||
# - Do not include actual values in deliverables — use placeholders like [order_id] or [user_email].
|
||||
# - ...
|
||||
|
||||
authentication:
|
||||
login_type: form # Options: 'form' or 'sso'
|
||||
login_url: "https://example.com/login"
|
||||
@@ -25,27 +46,55 @@ authentication:
|
||||
value: "/dashboard"
|
||||
|
||||
rules:
|
||||
# Supported types: url_path, subdomain, domain, method, header, parameter, code_path
|
||||
avoid:
|
||||
- description: "Do not test the marketing site subdomain"
|
||||
type: subdomain
|
||||
url_path: "www"
|
||||
value: "www"
|
||||
|
||||
- description: "Skip logout functionality"
|
||||
type: path
|
||||
url_path: "/logout"
|
||||
type: url_path
|
||||
value: "/logout"
|
||||
|
||||
- description: "No DELETE operations on user API"
|
||||
type: path
|
||||
url_path: "/api/v1/users/*"
|
||||
type: url_path
|
||||
value: "/api/v1/users/*"
|
||||
|
||||
# code_path values are repo-relative file paths or globs (e.g. "src/auth.ts", "test/**").
|
||||
# - description: "Test fixtures and specs (not production code)"
|
||||
# type: code_path
|
||||
# value: "test/**"
|
||||
#
|
||||
# - description: "Generated migrations"
|
||||
# type: code_path
|
||||
# value: "db/migrations/**"
|
||||
|
||||
focus:
|
||||
- description: "Prioritize beta admin panel subdomain"
|
||||
type: subdomain
|
||||
url_path: "beta-admin"
|
||||
value: "beta-admin"
|
||||
|
||||
- description: "Focus on user profile updates"
|
||||
type: path
|
||||
url_path: "/api/v2/user-profile"
|
||||
type: url_path
|
||||
value: "/api/v2/user-profile"
|
||||
|
||||
# code_path values are repo-relative file paths or globs (e.g. "src/auth.ts", "routes/*.ts").
|
||||
# - description: "Express route handlers"
|
||||
# type: code_path
|
||||
# value: "routes/*.ts"
|
||||
#
|
||||
# - description: "Sequelize ORM model definitions"
|
||||
# type: code_path
|
||||
# value: "models/*.ts"
|
||||
|
||||
# Report filters applied by the report agent when assembling the final report (optional).
|
||||
# Example below is illustrative; edit, remove, or add sections as needed.
|
||||
# report:
|
||||
# min_severity: low
|
||||
# min_confidence: low
|
||||
# guidance: |
|
||||
# Drop findings about missing security headers and rate-limit gaps.
|
||||
# ...
|
||||
|
||||
# Pipeline execution settings (optional)
|
||||
# pipeline:
|
||||
|
||||
Reference in New Issue
Block a user