CVE-2026-45190
Medium · 6.5CVSS
6.5
EPSS
0.5%
Published
May 10, 2026
CISA due date
—
Cloudanix analysis
A software library used to check whether an IP address is allowed can be tricked by oddly formatted addresses, potentially letting someone bypass location-based access rules.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Net::CIDR::Lite for Perl before version 0.24 improperly validates IP address and CIDR mask strings before parsing them. Inputs with trailing newlines or non-ASCII digit characters can pass validation but be interpreted as a different address or network when parsed. Code that relies on Net::CIDR::Lite find() or bin_find() for allowlist, denylist, routing, tenancy, proxy, or access-control decisions may therefore make incorrect match decisions, allowing an IP address that should be blocked or blocking/missing an address that should be recognized.
Why it matters to the business
Applications that use vulnerable Net::CIDR::Lite versions for IP-based access control may make incorrect authorization decisions. The most important consequence is potential bypass of network-based ACLs, such as administrative interface restrictions, API allowlists, fraud controls, tenant isolation checks, or internal-only protections. Availability and integrity impacts are possible where malformed CIDR entries cause legitimate traffic to be denied or security filtering to behave unpredictably. The vulnerability is not currently in CISA KEV, has low EPSS, and has no known public exploit maturity in the provided data, so remediation should be prioritized based on whether the library is used in security-sensitive IP matching paths.
How an attack unfolds
An attacker first identifies an application or service that uses Net::CIDR::Lite before 0.24 to evaluate IP address or CIDR membership. The attacker then supplies, influences, or benefits from malformed IP/CIDR input that contains parser-confusing characters, such as a trailing newline or non-ASCII digits. Because validation and parsing disagree, the value accepted by the application may be normalized or re-encoded into a different address than the original string represented. When the application calls find() or bin_find(), the malformed value may incorrectly match an allowed range or fail to match a blocked range. If the affected check protects a restricted function, the attacker can reach functionality, routes, or data that should have been denied by the IP ACL.
How to fix it
Upgrade Net::CIDR::Lite to version 0.24 or later wherever it is used. If package-specific fixed versions are not centrally enumerated, inventory Perl dependencies through CPAN metadata, cpanfile, Carton, local::lib, vendor bundles, container images, and OS packaging to identify versions before 0.24. After upgrading, rebuild and redeploy applications or images that vendor the module. As defense in depth, canonicalize and strictly validate IP addresses before passing them to ACL logic: reject embedded control characters, trailing whitespace, non-ASCII digits, Unicode-normalized alternatives, and any value that does not round-trip through a trusted IP parser. Avoid using untrusted headers such as X-Forwarded-For for access control unless they are set and sanitized by a trusted reverse proxy. Where immediate upgrade is not possible, add pre-validation that accepts only expected ASCII IPv4/IPv6 and CIDR syntax and explicitly rejects newline characters and non-ASCII input.
How to confirm the fix worked
Confirm the deployed Net::CIDR::Lite version is 0.24 or later in every runtime and packaged artifact, not only in source repositories. For Perl environments, check installed module versions with commands such as `perl -MNet::CIDR::Lite -e 'print $Net::CIDR::Lite::VERSION, "\n"'` in the same runtime context used by the application. Review dependency lockfiles and container/SBOM outputs for Net::CIDR::Lite versions below 0.24. Add regression tests covering malformed inputs, including CIDR strings with trailing newline characters and IP strings containing non-ASCII digits, and assert that they are rejected or do not produce incorrect find()/bin_find() results. Validate that access-control behavior still works for legitimate IPv4, IPv6, and CIDR entries after the upgrade or mitigation.
Typical attack path
- Identify a Perl application, proxy component, API gateway, administrative tool, or access-control layer that depends on Net::CIDR::Lite for IP/CIDR matching.
- Determine whether user-controlled, header-derived, configuration-derived, or upstream-supplied IP/CIDR values are passed into Net::CIDR::Lite validation and matching routines.
- Craft IP or CIDR strings containing ambiguous characters, especially trailing newline characters or non-ASCII digit characters.
- Submit the crafted value through the exposed input path or cause it to be stored in an ACL configuration source consumed by the application.
- Trigger the authorization or filtering decision that calls find() or bin_find().
- Use the incorrect match or miss result to bypass an IP allowlist, evade an IP blocklist, or cause unintended denial of legitimate traffic.
How to detect it
Detection should focus on evidence that malformed IP or CIDR strings reached access-control code paths before patching. Review application logs, reverse proxy logs, API gateway logs, WAF logs, and authentication/authorization decision logs for IP, CIDR, allowlist, denylist, or ACL fields containing embedded newlines, percent-encoded line breaks, carriage returns, Unicode or non-ASCII digits, unusual whitespace, or strings that differ before and after normalization. Pay particular attention to denied-then-allowed transitions, successful access to IP-restricted administrative or internal endpoints, and requests where the apparent client IP is supplied through forwarding headers rather than the network peer address. If ACL configurations are user-managed or API-driven, audit configuration change history for CIDR entries containing control characters or Unicode characters. Source-code and dependency telemetry can identify exposure but not exploitation; exploitation evidence is most likely to appear as anomalous request parameters, headers, ACL update payloads, or application errors involving IP parsing and matching.
- Net::CIDR::Lite version < 0.24
- Net::CIDR::Lite->new
- ->add("::1\n/128")
- ->find("::1a")
- ->bin_find(
- %0a/
- %0A/
- %0d%0a
- \n/128
- \r/128
- X-Forwarded-For: .*%0a
- X-Real-IP: .*%0a
- Forwarded: .*%0a
- client_ip=.*%0a
- cidr=.*%0a
- allowlist=.*%0a
- denylist=.*%0a
What your security team should do
- Prioritize systems where Net::CIDR::Lite is used for authorization, allowlists, denylist enforcement, administrative interface protection, API access restrictions, fraud controls, or tenant/network isolation.
- Upgrade all uses of Net::CIDR::Lite to version 0.24 or later and redeploy any applications, containers, or packaged appliances that vendor older copies.
- Search source code for Net::CIDR::Lite usage, especially calls to add(), find(), and bin_find(), and determine whether any input can be attacker-controlled or header-derived.
- Add input hardening before IP ACL evaluation: reject control characters, trailing whitespace, Unicode digits, and non-canonical IP/CIDR strings.
- Add automated tests for parser-confusion cases such as trailing newlines in CIDR values and non-ASCII digits in IP addresses.
- Review logs and historical requests for malformed IP/CIDR values if the affected code protected sensitive routes or administrative functions.
- Treat exploitation likelihood as currently low based on the provided EPSS and lack of KEV status, but raise priority for internet-facing or security-control use cases.
The record
Net::CIDR::Lite versions before 0.24 for Perl does not properly validate IP address and CIDR mask inputs, which may allow IP ACL bypass. Inputs containing a trailing newline or non-ASCII digit characters pass the validators but are then re-encoded by the parser to a different address than the input string spelled. find() and bin_find() can match or miss addresses as a result. Example: my $cidr = Net::CIDR::Lite->new(); $cidr->add("::1\n/128"); $cidr->find("::1a"); # incorrectly returns true See also CVE-2026-45191.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| openSUSE:Tumbleweed | perl-Net-CIDR-Lite | 0 | 0.240.0-1.1 |
Related vulnerabilities
- CVE-2026-45191 Net::CIDR::Lite versions before 0.24 for Perl does not properly consider extraneous zero… Also affects perl-Net-CIDR-Lite
- CVE-2026-40199 Net::CIDR::Lite versions before 0.23 for Perl mishandles IPv4 mapped IPv6 addresses… Also affects perl-Net-CIDR-Lite
- CVE-2026-40198 Net::CIDR::Lite versions before 0.23 for Perl does not validate IPv6 group count, which… Also affects perl-Net-CIDR-Lite
- CVE-2026-106445 Handlebars provides the power necessary to let users build semantic templates. CWE-1289
- CVE-2026-89049 A server-side request forgery issue due to improper validation of equivalent address… CWE-1289
- CVE-2026-76977 SAP UI5 does not sufficiently validate the parent frame's origin against the configured… CWE-1289
- CVE-2026-74994 The mod_auth module in OTP's inets httpd server, when configured with dets or mnesia… CWE-1289
- CVE-2026-19953 URI versions before 5.36 for Perl encode non-NFC host names to non-standard punycode… CWE-1289