io.github.alex-on-ai/webreaper
version 11.3.2
- scanned 2026-10-16
- source github.com/alex-on-ai/WebReaper
- commit 063d76383b31
- transport stdio
- files read 58
- methodology 0.2.0
- ruleset 0.1.1
71
1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code
100measured on 65% of this axis
0measured on 98% of this axis
1 vulnerability could not be placed in `03` §6's table and is listed but not scored
77measured on 75% of this axis
51
The evidence
Every deduction below names the artefact that produced it. Nothing on this page was executed: the source was read, never run, and no running server was contacted.
Code Safety
- website/components/mdx-content.tsx:14mcp-js-dynamic-code-execution (critical/medium)
Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.
// so the component identity is stable across re-renders (no remount/state loss). function compileMDX(code: string) { const fn = new Function(code); return fn({ ...runtime }).default as ComponentType<{ components?: MDXComponentMap; - website/app/api/playground/scrape/route.ts:44mcp-js-ssrf-nonliteral-url (medium/low)
An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.
let upstream: Response; try { upstream = await fetch(upstreamUrl, { headers: backendHeaders(), // Propagate client disconnect so the backend stops scraping when the - website/app/api/playground/tier-b/scrape/route.ts:60mcp-js-ssrf-nonliteral-url (medium/low)
An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.
let upstream: Response; try { upstream = await fetch(upstreamUrl, { headers: backendHeaders(), // Propagate client disconnect so the backend kills the browser when the
Auth Posture
- authentication_model
stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here
- transport_security
declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)
- secret_handling
detect-secrets matched 707 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Basic Auth Credentials, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:43; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:52; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:55; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:56; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:58; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:61; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:62; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:67; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:69; Base64 High Entropy String at Examples/WebReaper.DistributedScraperWorkerService/ScrapingWorker.cs:52; …and 697 more matches
- authorization_granularity
no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.
Dependency Health
Showing the 50 most severe of 52 findings on this axis. The score was computed over all of them — findings beyond the fourth of a severity still deduct at a tenth of their weight — so the remainder is omitted from this page, not from the arithmetic.
- website/pnpm-lock.yamlnext 16.2.6 — GHSA-2xp9-vwfh-vxw4
direct, CVSS 9.5, fixed in 16.3.3
https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-vcvr-r3jv-pc5j
direct, CVSS 9.5, fixed in 16.3.6
https://osv.dev/vulnerability/GHSA-vcvr-r3jv-pc5j - website/pnpm-lock.yamlnext 16.2.6 — GHSA-p293-qw3h-jr36
direct, CVSS 9.0, fixed in 16.3.3
https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-6gpp-xcg3-4w24
direct, CVSS 8.3, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-6gpp-xcg3-4w24 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-89xv-2m56-2m9x
direct, CVSS 8.3, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x - website/pnpm-lock.yamlnext 16.2.6 — GHSA-cjq9-62q9-8jv4
direct, CVSS 8.3, fixed in 16.3.8
https://osv.dev/vulnerability/GHSA-cjq9-62q9-8jv4 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-p9j2-gv94-2wf4
direct, CVSS 8.3, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-m99w-x7hq-7vfj
direct, CVSS 8.2, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj - website/pnpm-lock.yamlsharp 0.34.5 — GHSA-rgj7-g3m4-5g8c
transitive, CVSS 8.9, fixed in 0.35.4
https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c - website/pnpm-lock.yamlsharp 0.34.5 — GHSA-wq5f-xc86-pv6w
transitive, CVSS 8.9, fixed in 0.35.5
https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w - website/pnpm-lock.yamlbraces 3.0.3 — GHSA-vfj7-8cjw-p6xm
transitive, CVSS 8.7
https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm - website/pnpm-lock.yamlsource-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q
transitive, CVSS 8.7, fixed in 1.2.2
https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q - website/pnpm-lock.yamldeepmerge-ts 7.1.5 — GHSA-ggr8-5vv4-36mx
transitive, CVSS 8.2, fixed in 8.0.0
https://osv.dev/vulnerability/GHSA-ggr8-5vv4-36mx - website/pnpm-lock.yamlnanoid 3.3.12 — GHSA-28wg-ghj8-5hjv
transitive, CVSS 8.2, fixed in 3.3.16
https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv - website/pnpm-lock.yamlnanoid 3.3.12 — GHSA-2v37-7h3g-55p8
transitive, CVSS 8.2, fixed in 3.3.18
https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8 - website/pnpm-lock.yamlbrace-expansion 1.1.15 — GHSA-3jxr-9vmj-r5cp
transitive, CVSS 7.7, fixed in 1.1.16
https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp - website/pnpm-lock.yamlbrace-expansion 5.0.6 — GHSA-3jxr-9vmj-r5cp
transitive, CVSS 7.7, fixed in 5.0.7
https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp - website/pnpm-lock.yamlbrace-expansion 1.1.15 — GHSA-6j4f-fj2g-mc7p
transitive, CVSS 7.5, fixed in 1.1.19
https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p - website/pnpm-lock.yamlbrace-expansion 5.0.6 — GHSA-6j4f-fj2g-mc7p
transitive, CVSS 7.5, fixed in 5.0.10
https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p - website/pnpm-lock.yamlbrace-expansion 1.1.15 — GHSA-mh99-v99m-4gvg
transitive, CVSS 7.5, fixed in 1.1.17
https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg - website/pnpm-lock.yamlbrace-expansion 5.0.6 — GHSA-mh99-v99m-4gvg
transitive, CVSS 7.5, fixed in 5.0.8
https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg - website/pnpm-lock.yamlbrace-expansion 1.1.15 — GHSA-qhr7-859c-m2p7
transitive, CVSS 7.5, fixed in 1.1.20
https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7 - website/pnpm-lock.yamlbrace-expansion 5.0.6 — GHSA-qhr7-859c-m2p7
transitive, CVSS 7.5, fixed in 5.0.11
https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7 - website/pnpm-lock.yamlbrace-expansion 1.1.15 — GHSA-rgw5-rvv9-x895
transitive, CVSS 7.5, fixed in 1.1.18
https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895 - website/pnpm-lock.yamlbrace-expansion 5.0.6 — GHSA-rgw5-rvv9-x895
transitive, CVSS 7.5, fixed in 5.0.9
https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895 - website/pnpm-lock.yamlbrowserslist 4.28.2 — GHSA-73wf-gq98-2v4g
transitive, CVSS 7.5, fixed in 4.28.7
https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g - website/pnpm-lock.yamlbrowserslist 4.28.2 — GHSA-c83g-rgw3-j3cx
transitive, CVSS 7.5, fixed in 4.28.7
https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx - website/pnpm-lock.yamljs-yaml 4.1.1 — GHSA-2883-xcg3-v3hh
transitive, CVSS 7.5, fixed in 4.3.2
https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh - website/pnpm-lock.yamljs-yaml 4.1.1 — GHSA-52cp-r559-cp3m
transitive, CVSS 7.5, fixed in 4.3.0
https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m - website/pnpm-lock.yamljs-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj
transitive, CVSS 7.5, fixed in 4.3.1
https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj - website/pnpm-lock.yamlpostcss 8.4.31 — GHSA-6g55-p6wh-862q
transitive, CVSS 7.5, fixed in 8.5.12
https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q - website/pnpm-lock.yamlpostcss 8.4.31 — GHSA-r28c-9q8g-f849
transitive, CVSS 7.5, fixed in 8.5.18
https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849 - website/pnpm-lock.yamlpostcss 8.5.15 — GHSA-r28c-9q8g-f849
transitive, CVSS 7.5, fixed in 8.5.18
https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849 - website/pnpm-lock.yamlsharp 0.34.5 — GHSA-f88m-g3jw-g9cj
transitive, CVSS 7.0, fixed in 0.35.0
https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj - website/pnpm-lock.yamlnext 16.2.6 — GHSA-4633-3j49-mh5q
direct, CVSS 6.3, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-4633-3j49-mh5q - website/pnpm-lock.yamlnext 16.2.6 — GHSA-4c39-4ccg-62r3
direct, CVSS 6.3, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-4c39-4ccg-62r3 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-4jqv-mc3x-m676
direct, CVSS 6.3, fixed in 16.3.8
https://osv.dev/vulnerability/GHSA-4jqv-mc3x-m676 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-955p-x3mx-jcvp
direct, CVSS 6.3, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-955p-x3mx-jcvp - website/pnpm-lock.yamlnext 16.2.6 — GHSA-f87g-xv8r-7p7x
direct, CVSS 6.3, fixed in 16.3.8
https://osv.dev/vulnerability/GHSA-f87g-xv8r-7p7x - website/pnpm-lock.yamlnext 16.2.6 — GHSA-mcj8-r9mp-w47p
direct, CVSS 6.3, fixed in 16.3.8
https://osv.dev/vulnerability/GHSA-mcj8-r9mp-w47p - website/pnpm-lock.yamlnext 16.2.6 — GHSA-q8wf-6r8g-63ch
direct, CVSS 6.3, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-q8wf-6r8g-63ch - website/pnpm-lock.yamlnext 16.2.6 — GHSA-68g3-v927-f742
direct, CVSS 6.0, fixed in 16.2.11
https://osv.dev/vulnerability/GHSA-68g3-v927-f742 - website/pnpm-lock.yamlnext 16.2.6 — GHSA-39w2-rjm5-chcv
direct, CVSS 5.4, fixed in 16.3.8
https://osv.dev/vulnerability/GHSA-39w2-rjm5-chcv - website/pnpm-lock.yamlbaseline-browser-mapping 2.10.32 — GHSA-w5vr-8v7q-w6rv
transitive, CVSS 6.6, fixed in 2.11.0
https://osv.dev/vulnerability/GHSA-w5vr-8v7q-w6rv - website/pnpm-lock.yamlpostcss 8.4.31 — GHSA-fxqj-rqcc-2cmp
transitive, CVSS 6.3, fixed in 8.5.23
https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp - website/pnpm-lock.yamlpostcss 8.5.15 — GHSA-fxqj-rqcc-2cmp
transitive, CVSS 6.3, fixed in 8.5.23
https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp - website/pnpm-lock.yamlpostcss 8.4.31 — GHSA-qx2v-qp2m-jg93
transitive, CVSS 6.1, fixed in 8.5.10
https://osv.dev/vulnerability/GHSA-qx2v-qp2m-jg93 - website/pnpm-lock.yamlpostcss-selector-parser 6.0.10 — GHSA-rj75-hqrm-r3gf
transitive, CVSS 5.9, fixed in 7.1.6
https://osv.dev/vulnerability/GHSA-rj75-hqrm-r3gf - website/pnpm-lock.yamlbrace-expansion 1.1.15 — GHSA-q2hr-2g5m-vwhr
transitive, CVSS 5.3, fixed in 1.1.21
https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr - website/pnpm-lock.yamlbrace-expansion 5.0.6 — GHSA-q2hr-2g5m-vwhr
transitive, CVSS 5.3, fixed in 5.0.12
https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr
Maintenance
- recency
last commit 12 day(s) before 2026-10-16
- issue_responsiveness
lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 50.8 day(s) to first maintainer comment
- release_cadence
median release gap 1 days (by releases), last release 110 day(s) ago
- bus_factor
this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.
- repository_signals
`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.
Transparency
- license
LICENSE.txt present with no SPDX-License-Identifier tag; identified as 'MIT' from its text
- readme_quality
README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)
- declared_scopes
neither the README nor the MCP manifest documents what the server accesses or what side effects it has
- changelog
CHANGELOG.md present
- security_contact
no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately
Contest a finding
Every number here comes from a rule reading published source, and rules get things wrong. If something on this page is incorrect — or correct but mitigated by a check the rule cannot see — open an issue and we answer it in writing. A finding we got wrong is removed and the rule is fixed; one that stands is answered on the record.
Anyone can file: the maintainer, a researcher who disagrees with the classification, or a user who tested the server and could not reproduce it. Name this server and the rule or advisory ID shown beside the finding above. We aim to reply within five business days and to resolve within ten.