Skip to content

chore(deps): update dependency axios-cache-interceptor to v1.11.1 [security]#117

Open
renovate[bot] wants to merge 1 commit intomainfrom
renovate/npm-axios-cache-interceptor-vulnerability
Open

chore(deps): update dependency axios-cache-interceptor to v1.11.1 [security]#117
renovate[bot] wants to merge 1 commit intomainfrom
renovate/npm-axios-cache-interceptor-vulnerability

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Dec 30, 2025

This PR contains the following updates:

Package Change Age Confidence
axios-cache-interceptor (source) 1.8.31.11.1 age confidence

GitHub Vulnerability Alerts

CVE-2025-69202

Summary

When a server calls an upstream service using different auth tokens, axios-cache-interceptor returns incorrect cached responses, leading to authorization bypass.

Details

The cache key is generated only from the URL, ignoring request headers like Authorization. When the server responds with Vary: Authorization (indicating the response varies by auth token), the library ignores this, causing all requests to share the same cache regardless of authorization.

Impact

Affected: Server-side applications (APIs, proxies, backend services) that:

  • Use axios-cache-interceptor to cache requests to upstream services
  • Handle requests from multiple users with different auth tokens
  • Upstream services replies on Vary to differentiate caches

Not affected: Browser/client-side applications (single user per browser session).

Services using different auth tokens to call upstream services will return incorrect cached data, bypassing authorization checks and leaking user data across different authenticated sessions.

Solution

After v1.11.1, automatic Vary header support is now enabled by default.

When server responds with Vary: Authorization, cache keys now include the authorization header value. Each user gets their own cache.

// v1.11.1+ (automatic, no config needed)
// User 123: key = hash(url + {authorization: 'Bearer 123'})
// User 456: key = hash(url + {authorization: 'Bearer 456'})
// ✓ Different caches, no poisoning

Remediation

Upgrade to v1.11.1 or later. No code changes required, protection is automatic

Proof of Concept

const http = require('node:http');
const axios = require('axios');
const { setupCache } = require('axios-cache-interceptor');

// Server that returns different responses based on Authorization
const server = http.createServer((req, res) => {
  const auth = req.headers.authorization;

  res.setHeader('Vary', 'Authorization');

  if (auth === 'Bearer 123') {
    res.write('Hello, user 123!');
  } else if (auth === 'Bearer 456') {
    res.write('Hello, user 456!');
  } else {
    res.write('Unknown');
  }

  res.end();
});

server.listen(5000);

// Client making requests with different tokens
const cachedAxios = setupCache(axios.create());

const server2 = http.createServer(async (_req, res) => {
  const authHeader =
    Math.random() < 0.5 ? 'Bearer 123' : 'Bearer 456';

  const response = await cachedAxios.get('http://localhost:5000', {
    headers: { Authorization: authHeader }
  });

  console.log({
    response: response.data,
    cached: response.cached,
    auth: authHeader
  });
  res.write(response.data);
  res.end();
});

server2.listen(5001);

// Trigger 10 requests
Promise.all(
  Array.from({ length: 10 }, () =>
    axios.get('http://localhost:5001').catch(console.error)
  )
).finally(() => {
  server.close();
  server2.close();
});

All 10 responses return "Hello, user 123!" even when using "Bearer 456" - users receive each other's cached data.


Release Notes

arthurfiorette/axios-cache-interceptor (axios-cache-interceptor)

v1.11.1

Compare Source

Merged
  • Foolproof request headers casing #1157
Commits

v1.11.0

Compare Source

Merged
Commits

v1.10.0

Compare Source

Merged

v1.9.1

Compare Source

Merged
Commits

v1.9.0

Compare Source

Merged
Commits

Configuration

📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch 2 times, most recently from 7a6ea17 to e370e7f Compare January 6, 2026 16:34
@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch 4 times, most recently from 3ab0677 to f3f4222 Compare January 23, 2026 13:48
@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch 2 times, most recently from 8bdfb89 to 01f469e Compare January 28, 2026 17:43
@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch 4 times, most recently from 099f4c2 to c791670 Compare February 11, 2026 21:15
@arbrandes arbrandes force-pushed the main branch 2 times, most recently from 9abebe1 to 3936fbc Compare February 11, 2026 21:31
@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch from c791670 to 254ec91 Compare February 11, 2026 21:34
@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch from 254ec91 to f6cb9da Compare February 11, 2026 22:33
@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch 2 times, most recently from 2b69e7a to e1559d9 Compare February 12, 2026 18:49
@renovate renovate bot force-pushed the renovate/npm-axios-cache-interceptor-vulnerability branch from e1559d9 to d64ad95 Compare February 13, 2026 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

Comments