Commit Graph

44 Commits

Author SHA1 Message Date
Jamie Tanna 29a7b9c5f5 fix(util/http): allow blocking requests to internal hosts
To harden Renovate from being able to access internal hosts, we can add
a level of enforcement on all outgoing requests.

We can split this into two types of traffic:

- where the response becomes configuration (i.e. `extends`)
- where the response does not become configuration (i.e.
  `customDatasources`)

To harden this, we enforce on every outbound HTTP request:

- check the resolved URL before anything, including cache lookups, can
  proceed
  - catching IP-literal hosts in every spelling the WHATWG URL parser normalizes
  - blocking known Cloud metadata IPs, too
- a `dnsLookup` wrapper validates every address a hostname resolves to,
  on every new connection, which also defeats DNS rebinding
- a `beforeRedirect` hook re-runs the URL check on each redirect
  target, with the new host getting its own grant lookup rather than
  inheriting the original host's verdict

We default this enforcement to `warn`, to not break existing deployments
and instead give them visibility into required configuration before a
future major version (major+1) enables `block` by default.

We'll also remove allow in a future major version (major+2), to give
time for admins to migrate over.

When a request is blocked, this degrades like an unreachable registry,
so a Renovate run isn't aborted by a blocked request.

As part of this, we can also provide a worked example of the different
cases that do/do not need allowing via `hostRules`.

Requests through an admin-configured proxy resolve DNS at the proxy, so
`dnsLookup` never runs for them, so we can resolve the hostname locally
and validate every address before the request instead.

This doesn't catch everything, especially as the proxy may resolve the
name to a different result, and if we can't resolve the name - possible
in locked-down corporate environments - we fail open.

Child processes aren't currently able to route traffic through
Renovate's HTTP layer, so are unrestricted.

