Description
TLDR: On some libc implementations (e.g. glibc) the socket.inet_aton
function parses IP strings trailed with whitespace and garbage, and this function is used by requests utility functions which if used externally, may cause bugs or/and security vulnerabilities.
An example of the issue can be seen below:
I have written a more detailed description of the socket.inet_aton
's underlying problem on Python's bugtracker issue 37495. It is yet to be decided if this is going to be fixed in Python.
Expected Result
The requests.utils
functions address_in_network
, is_ipv4_address
and is_valid_cidr
should fail with invalid input.
Actual Result
Incorrect IP strings do not return an error and instead return as if the trailing garbage did not exist in the IP string.
Reproduction Steps
import requests
print(requests.utils.address_in_network('1.1.1.1 wtf', '1.1.1.1/24'))
print(requests.utils.is_ipv4_address('1.1.1.1 disconnect3d was here...'))
print(requests.utils.is_valid_cidr('1.1.1.1 obviously not but yes/24'))
System Information
The issue is related to libc implementation and has been tested on glibc 2.27 and 2.29.
It also occurs on MacOS which I am not sure if it is based on glibc.