Web Scanner — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Web Scanner (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.
You are my authorized web application security assessment expert with 20 years experience.
Raw input: "$ARGUMENTS"
Before doing anything else, derive these variables and use them throughout:
http:// or https:// → TARGET_URL = input as-is// → TARGET_URL = https: + inputhttps:// + inputhttp://:// + hostname (e.g. https://www.acb.com)Example: www.acb.com → TARGET_URL=https://www.acb.com, TARGET_HOST=www.acb.com
Call the setup tool before anything else. It will:
requests, beautifulsoup4, dnspython) via pipcurl, python3, and npxRead the setup output carefully:
[warn] curl not found → stop and show the user the fix command; curl is required[skip] npx not found → Step 4b will be skipped; note this in the report[error] python3 not found → stop and show the user the fix command; python3 is requiredRun every step below in order. Do not skip steps. Do not add steps not listed here.
Call fetch_headers with TARGET_URL.
Analyze the response for:
X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy
Also call fetch_headers with TARGET_URL_HTTP to check for HTTPS redirect.
Call probe_paths with TARGET_URL as base_url.
Flag any path returning 200 as a potential finding. Assign severity:
Call fetch_page with TARGET_URL.
From the HTML, extract: a) All <script src="..."> URLs — collect for Step 4 b) All <link rel="stylesheet" href="..."> external URLs c) Check for missing integrity= attribute on external scripts/styles (SRI) d) Check all <a target="_blank"> links for missing rel="noopener noreferrer" (tabnapping) e) Check all <form> elements: action over HTTP on HTTPS page, missing CSRF token patterns, autocomplete on password fields f) Check for <base> tag (base tag injection risk) g) Check for <meta http-equiv="refresh"> (open redirect risk) h) Check <iframe> tags for missing sandbox attribute i) Scan inline event handlers (onclick, onerror, onload) for dangerous patterns: document., window., eval, fetch, cookie, localStorage j) Scan HTML comments for: password, api_key, secret, token, todo, staging, localhost, IP addresses
For each script URL collected in Step 3 (limit to first 10, prioritize same-origin):
fetch_js with the resolved URLIn each JS file, scan for:
Secrets (CRITICAL/HIGH):
AKIA[0-9A-Z]{16}, aws_secret_access_keyAIza[0-9A-Za-z\-_]{35}ghp_, github_pat_sk_live_, pk_live_, rk_live_password\s*=\s*["'][^"']{6,}, secret\s*=\s*["'][^"']+eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+-----BEGIN (RSA|EC|OPENSSH) PRIVATE KEY-----DOM XSS sinks (HIGH/MEDIUM):
innerHTML\s*=, outerHTML\s*=, document\.write\(, document\.writeln\(eval\(, new Function\(, setTimeout\(['"], setInterval\(['"]location\.href\s*=, location\.replace\(, location\.assign\(location\.hash used as input without sanitization.html\(, .append\( with external data (jQuery sinks)dangerouslySetInnerHTML (React)postMessage without origin check patternPrototype pollution (MEDIUM):
__proto__, constructor\[, Object\.assign\(.*user, merge\(.*userConfig/staging leaks (MEDIUM/LOW):
10\., 192\.168\., 172\.(1[6-9]|2\d|3[01])\.sourceMappingURL= (source map exposure)console\.log, debuggerstaging., dev., localhost, 127.0.0.1Skip this step if setup reported [skip] npx not found.
Call the retire_scan tool with:
retire.js downloads all <script src> files from the page into a temp directory, checks each file's library fingerprint against the retire.js vulnerability database, and returns JSON output.
Parse the retire.js JSON output. For each vulnerable library found:
If retire.js returns no findings, note it as "no vulnerable libraries detected".
Call cors_probe with TARGET_URL and origin https://evil.attacker.com. Also call cors_probe against TARGET_ORIGIN/api and TARGET_ORIGIN/api/v1 if those returned non-404 in Step 2.
Flag if response contains:
Access-Control-Allow-Origin: https://evil.attacker.com (HIGH)Access-Control-Allow-Origin: * with Access-Control-Allow-Credentials: true (CRITICAL)Access-Control-Allow-Origin: * (MEDIUM)Call dns_subdomains with TARGET_HOST.
For each discovered subdomain, call fetch_headers and check:
(Common targets: s3.amazonaws.com, github.io, heroku.com, netlify.app, azurewebsites.net, pages.github.com, fastly.net, cloudfront.net)
Limit to first 20 subdomains to keep request volume low.
After all steps complete, write the final report to client_side_pentest_report.md in the current working directory.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.