Skip to main content

JScope

Evidence-based JavaScript intelligence for bug bounty hunters and web app pentesters.
Reconstructs how a web app behaves from its JS, and refuses to show a finding it can't justify.

CI Python 3.10+ License: MIT


Most JS recon tools hand you a long list of strings. JScope hands you a map (routes, components, API calls, guards, roles) and a ranked list of where to start testing, where every point in the ranking has a stated reason and every finding carries the evidence behind it.

$ jscope analyze tests/sample_react

[where to start testing]  (deterministic ranking; reasons shown)
   68  [CONFIRMED] JS-0004  endpoint: /api/admin/reports/export
       test: Request as an unauthenticated / low-privilege user and check for missing access control.
   58  [CONFIRMED] JS-0001  endpoint: /api/admin/users
       test: Request as an unauthenticated / low-privilege user and check for missing access control.
   54  [CONFIRMED] JS-0003  endpoint: /api/users/{id}/profile
       test: Vary the ID parameter across accounts/sessions and diff authorization results.
   ...

[route map]  6 route(s)   (R=route G=guard role=declared role E=endpoint)
  R /                            UNPROTECTED
      E /api/v1/feed
  R /admin/reports               UNPROTECTED
      E /api/admin/reports/export
  R /login                       UNPROTECTED
      E /api/auth/login
  R /admin/users                 guards=RequireAuth roles=admin
      E /api/admin/users
  R /billing                     guards=RequireAuth
      E /api/payments/invoices
  R /profile                     guards=RequireAuth
      E /api/users/{id}/profile

An unguarded /admin/reports route calling an admin export endpoint is exactly the kind of lead you want surfaced in seconds. Try it yourself on the bundled fixture (tests/sample_react).

Install

pip install git+https://github.com/Lime27-Star/JScope.git
jscope doctor        # checks your install

Python 3.10+. For YAML OpenAPI specs: pip install "jscope[yaml] @ git+https://github.com/Lime27-Star/JScope.git".

Quick start

jscope analyze ./path/to/js-project --verbose      # ranking, route map, evidence appendix
jscope explain JS-0004 --findings-file f.json      # full evidence chain for one finding
jscope graph ./project                             # route -> component -> API -> guard map
jscope https://app.example.com                     # crawl + download + analyze (authorized targets only)
jscope report f.json --format html -o report.html  # re-render: human | json | markdown | html | sarif

Remote commands (go, scan, crawl, download) are bound to the target host, rate-limited, and refuse loopback/private addresses by default. For controlled local testing pass --allow-private.

What makes it different

Typical JS recon JScope
Method regex over bundles tree-sitter AST, constant propagation, dead-branch detection
Output flat list of URLs / strings route, guard and role graph with route-to-API attribution
Findings everything that matches only evidence-backed candidates, scored deterministically
Triage you sort it out ranked "where to start testing", each point explained
Honesty silent on limits every finding states what it could not resolve

Tools like LinkFinder, jsluice and SecretFinder are excellent at fast extraction, and JScope is built to sit alongside them, adding structure and prioritization on top.

How it stays honest

analyzers propose  --->  EvidenceEngine scores + dedups  --->  you see Findings
   (Candidate)             (deterministic, explainable)           (Finding)

Analyzers can never emit a finding directly, only Candidates backed by typed Evidence. That boundary keeps a noisy analyzer (including community plugins) from polluting your output. Confidence means "this pattern exists and means what it looks like", not "this is exploitable"; only the opt-in confirm / verify steps add runtime evidence. Details: docs/EVIDENCE_SCHEMA.md.

What it analyzes

14 built-in analyzers: routes (React Router, Vue Router, Angular, Next.js), authentication and authorization patterns, storage and token handling, GraphQL operations and schemas, OpenAPI specs (correlated both ways with client calls), service workers, source maps, HTML forms/CSP/SRI, WASM modules, secrets, endpoints and framework detection.

Also included: workspaces with baseline diffing (ws-scan), optional AI explanations that never invent findings (docs/AI.md), a plugin system with trust tiers (docs/PLUGINS.md), SARIF output for CI, and opt-in runtime confirmation and browser observation.

Status and limitations

JScope is a beta development tool, not a production scanner. Be aware of these before relying on it:

  • Symbol resolution is a per-file heuristic. There is no cross-file data flow yet, and import resolution handles relative paths only (no @/ or tsconfig aliases).
  • Client-side authorization findings are observations, not vulnerabilities. A missing guard may live in a layout or on the server.
  • Runtime confirmation is opt-in and narrow: GET/OPTIONS only, allow-listed hosts. It shows a route responds, not that it is vulnerable.
  • The accuracy benchmark uses 12 synthetic fixtures; a real-world corpus is on the roadmap.
  • Network scope enforcement is not unified across every component and DNS pinning is not guaranteed on all paths. Read docs/SECURITY_LIMITATIONS.md. Plugins execute arbitrary Python.

Only test systems you own or are explicitly authorized to assess.

Development

git clone https://github.com/Lime27-Star/JScope && cd JScope
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest
python -m jscope benchmark --strict

See CHANGELOG.md for release history and docs/ for each subsystem. Issues and pull requests are welcome.

License

MIT, see LICENSE.

Metadata

Release files for jscope 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jscope 0.4.3
File Size Uploaded Provenance
jscope-0.4.3.tar.gz 236.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for jscope 0.4.3
File Interpreter ABI Platform
jscope-0.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 462.9 kB

Release files / jscope-0.4.3.tar.gz

Download URL jscope-0.4.3.tar.gz
Size 236.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b0c09de153db5ce1e282b7c2372539474325af0ed60436b3b9a761faf9db38ba
BLAKE2b-256 checksum
How to use checksums
3e2d7765fe4be87004a09eac88bfcbb79971b5be58541810bf97fa327a55f5cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.13

Release files / jscope-0.4.3-py3-none-any.whl

Download URL jscope-0.4.3-py3-none-any.whl
Size 226.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f52d6568f1ced334890b6dad69d1aa04d7be7d623a98649b8d1dd36a6c95d940
BLAKE2b-256 checksum
How to use checksums
1b141958297419128a801fb01c787bc6dc3b4a7eb919edda630d48110c68e1d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.13

Security for jscope 0.4.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page