Context
Two CodeQL alerts were dismissed as by-design because isitsecure is a local, user-directed CLI — the operator supplies both the scan target URL and the repo path, so there is no trust boundary crossed:
py/full-ssrf in engine/shared/rate_limited_client.py — the DAST HTTP client requests the user's own target URL; that's its core function.
py/path-injection in engine/code_analysis/repo_ingestion.py — the path comes from the user's own --repo argument.
The one scenario where they would matter
Both become real if the launch server is ever bound beyond localhost or run multi-user, letting a remote party direct scans at arbitrary internal hosts/paths.
Defense-in-depth to add
Not a blocker for single-user local use (the supported mode today); tracked so the dismissals stay honest.
Context
Two CodeQL alerts were dismissed as by-design because
isitsecureis a local, user-directed CLI — the operator supplies both the scan target URL and the repo path, so there is no trust boundary crossed:py/full-ssrfinengine/shared/rate_limited_client.py— the DAST HTTP client requests the user's own target URL; that's its core function.py/path-injectioninengine/code_analysis/repo_ingestion.py— the path comes from the user's own--repoargument.The one scenario where they would matter
Both become real if the
launchserver is ever bound beyond localhost or run multi-user, letting a remote party direct scans at arbitrary internal hosts/paths.Defense-in-depth to add
launchserver to127.0.0.1by default; require an explicit opt-in flag to bind any other interface.169.254.0.0/16), loopback-to-internal pivots, and non-file://local paths outside an allowed root.Not a blocker for single-user local use (the supported mode today); tracked so the dismissals stay honest.