-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathraw.json
More file actions
1 lines (1 loc) · 3.7 KB
/
Copy pathraw.json
File metadata and controls
1 lines (1 loc) · 3.7 KB
1
{"summary":"The packet defines strong fail-closed review, artifact, and verification contracts, but two executable trust-boundary defects materially weaken them: project-local explicit tool symlinks can evade scanner rejection, and the Cypress downloader inherits caller HOME without pinning gh to github.com. Additional validation and command-guidance gaps remain.","scores":{"semantic_correctness":91,"false_positive_control":94,"security_trust_boundaries":74,"verification_design":86,"scope_contract_consistency":92,"docs_usability":85},"findings":[{"severity":"H","category":"security_trust_boundaries","file":"skills/e2e-reviewer/scripts/scan.sh","line":185,"title":"Project-local tool symlink bypasses lexical-path rejection","evidence":"The case expression tests the combined string \"$candidate|$resolved\", but its candidate-path alternatives match only a string equal to or beginning with the project root, without accounting for the appended pipe and resolved path. An explicit executable path inside the project that resolves outside it can therefore avoid rejection, while the function returns and later executes the original project-controlled path.","recommendation":"Check candidate and resolved paths separately against PROJECT_ROOT_REAL, reject either when contained, and execute the validated resolved path rather than the original alias."},{"severity":"H","category":"security_trust_boundaries","file":"skills/cypress-debugger/scripts/download-cypress-reports.py","line":184,"title":"Cypress downloader trusts ambient gh home and host configuration","evidence":"The helper forwards caller HOME unchanged. In context, its gh api invocations omit an explicit --hostname, unlike the Playwright downloader, so gh may load host selection and credentials from ambient configuration rather than a pinned github.com boundary; HOME is also not rejected when project-controlled.","recommendation":"Canonicalize HOME, reject it when contained by the workspace, and pass --hostname github.com on every gh api invocation."},{"severity":"M","category":"verification_design","file":"skills/playwright-debugger/scripts/publish-json-report.py","line":113,"title":"Publisher validates JSON syntax but not report schema","evidence":"Publication validation consists of json.load with duplicate-key and finite-number hooks. Any syntactically valid JSON, including an object that the bundled report reader will reject as incomplete, can replace the destination after a successful command.","recommendation":"Before publication, apply the same bounded Playwright report schema and counter validation used by read-playwright-artifact.py."},{"severity":"M","category":"docs_usability","file":"skills/cypress-debugger/SKILL.md","line":107,"title":"Merge example bypasses documented safe-write procedure","evidence":"The actionable merge command redirects output directly to cypress/reports/merged.json. The same document requires symlink-safe destination validation immediately before shell redirection, but the example supplies no such validation and shell redirection can follow an existing symlink before the merger starts.","recommendation":"Provide a bundled descriptor-relative atomic publisher for merged Cypress JSON and use it in the example instead of shell redirection."}],"limitations":["Packet-only static review with no shell, filesystem, network, execution, tests, benchmarks, holdouts, prior reviews, or repository history.","The curated packet omits substantial product and verification surfaces, so this is not full product coverage, observed runtime success, skill accuracy, independent ground truth, or remote model attestation.","README sections were transformed or excluded according to the packet manifest; omitted claims and evidence were not assessed."],"verdict":"FAIL"}