🛡️ CVE-2026-42040 — axios

🟢 CVSS 2.0 — Low ⚠️ Exploit Public CWE-116 OSV
2.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams

# Vulnerability Disclosure: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams

Summary

The encode() function in lib/helpers/AxiosURLSearchParams.js contains a character mapping (charMap) at line 21 that reverses the safe percent-encoding of null bytes. After encodeURIComponent('\x00') correctly produces the safe sequence %00, the charMap entry '%00': '\x00' converts it back to a raw null byte.

This is a clear encoding defect: every other charMap entry encodes in the safe direction (literal → percent-encoded), while this single entry decodes in the opposite (dangerous) direction.

Severity: Low (CVSS 3.7)

Affected Versions: All versions containing this charMap entry

Vulnerable Component: lib/helpers/AxiosURLSearchParams.js:21

CWE

  • CWE-626: Null Byte Interaction Error (Poison Null Byte)
  • CWE-116: Improper Encoding or Escaping of Output

CVSS 3.1

Score: 3.7 (Low)

Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N

| Metric | Value | Justification |

|---|---|---|

| Attack Vector | Network | Attacker controls input parameters remotely |

| Attack Complexity | High | Standard axios request flow (buildURL) uses its own encode function which does NOT have this bug. Only triggered via direct AxiosURLSearchParams.toString() without an encoder, or via custom paramsSerializer delegation |

| Privileges Required | None | No authentication needed |

| User Interaction | None | No user interaction required |

| Scope | Unchanged | Impact limited to HTTP request URL |

| Confidentiality | None | No confidentiality impact |

| Integrity | Low | Null byte in URL can cause truncation in C-based backends, but requires a vulnerable downstream parser |

| Availability | None | No availability impact |

Vulnerable Code

File: lib/helpers/AxiosURLSearchParams.js, lines 13-26

```javascript

function encode(str) {

const charMap = {

'!': '%21', // literal → encoded (SAFE direction)

"'": '%27', // literal → encoded (SAFE direction)

'(': '%28', // literal → encoded (SAFE direction)

')': '%29', // literal → encoded (SAFE direction)

'~': '%7E', // literal → encoded (SAFE direction)

'%20': '+', // standard transformation (SAFE)

'%00': '\x00', // LINE 21: encoded → raw null byte (UNSAFE direction!)

};

return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {

return charMap[match];

});

}

```

Why the Standard Flow Is NOT Affected

```javascript

// buildURL.js:36 — uses its OWN encode function (lines 14-20), not AxiosURLSearchParams's

const _encode = (options && options.encode) || encode; // buildURL's encode

// buildURL.js:53 — passes buildURL's encode to AxiosURLSearchParams

new AxiosURLSearchParams(params, _options).toString(_encode); // external encoder used

// AxiosURLSearchParams.js:48 — when encoder is provided, internal encode is NOT used

const _encode = encoder ? function(value) { return encoder.call(this, value, encode); } : encode;

// ^^^^^^

// internal encode passed as 2nd arg but only used if

// the external encoder explicitly delegates to it

```

Proof of Concept

```javascript

import AxiosURLSearchParams from './lib/helpers/AxiosURLSearchParams.js';

import buildURL from './lib/helpers/buildURL.js';

// Test 1: Direct AxiosURLSearchParams (VULNERABLE path)

const params = new AxiosURLSearchParams({ file: 'test\x00.txt' });

const result = params.toString(); // NO encoder → uses internal encode with charMap

console.log('Direct toString():', JSON.stringify(result));

// Output: "file=test\u0000.txt" (contains raw null byte)

console.log('Hex:', Buffer.from(result).toString('hex'));

// Output: 66696c653d74657374002e747874 (00 = null byte)

// Test 2: Via buildURL (NOT vulnerable — standard axios flow)

const url = buildURL('http://example.com/api', { file: 'test\x00.txt' });

console.log('Via buildURL:', url);

// Output: http://example.com/api?file=test%00.txt (%00 preserved safely)

```

Verified PoC Output

```

Direct toString(): "file=test\u0000.txt"

Contains raw null byte: true

Hex: 66696c653d74657374002e747874

Via buildURL: http://example.com/api?file=test%00.txt

Contains raw null byte: false

Contains safe %00: true

```

Impact Analysis

Primary impact is limited because the standard axios request flow is not affected. However:

  • Direct API users: Applications using AxiosURLSearchParams directly for custom serialization are affected
  • Custom paramsSerializer: A paramsSerializer.encode that delegates to the internal encoder triggers the bug
  • Code defect signal: The directional inconsistency in charMap is a clear coding error with no legitimate use case

If null bytes reach a downstrea

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is high, an attacker needs no privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality none, integrity low, availability none.

Weakness class

CVE-2026-42040 is classified as CWE-116: Improper Encoding or Escaping of Output. Output is emitted without encoding it for the context it lands in, so data is interpreted as markup or code.

Affected software

CVE-2026-42040 is recorded against 1 package.

  • axios

Timeline and source

Published on 5 May 2026 and last revised on 17 June 2026. A public exploit is known to exist, which raises the urgency of patching considerably. Record sourced from OSV.

References

github.com (Web)
nvd.nist.gov (Advisory)
github.com (Package)

CVE-2026-42040 on other distributions

Each distribution ships its own build and its own fixed version. Pick the one you run:

Details

Severity LOW
CVSS Score 2.0
CVSS Vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
CWE CWE-116
Public Exploit ⚠️ Yes
Source OSV
Published 2026-05-05
Updated 2026-08-12
Modified 2026-06-17
Fix URL N/A

Affected Packages

Software From version Fixed in
axios

Exploit Protection

Are you running axios?

CVE-2026-42040 carries CVSS 2.0 Low rating and a public exploit already exists. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-42040 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.