<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sun, 04 Oct 2026 03:38:09 +0000</lastBuildDate>
    <item>
      <title>GHSA-pf86-5x62-jrwf — Axios: Prototype Pollution Gadgets - Response Tampering, Data Exfiltration, and Request Hijacking</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-pf86-5x62-jrwf</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: axios&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;When `Object.prototype` has been polluted by any co-dependency with keys that axios reads without a `hasOwnProperty` guard, an attacker can (a) silently intercept and modify every JSON response before the application sees it, or (b) fully hijack the underlying HTTP transport, gaining access to request credentials, headers, and body. The precondition is prototype pollution from a separate source in the same process -- lodash &amp;lt; 4.17.21, or any of several other common npm packages with known PP vectors. The two gadgets confirmed here work independently.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Background: how mergeConfig builds the config object&lt;/p&gt;
&lt;p&gt;Every axios request goes through `Axios._request` in [`lib/core/Axios.js#L76`](https://github.com/axios/axios/blob/v1.13.6/lib/core/Axios.js#L76):&lt;/p&gt;
&lt;p&gt;```js
config = mergeConfig(this.defaults, config);
```&lt;/p&gt;
&lt;p&gt;Inside `mergeConfig`, the merged config is built as a plain `{}` object ([`lib/core/mergeConfig.js#L20`](https://github.com/axios/axios/blob/v1.13.6/lib/core/mergeConfig.js#L20)):&lt;/p&gt;
&lt;p&gt;```js
const config = {};
```&lt;/p&gt;
&lt;p&gt;A plain `{}` inherits from `Object.prototype`. `mergeConfig` only iterates `Object.keys({ ...config1, ...config2 })` ([line 99](https://github.com/axios/axios/blob/v1.13.6/lib/core/mergeConfig.js#L99)), which is a spread of own properties. Any key that is absent from both `this.defaults` and the per-request config will never be set as an own property on the merged config. Reading that key later on the merged config falls through to `Object.prototyp…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: axios&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;When `Object.prototype` has been polluted by any co-dependency with keys that axios reads without a `hasOwnProperty` guard, an attacker can (a) silently intercept and modify every JSON response before the application sees it, or (b) fully hijack the underlying HTTP transport, gaining access to request credentials, headers, and body. The precondition is prototype pollution from a separate source in the same process -- lodash &amp;lt; 4.17.21, or any of several other common npm packages with known PP vectors. The two gadgets confirmed here work independently.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Background: how mergeConfig builds the config object&lt;/p&gt;
&lt;p&gt;Every axios request goes through `Axios._request` in [`lib/core/Axios.js#L76`](https://github.com/axios/axios/blob/v1.13.6/lib/core/Axios.js#L76):&lt;/p&gt;
&lt;p&gt;```js
config = mergeConfig(this.defaults, config);
```&lt;/p&gt;
&lt;p&gt;Inside `mergeConfig`, the merged config is built as a plain `{}` object ([`lib/core/mergeConfig.js#L20`](https://github.com/axios/axios/blob/v1.13.6/lib/core/mergeConfig.js#L20)):&lt;/p&gt;
&lt;p&gt;```js
const config = {};
```&lt;/p&gt;
&lt;p&gt;A plain `{}` inherits from `Object.prototype`. `mergeConfig` only iterates `Object.keys({ ...config1, ...config2 })` ([line 99](https://github.com/axios/axios/blob/v1.13.6/lib/core/mergeConfig.js#L99)), which is a spread of own properties. Any key that is absent from both `this.defaults` and the per-request config will never be set as an own property on the merged config. Reading that key later on the merged config falls through to `Object.prototyp…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-pf86-5x62-jrwf</guid>
    </item>
  </channel>
</rss>
