Conversation
Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
* feat: update response with correct info WIP * fix: update responses and excel report generation * docs: update readme with api-mode instructions --------- Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
* feat: sort rules before writing to stdout * chore: add missing licence headers * chore: add xlsx file and openapi.yaml to REUSE.toml --------- Signed-off-by: Mats Johansson <extern.mats.johansson@digg.se>
Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
Signed-off-by: Nicklas Silversved <nicklas.silversved@digg.se>
Signed-off-by: Mats Johansson <extern.mats.johansson@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
…lidate endpoint Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Mirelle Falstad <extern.mirelle.falstad@digg.se>
* feat: add logic for building and displaying helper url for rule * fix: add copyright and licensing information --------- Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
…mode (#505) Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Fredrik Nordlander <fredrik.nordlander@digg.se>
Signed-off-by: Mats Johansson <extern.mats.johansson@digg.se>
| ); | ||
| } | ||
|
|
||
| const response = await fetch(dto.url, config?.customFetchConfig); |
Check failure
Code scanning / CodeQL
Server-side request forgery Critical
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 17 days ago
In general, to fix SSRF you must not let arbitrary user input fully determine the request URL. Instead, you should: (1) parse and validate the URL; (2) constrain scheme/host/port/path to an allow‑list or at least deny internal hosts and IP ranges; and (3) only perform the request if validation passes, otherwise fail with a clear error.
For this code, the least invasive robust fix is to introduce a dedicated URL validation function in this file that: uses the standard URL class to parse dto.url; ensures the scheme is http or https; optionally enforces a domain allow‑list from config (if available); and, crucially, blocks requests to localhost hostnames and common internal IP patterns (loopback, link‑local, RFC1918 ranges). This validation should be called after the existing urlMatchRegex check and before fetch. If validation fails, throw a RapLPBaseApiError with ERROR_TYPE.BAD_REQUEST, preserving current behavior style.
Concretely:
- In
src/routes/urlValidation.ts, add a helper function, e.g.validateRequestUrl, aboveregisterUrlValidationRoutes. It will acceptrawUrl: stringand the loadedconfig, parse the URL, and throw if it is unsafe. - Inside the route at
/api/v1/validation/url, after the regex check (lines 24–30) and beforefetch, call this helper, and use its returnedURLor string value to construct thefetchcall. This keeps existing functionality (fetching from a user-supplied external URL) while adding solid server-side validation. - Use only built‑in functionality (
URL,RegExp); no new imports are needed.
Signed-off-by: Mats Johansson <extern.mats.johansson@digg.se>
Signed-off-by: Mats Johansson <extern.mats.johansson@digg.se>
Signed-off-by: Mats Johansson <extern.mats.johansson@digg.se>
Fixes #508
Checklist