web-pentest-7a8f05 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited web-pentest-7a8f05 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A phased pentesting workflow for running web applications. Built around three rules:
pre-declared. Off-scope hosts are refused.
is not a clean bill of health until you've tried the bypass set.
Violating any of these invalidates the engagement and may be illegal.
MUST confirm with the user, in writing, that they own or have written authorization to test the target. Record the acknowledgement in engagement/authorization.md (see template). No acknowledgement → no active scanning. Reading public pages with curl is fine; sending payloads is not.
engagement/scope.txt — one hostname orCIDR per line. Every nmap, curl, whatweb, browser navigation, or payload-bearing request MUST be against an entry in scope. If a target redirects you off-scope (3xx to a different host, a link in HTML), STOP and confirm with the user before following.
"yes, prod is in scope and I have written sign-off," assume not. Default targets are staging, local docker, dedicated test instances.
169.254.169.254,metadata.google.internal, 100.100.100.200, [fd00:ec2::254], or equivalent unless the engagement explicitly includes SSRF-to-metadata as a goal AND the target is one you control. The agent's browser tool can reach these from inside your own infrastructure — don't.
filesystem-write SSTI, command injection with rm/shutdown/mkfs, anything that mutates beyond a single test row → ASK FIRST. The approval.py system catches some; don't rely on it alone.
payloads, captured credentials, and JWT tokens. Anything sensitive you write to the conversation can be replayed in context compression passes. Mitigation:
them in any message. Full values go to engagement/evidence/ files, never into chat history.
any single host. The recon-scan.sh script enforces this. Don't bypass it without operator approval.
assessment, not a "PASS." Even a clean run is "no exploitable issues FOUND in scope X within time T using methods Y" — not "the application is secure." Mirror that language in the report.
Before any scanning happens, create the engagement directory and authorization acknowledgement.
ENGAGEMENT=engagement-$(date +%Y%m%d-%H%M%S)
mkdir -p "$ENGAGEMENT"/{evidence,findings,reports}
cd "$ENGAGEMENT""Confirm: (a) the target URL is [X], (b) you own this application or have written authorization to test it, and (c) the engagement may run for up to [N] hours starting now. Reply 'authorized' to proceed."
engagement/authorization.md using thetemplate in templates/authorization.md. Include:
localhost
127.0.0.1
staging.example.com
192.168.1.0/24 # internal lab only, with operator OKreferences/scope-enforcement.md before issuing the firstactive request — that doc has the host-extraction rules you apply to every command/URL before it goes out.
Skip if no source access (black-box engagement).
If you have read access to the application source:
execute(, os.system(, eval(,template render, file read/write, redirect target
privileged endpoints
what comes from request.*
when proper sanitization is found (parameterized queries, allowlists, shlex.quote, well-known escapers).
Output: evidence/pre-recon.md — architecture map, sink inventory, suspected vulnerable code paths.
This is OFFLINE work. No traffic to the target.
Maps the attack surface. All requests are GETs of public pages, no payloads yet. Still scope-bounded.
in scope (avoids the "DNS points somewhere unexpected" trap).
nmap -sT -T3 --top-ports 100 -oN evidence/nmap.txt $TARGETUse -T3 (default), not -T4/-T5. Stealthier and avoids tripping IDS/IPS in shared environments.
whatweb -v $TARGET_URL > evidence/whatweb.txt
curl -sIk $TARGET_URL > evidence/headers.txtbrowser_navigate,browser_get_images, follow links).
robots.txt, sitemap.xml, .well-known/*.XHR/fetch calls.
session cookie names, token formats. Do NOT send credentials yet — just observe.
evidence/pre-recon.md finding, mark whether the live surface confirms it's reachable.
Output: evidence/recon.md — endpoints, technologies, auth model, input vectors.
One delegate_task per vulnerability class. Each agent reads evidence/recon.md (+ evidence/pre-recon.md if present), produces findings/<class>-queue.json using templates/exploitation-queue.json.
Use delegate_task with these focused subagents (parallel where possible):
| Class | Goal | Reference |
|---|---|---|
injection | SQLi, command, path traversal, SSTI, LFI/RFI, deserialization | references/vuln-taxonomy.md (slot types) |
xss | Reflected, stored, DOM-based | references/vuln-taxonomy.md (render contexts) |
auth | Login bypass, JWT confusion, session fixation, OAuth flaws | references/exploitation-techniques.md |
authz | IDOR, vertical/horizontal escalation, business logic | references/exploitation-techniques.md |
ssrf | Internal reachability, metadata, protocol smuggling | Skip metadata unless explicitly authorized |
infra | Misconfig, info disclosure, default creds, exposed admin | references/exploitation-techniques.md |
Each queue entry has: id, vuln class, source (file:line if known), endpoint, parameter, slot type, suspected defense, verdict (identified / partial / confirmed / critical), witness payload, confidence (0-1), notes.
The analysis phase doesn't send malicious payloads yet — it stages them. The exploitation phase actually fires them.
Only run a sub-agent per class where the analysis queue has actionable entries (identified or partial).
For each candidate:
approved if destructive?
' AND 1=1--then ' AND 1=2--. XSS: a benign marker like <svg/onload=console.log("HERMES-PENTEST-XSS")>. Never alert(1) in stored XSS — it'll fire for other users in shared environments.
probe (SLEEP(5)) and time the response. For SSRF, use a tester-controlled callback host you own (NOT a public service like webhook.site for sensitive engagements — exfil paths).
that blocks: try at least the bypass set in references/bypass-techniques.md for that class. Only after the set is exhausted may you write verdict: false_positive.
Output: findings/exploitation-evidence.md
Redact in evidence files:
full value to findings/secrets-vault.md (gitignored).
Generate the final report using templates/pentest-report.md. Sections:
engagement/scope.txt)engagement/authorization.md)Severity policy: CVSS only for L3/L4. L1/L2 are "candidates pending verification" — don't assign CVSS to unverified findings.
approval for destructive testing — STOP and ask.
the operator.
customer database while testing an unrelated endpoint). STOP, document, report to the operator. Do not pivot without explicit approval — that pivot is what makes pentesting illegal.
Cobalt Strike, AD attacks, network protocol fuzzing).
If the engagement needs any of these, escalate to a professional pentester. This skill complements professional pentesting; it does not replace it.
references/scope-enforcement.md — how to bound every active requestreferences/vuln-taxonomy.md — slot types, render contexts, OWASP mapreferences/exploitation-techniques.md — per-class payload patternsreferences/bypass-techniques.md — common WAF/filter bypassestemplates/authorization.md — engagement authorization templatetemplates/pentest-report.md — final report templatetemplates/exploitation-queue.json — per-class finding queue schemascripts/recon-scan.sh — rate-limited nmap+whatweb+headers wrapperBefore applying this skill:
While working:
After completing:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.