Co-authored-by: Claude Fable 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-09-10 14:52:01 +01:00
Sebastian Poxhofer c908d078ef fix(datasource): replace getJsonUnchecked in npm/Node/PyPI/Go (#43699)
* fix(datasource): replace getJsonUnchecked with validated getJson in npm/Node/PyPI/Go

Replace all getJsonUnchecked calls in npm, Node.js, PyPI, and Go datasources
with Zod-validated getJson calls:

- datasource/npm: add NpmResponseSchema to schema.ts (shared with presets)
- config/presets/npm: migrate to NpmResponseSchema with passthrough version fields
- datasource/node-version: add NodeReleasesSchema using LooseArray
- datasource/pypi: add PypiJSONSchema (nullable+catch for lenient empty-body handling)
- datasource/go: add VersionInfoSchema for both versionInfo and getLatestVersion calls

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* some manual cleaning up

* removing schema level catch

* removing some more types

* refactor: rename schema

* fix linter errors

* remove schema suffix which hasn't been catched by linter

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 19:14:50 +00:00
Felipe Santos 3afa38511b refactor(datasource/npm): extract defaultRegistryUrl constant (#42794)
* feat(datasource/npm): extract defaultRegistryUrl constant

* Fix some other places

* Remove useless defaultRegistryUrls export

* Fix another place

* Undo rules.spec.ts changes, which are not related

* Fix npm presets

* Restore line removed by mistake

* Fix another test file

* Restore changes to a file which is not relevant

* Fix another small place
2026-04-27 15:24:01 +00:00
Sergei Zharinov 9d857c1f68 refactor(lint): Organize imports with biome (#40966) 2026-02-06 13:40:01 +00:00
Sergei Zharinov 930cf6633c refactor: Rewrite imports with .ts extensions (#40700)
fix: Additional vi.mock path corrections and prettier formatting
2026-01-26 22:48:17 +00:00
Sergei Zharinov 54fb262157 fix: Memory caching for presets fetching (#35585) 2025-04-27 16:15:31 +00:00
Michael Kriese 19c115c813 test: cleanup (#34785) 2025-03-13 17:52:09 +00:00
Sergei Zharinov 9b4e515024 refactor(http): Separate getJson and getJsonUnchecked (#33651) 2025-01-17 14:18:00 +00:00
renovate[bot] eb8c08079e chore(deps): update typescript-eslint monorepo to v8 (major) (#30750)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2024-08-14 10:33:02 +00:00
Rhys Arkins 23eb2dec84 feat(npm)!: remove RENOVATE_CACHE_NPM_MINUTES (#28715) 2024-07-25 15:28:16 +02:00
Sergei Zharinov b69416ce17 refactor(prettier): Force trailing commas (#25631) 2023-11-07 15:50:29 +00:00
Rhys Arkins 36e2b328bb chore: update types reference 2023-08-15 11:31:15 +02:00
RahulGautamSingh 8432e76e8e fix: replace delay with setTimeout (#23123) 2023-07-06 10:20:55 +00:00
Rhys Arkins 634170351d feat(presets): deprecate npm-based presets (#21654) 2023-04-21 06:04:08 +00:00
renovate[bot] db2aef4553 chore(deps): update jest monorepo to v29.4.1 (#20130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2023-02-14 16:00:49 +00:00
Michael Kriese e5c6f38d75 refactor: enable strict checks (#16168)
* refactor:  enable strict checks

* chore: revert changes

* chore: fix tsconfig
2022-06-21 13:00:21 +02:00
Michael Kriese 982cefff2b refactor(config): strict null checks (#15291)
* refactor(config): strict null checks

* chore: fix test
2022-04-24 22:48:54 +00:00
Michael Kriese 64f5bd5f03 test: enforce lint style rules (#15085) 2022-04-12 14:49:49 +00:00
Rhys Arkins c56f5b9e72 fix(npm): allow for missing dist-tags/latest (#14821)
Closes #14814
2022-03-28 10:55:14 +02:00
Rhys Arkins a2b47c822f feat(npm): support custom registryUrls (#14622)
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2022-03-14 09:13:21 +01:00
Rhys Arkins dca3418bbd refactor: lib/modules (#14488)
Moves datasource, manager, platform and versioning code from lib/ into new lib/modules/

BREAKING CHANGE: External tools must update paths to datasource, manager, platform and versioning
2022-03-04 09:04:02 +01:00
Rhys Arkins 68a4415eb4 refactor(config): rename preset packageName/pkgName to repo (#14453) 2022-02-28 17:39:44 +01:00
Rhys Arkins b7eab64efb feat(config): deprecate non-default npm presets (#14444)
Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com>
2022-02-28 15:14:58 +01:00
Rhys Arkins f9ce0e1004 fix(npm): extract packageRules from npmrc (#14433) 2022-02-27 11:36:45 +01:00
Rhys Arkins 5549d23a41 refactor(npm): use hostRules for npmrc auth (#14424) 2022-02-26 15:59:05 +01:00
Jamie Magee 3b7e9a17cb refactor: set importsNotUsedAsValues to error (#14052) 2022-02-07 06:37:17 +00:00
Maksim 06d8c27043 refactor: global config (#12743)
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2021-11-23 21:10:45 +01:00
Sergei Zharinov 5f4b9f9a3a test: Fix test descriptions and enforce it via new linting rule (#11285) 2021-08-18 05:46:56 +00:00
Rhys Arkins 9150854d75 chore: rename config/admin -> config/global 2021-08-17 07:57:45 +02:00
Rhys Arkins bf69924b78 refactor: rename config admin functions to global 2021-08-17 07:57:45 +02:00
Sergei Zharinov 2625858d59 refactor(config): Explicit asserts instead of lonely snapshots (#11174) 2021-08-09 10:21:51 +02:00
Sergei Zharinov 1392955a04 refactor: Identify tests relying on single snapshots (#11150)
Co-authored-by: Jamie Magee <jamie.magee@gmail.com>
2021-08-07 23:43:34 +00:00
Michael Kriese 5546d60e18 test: fix nock usage (#10451) 2021-06-16 09:13:33 +02:00
Sergei Zharinov ce51f05cef feat(test): Detect test utils callers and simplify helpers (#9707) 2021-04-26 16:15:03 +02:00
Rhys Arkins 57015047b2 feat: drop NPM_TOKEN support (#9391)
Removes support for NPM_TOKEN.

BREAKING CHANGE: Do not use NPM_TOKEN in env to configure npm authentication. Configure hostRules instead.
2021-04-22 08:47:58 +02:00
Sergei Zharinov 0375422fff refactor(presets): Extract and de-duplicate error string constants (#9586)
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2021-04-19 13:31:38 +00:00
Sergei Zharinov 72d97ec2f4 refactor(workers): Enforce getName usage (#9525) 2021-04-13 10:25:51 +00:00
Rhys Arkins 9d6e96ef75 refactor: npm preset lookup direct (#9225) 2021-03-20 08:27:33 +00:00
Michael Kriese 74d7691bef refactor: optimize type usage (#8947) 2021-03-02 21:44:55 +01:00
Rhys Arkins 4e1271b702 fix(config): move trustLevel to admin config (#8555) 2021-02-05 12:30:01 +01:00
Rhys Arkins 0aae466cc1 fix(cache): global cache init (#6314) 2020-05-24 10:58:58 +02:00
Rhys Arkins 6104c4637a refactor: global cache (#6198) 2020-05-11 10:38:07 +02:00
Michael Kriese bf3527899c refactor(internal): refactor local presets (#6183) 2020-05-09 09:04:39 +02:00
Rhys Arkins 0c6935f8d0 refactor(presets): use subdirectories 2020-05-09 07:55:00 +02:00