Repository navigation
chore(deps): bump axios, express, cors, dotenv, mime-types - #5
Conversation
Resolves 9 of the project's 18 npm-audit findings, including axios's long list of fixed advisories (SSRF via NO_PROXY bypass, prototype- pollution-based header/config injection, ReDoS) and express's transitive path-to-regexp ReDoS (via router's updated dependency). - axios 1.11.0 -> 1.20.0 - express 5.1.0 -> 5.2.1 - cors 2.8.5 -> 2.8.6 - dotenv 17.2.1 -> 17.4.2 - mime-types ^3.0.1 -> ^3.0.2 - package-lock.json refreshed accordingly (also picks up the non-breaking minimatch/picomatch/path-to-regexp fixes already available within existing semver ranges) Remaining 9 vulnerabilities (2 critical, 3 high, 4 moderate) all trace back to a single unfixable chain: node-chartist@1.0.5 (latest available) depends on jsdom@^9.0.0 (2016-era), which bundles the deprecated `request` package and its old form-data/qs/tough-cookie/ uuid. `npm audit fix --force` "fixes" this by downgrading to node-chartist@0.2.9, which is not a real fix — it depends on an even older jsdom@^7.2.2 that still bundles `request`. There is no non-vulnerable node-chartist release to move to. Practical exploitability here is low: this app never passes attacker-controlled URLs through jsdom/request (createChart.ts only feeds it a static local HTML string), so the request-package SSRF and friends aren't reachable through this app's usage. Eliminating this chain for real requires replacing node-chartist with an actively maintained charting approach — tracked as follow-up work, out of scope for this dependency-bump PR. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR updates several npm dependencies to remediate a subset of existing npm audit findings, primarily by bumping axios and Express-related packages, and refreshing the lockfile to pick up non-breaking transitive fixes.
Changes:
- Bump direct runtime dependencies:
axios→ 1.20.0,express→ 5.2.1, pluscors,dotenv,mime-types. - Refresh
package-lock.jsonto align with the new direct versions and pick up updated transitive packages.
Reviewed changes
Copilot reviewed 1 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| package.json | Updates direct dependency versions for axios/express and related runtime packages. |
| package-lock.json | Regenerates the resolved dependency tree and integrity metadata to match updated deps. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Heads up: the bumped `dotenv` (17.4.2) prints a console line on every startup like: I double-checked this isn't a supply-chain compromise — it's genuine code in dotenv's own If it bugs you, dotenv supports quieting it (e.g. |
Summary
Resolves 9 of 18
npm auditfindings from the earlier security review, without any breaking-change downgrades.axios1.11.0 → 1.20.0 — clears its whole list of fixed advisories (SSRF via NO_PROXY bypass, prototype-pollution-based header/config injection, ReDoS, etc.)express5.1.0 → 5.2.1 — pulls in an updatedrouter/path-to-regexp(fixes the ReDoS inpath-to-regexp8.0.0–8.3.0)cors2.8.5 → 2.8.6,dotenv17.2.1 → 17.4.2,mime-types^3.0.1 → ^3.0.2 — trivial patch/minor bumpspackage-lock.jsonrefresh also picked up already-available non-breaking fixes forminimatch/picomatch(dev-tooling ReDoS, not shipped to runtime)What's left (and why it's not in this PR)
9 vulnerabilities remain (2 critical, 3 high, 4 moderate), all rooted in one chain:
node-chartist@1.0.5(the latest release that exists) depends onjsdom@^9.0.0(2016-era), which bundles the long-deprecatedrequestpackage and its oldform-data/qs/tough-cookie/uuid.npm audit fix --forceoffers to "fix" this by downgrading tonode-chartist@0.2.9— I checked, and that's not a real fix: 0.2.9 depends on an even olderjsdom@^7.2.2that also bundlesrequest. There's no non-vulnerablenode-chartistversion to move to.Practical exploitability is low today: this app never passes attacker-controlled URLs through jsdom/
request—src/createChart.tsonly ever feeds it a static local HTML string for chart rendering, sorequest's SSRF and friends aren't reachable through anything this service does. Actually eliminating the chain means replacingnode-chartistwith an actively maintained charting approach, which is a bigger effort — tracking as follow-up, not bundling into this dependency-bump PR.Test plan
npx tsc --noEmit— cleannpx jest— all pass except the same pre-existing network-dependent test that needs a real GitHubTOKEN(fails identically ondeploywithout this change)npm run buildsucceeds; smoke-tested the built server (GET /,GET /graphwithout aTOKENreturns the graceful error SVG) against the bumpedexpress/axiosdeploy— only the expected transitive shifts (e.g. axios pulling inagent-base/https-proxy-agentfor proxy support), nothing unexpected🤖 Generated with Claude Code