forge-security: Application security
Engine: Hybrid — Forge + Addy Osmani Agent Skills, Google
Purpose
Perform a threat-informed audit of trust boundaries, injection, secrets, browser controls, dependencies, and abuse cases.
Deterministic runtime composition
Before loading any provider procedure, run:
Resolve ../../runtime/cli/src/composition-entry.js relative to this SKILL.md, then run:
node "<resolved-absolute-runner-path>" security compose --workflow audit --root "<repository-root>" --dry-run --json
Add one repeatable --request <provider-or-source> flag for each explicit user request. Add
--condition <task-condition> or --risk-surface <surface> only for a task fact you directly
proved; never infer one from generic wording. The command above is the default for this
audit-oriented module; for implementation use --workflow build, and for a fix, retest, or
release gate use --workflow fix, verify, or ship respectively. Read the JSON response,
keep the Forge contract at index zero, and resolve paths against the absolute runtime_root
reported in that response. Read eager[].runtimePath when entering the module. The full
selected[] list is availability/provenance; load only deferred[].runtimePath when the task
reaches that concern, in tier order. Refuse any path that escapes the root. Respect every reported
suppression and context budget. If missing is non-empty, stop and report the installation as
damaged; do not improvise a prose fallback. The runner and specialist content may live in a plugin
cache or global installation; never assume they are inside the audited repository.
Resolve and read ../fullstack-forge/references/shared/module-contract.md (applicability,
execution, mutation, verification, completion) and
../fullstack-forge/references/shared/evidence-rules.md (statuses, standards, tools, findings via
../fullstack-forge/references/PROTOCOL.md) relative to this module SKILL.md before reporting.
Never hide failed checks or claim that an operation ran when it did not.
Automatic activation signals
Activate when a request or direct repository evidence involves application security, when
the user explicitly names forge-security, or when discovery proves an applicable boundary.
- Every production-bound application
- Security-sensitive changes
When not to activate
- No exemption; scope may be reduced for non-executable documentation
Automated support
Relevant discovery inputs are:
- project and architecture profile
- trust boundaries
- dependency and secret scan outputs
Deterministic support, bounded evidence only:
scan-secret-patterns
inspect-routes
inspect-auth-boundaries
inspect-authorization
inspect-dependencies
Agent inspection procedure
- Model the attack surface from discovery: entry points, trust boundaries, secrets, and the assets behind each.
- Trace untrusted input from every entry point to execution sinks (SQL, shell, template, deserialization, HTTP clients, file paths), recording interpolation versus binding at each sink.
- Inspect browser-boundary controls: output encoding, CSRF protection, CORS policy, security headers, and cookie flags on the actual responses.
- Search for secrets in code, configuration, templates, and history; verify error responses and logs do not leak internals or sensitive data.
- Run available dependency, static, and secret scanners, separating confirmed findings from pattern matches, and check rate limiting and abuse controls on expensive or state-changing operations.
Manual inspection requirements:
- Review business-logic abuse and chained attack paths
- Validate production-only controls with operators
Stack-specific guidance:
- Use framework-native escaping and query parameterization at the final sink
Evidence to collect
Standards used as criteria:
- OWASP ASVS 5.0
- OWASP Cheat Sheet Series
- NIST SSDF
Common production failures
- Model assets, actors, entry points, trust boundaries, abuse cases, and mitigations
- Inspect injection, XSS, CSRF, SSRF, deserialization, path handling, redirects, headers, CORS, secrets, logging, and denial-of-service limits
- Run available dependency, static, and secret checks while distinguishing confirmed evidence from pattern matches
Missing-control checks
Each item needs direct evidence or one reasoned status.
- SQL injection
- NoSQL injection
- OS command injection
- Template injection
- Expression-language injection
- Header injection
- CRLF injection
- Log injection
- CSV and formula injection
- HTML injection
- JavaScript injection
- Cross-site scripting
- CSRF
- SSRF
- Path traversal
- Unsafe redirects
- Unsafe deserialization
- Request smuggling risks
- CORS
- Security headers
- Secret exposure
- Weak cryptography
- Hard-coded credentials
- Sensitive logging
- Error leakage
- Rate limiting
- Denial-of-service exposure
- Business-logic abuse
- Authentication weaknesses
- Authorization weaknesses
- Admin endpoints
- Debug endpoints
- Internal endpoints
- Dependency risks
- Prompt injection
- Unsafe shell execution
- Race conditions
- Mass assignment
- Prototype pollution
- ReDoS
- Session attacks
- OWASP ASVS, OWASP API Security, and NIST SSDF evidence
Commands and tools
- Run
forge security audit --json or fullstack-forge security audit --json when
an explicit audit is requested and the CLI is installed. Normal feature work does not require it.
Safe fixes
- Parameterize known trust-boundary inputs, redact secrets, and add straightforward security headers
- Add allowlists and explicit size limits
Approval-required changes
- Disabling controls, rotating secrets, or changing authentication, network, or production infrastructure
Verification
- Re-run scanners and targeted exploit regression tests
- Confirm every PASS has direct evidence
Completion contract
Follow fullstack-forge/references/shared/completion.md and the limitations below.
Known limitations
- This audit is not a penetration test and must not be represented as one
1---2name: forge-security-33description: Perform a threat-informed audit of trust boundaries, injection, secrets, browser controls, dependencies, and abuse cases.4---56# forge-security: Application security78Engine: Hybrid — Forge + Addy Osmani Agent Skills, Google910## Purpose1112Perform a threat-informed audit of trust boundaries, injection, secrets, browser controls, dependencies, and abuse cases.131415## Deterministic runtime composition1617Before loading any provider procedure, run:1819Resolve `../../runtime/cli/src/composition-entry.js` relative to this `SKILL.md`, then run:2021`node "<resolved-absolute-runner-path>" security compose --workflow audit --root "<repository-root>" --dry-run --json`2223Add one repeatable `--request <provider-or-source>` flag for each explicit user request. Add24`--condition <task-condition>` or `--risk-surface <surface>` only for a task fact you directly25proved; never infer one from generic wording. The command above is the default for this26audit-oriented module; for implementation use `--workflow build`, and for a fix, retest, or27release gate use `--workflow fix`, `verify`, or `ship` respectively. Read the JSON response,28keep the Forge contract at index zero, and resolve paths against the absolute `runtime_root`29reported in that response. Read `eager[].runtimePath` when entering the module. The full30`selected[]` list is availability/provenance; load only `deferred[].runtimePath` when the task31reaches that concern, in tier order. Refuse any path that escapes the root. Respect every reported32suppression and context budget. If `missing` is non-empty, stop and report the installation as33damaged; do not improvise a prose fallback. The runner and specialist content may live in a plugin34cache or global installation; never assume they are inside the audited repository.353637Resolve and read `../fullstack-forge/references/shared/module-contract.md` (applicability,38execution, mutation, verification, completion) and39`../fullstack-forge/references/shared/evidence-rules.md` (statuses, standards, tools, findings via40`../fullstack-forge/references/PROTOCOL.md`) relative to this module `SKILL.md` before reporting.4142Never hide failed checks or claim that an operation ran when it did not.4344## Automatic activation signals4546Activate when a request or direct repository evidence involves application security, when47the user explicitly names `forge-security`, or when discovery proves an applicable boundary.4849- Every production-bound application50- Security-sensitive changes5152## When not to activate5354- No exemption; scope may be reduced for non-executable documentation5556## Automated support5758Relevant discovery inputs are:5960- project and architecture profile61- trust boundaries62- dependency and secret scan outputs6364Deterministic support, bounded evidence only:6566- `scan-secret-patterns`67- `inspect-routes`68- `inspect-auth-boundaries`69- `inspect-authorization`70- `inspect-dependencies`7172## Agent inspection procedure73741. Model the attack surface from discovery: entry points, trust boundaries, secrets, and the assets behind each.752. Trace untrusted input from every entry point to execution sinks (SQL, shell, template, deserialization, HTTP clients, file paths), recording interpolation versus binding at each sink.763. Inspect browser-boundary controls: output encoding, CSRF protection, CORS policy, security headers, and cookie flags on the actual responses.774. Search for secrets in code, configuration, templates, and history; verify error responses and logs do not leak internals or sensitive data.785. Run available dependency, static, and secret scanners, separating confirmed findings from pattern matches, and check rate limiting and abuse controls on expensive or state-changing operations.7980Manual inspection requirements:8182- Review business-logic abuse and chained attack paths83- Validate production-only controls with operators8485Stack-specific guidance:8687- Use framework-native escaping and query parameterization at the final sink8889## Evidence to collect9091Standards used as criteria:9293- OWASP ASVS 5.094- OWASP Cheat Sheet Series95- NIST SSDF9697## Common production failures9899- Model assets, actors, entry points, trust boundaries, abuse cases, and mitigations100- Inspect injection, XSS, CSRF, SSRF, deserialization, path handling, redirects, headers, CORS, secrets, logging, and denial-of-service limits101- Run available dependency, static, and secret checks while distinguishing confirmed evidence from pattern matches102103## Missing-control checks104105Each item needs direct evidence or one reasoned status.106107- SQL injection108- NoSQL injection109- OS command injection110- Template injection111- Expression-language injection112- Header injection113- CRLF injection114- Log injection115- CSV and formula injection116- HTML injection117- JavaScript injection118- Cross-site scripting119- CSRF120- SSRF121- Path traversal122- Unsafe redirects123- Unsafe deserialization124- Request smuggling risks125- CORS126- Security headers127- Secret exposure128- Weak cryptography129- Hard-coded credentials130- Sensitive logging131- Error leakage132- Rate limiting133- Denial-of-service exposure134- Business-logic abuse135- Authentication weaknesses136- Authorization weaknesses137- Admin endpoints138- Debug endpoints139- Internal endpoints140- Dependency risks141- Prompt injection142- Unsafe shell execution143- Race conditions144- Mass assignment145- Prototype pollution146- ReDoS147- Session attacks148- OWASP ASVS, OWASP API Security, and NIST SSDF evidence149150## Commands and tools151152- Run `forge security audit --json` or `fullstack-forge security audit --json` when153 an explicit audit is requested and the CLI is installed. Normal feature work does not require it.154155## Safe fixes156157- Parameterize known trust-boundary inputs, redact secrets, and add straightforward security headers158- Add allowlists and explicit size limits159160## Approval-required changes161162- Disabling controls, rotating secrets, or changing authentication, network, or production infrastructure163164## Verification165166- Re-run scanners and targeted exploit regression tests167- Confirm every PASS has direct evidence168169## Completion contract170171Follow `fullstack-forge/references/shared/completion.md` and the limitations below.172173## Known limitations174175- This audit is not a penetration test and must not be represented as one