Skip to main content

Lancet netutil CVE-2026-110240

| EUVDEUVD-2026-99024 MEDIUM
Server-Side Request Forgery (SSRF) (CWE-918)
2026-10-13 disclosure@vulncheck.com GHSA-q6h5-5jp8-6c7q
6.3
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify app using lancet SSRF guard
  2. Delivery
    Craft hostname resolving to IPv6 transition/private address
  3. Exploit
    Submit URL bypassing IsInternalIP check
  4. Execution
    Server fetches internal/metadata endpoint
  5. Impact
    Exfiltrate internal data or cloud credentials

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The target application must (a) use lancet netutil.IsInternalIP (vulnerable versions 1.3.1-1.4.6 or 2.1.2-2.3.9) as its SSRF allow/deny decision, and (b) accept attacker-controlled hostnames or URLs and fetch them server-side. Exploitation specifically requires supplying addresses the pre-patch logic misclassifies as external: IPv6 ULA private (fd00::/8), link-local (fe80::/10), RFC 6598 CGNAT (100.64.0.0/10), or transition encodings embedding internal IPv4 - NAT64 (64:ff9b::/96), 6to4 (2002::/16), or Teredo (2001:0::/32). Limiting factors: exploitation is bounded by the consuming app actually relying on this function (a library dependency, not a standalone service), the need for the internal/metadata target to be reachable over the chosen address form, and SSVC Automatable=no, indicating it is not reliably scriptable at scale.

Impact

Signals point to a genuine but moderate-priority issue rather than an emergency. The vendor CVSS 4.0 score is 6.3 (MEDIUM) with AV:N/AC:L/AT:P/PR:N/UI:N, meaning network-reachable and unauthenticated, but the AT:P (Attack Requirements: Present) flag signals that exploitation depends on specific preconditions - namely that the consuming application uses lancet's netutil.IsInternalIP as its SSRF guard and processes attacker-controlled IPv6/transition hostnames. The vulnerable library itself takes no direct impact (VC:N/VI:N/VA:N); the scored harm is to the subsequent/internal system (SC:L/SI:L), which is exactly the SSRF pivot behavior. SSVC corroborates a measured risk profile: Exploitation=poc (proof-of-concept exists, not confirmed in-the-wild), Automatable=no (not suitable for mass/scripted exploitation), Technical Impact=partial. This is NOT in CISA KEV, so there is no evidence of active exploitation. No EPSS score was provided, so exploitation probability cannot be quantified from the input. Net assessment: this is a real defense-in-depth bypass worth patching promptly in any service that relies on lancet for SSRF filtering, but the Automatable=no rating and the library-dependency precondition argue against treating it as a widespread, drive-by-exploitable CVE.

Exploit ScenarioDerived

A web application uses lancet's netutil.IsInternalIP to block SSRF by rejecting user-supplied URLs that resolve to internal addresses. An attacker submits a hostname resolving to an IPv6 transition address such as a NAT64 (64:ff9b::a9fe:a9fe) or 6to4/Teredo form embedding an internal IPv4, which the flawed check misclassifies as external and allows. The server then connects to the internal target - for example 169.254.169.254 cloud metadata - returning credentials or internal data. Proof-of-concept exploit code exists (per SSVC poc rating and the VulnCheck advisory).

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 14, 2026

SSRF protection bypass in the Lancet Go library's netutil.IsInternalIP allows applications that use this helper as their allow/deny filter to fetch internal services and cloud metadata endpoints via IPv6 and transition address forms the function misclassifies as external. Affected releases are Lancet 1.3.1 through 1.4.6 and 2.1.2 through 2.3.9; the function must be consumed by a server-side fetch path that accepts attacker-controlled hostnames, which is why the issue is assessed as moderate priority rather than emergency (CVSS 3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N, CVSS 4.0 base 6.3). Publicly available exploit code exists (SSVC Exploitation: poc) and an unauthenticated, remote attacker providing hostnames that resolve to fd00::/8, fe80::/10, 100.64.0.0/10, or NAT64/6to4/Teredo encodings of internal IPv4 can reach otherwise unreachable targets; exploitation is not reliably automatable at scale (SSVC Automatable: no) and no confirmed active exploitation (CISA KEV) has been reported.

RemediationAI

Upstream fix available (commit 835111c832939a85416d686a1e99d5fe7060c9b4 and PR #357, tracked in issue #356); released patched version not independently confirmed, so the safest action is to update to the first Lancet release that contains this commit or, until that tag is published, pin the fixed commit explicitly or replace netutil.IsInternalIP with your own hardened check. Source references: https://github.com/duke-git/lancet/commit/835111c832939a85416d686a1e99d5fe7060c9b4, https://github.com/duke-git/lancet/pull/357, https://github.com/duke-git/lancet/issues/356, https://www.vulncheck.com/advisories/lancet-through-2.3.9-ssrf-protection-bypass-via-netutil-isinternalip. Where upgrading is not immediately possible, replace the library call with a deny-list that rejects fd00::/8, fe80::/10, ::ffff:0:0/96 IPv4-mapped addresses, 100.64.0.0/10 CGNAT, and the transition prefixes 64:ff9b::/96 (NAT64), 2002::/16 (6to4) and 2001:0::/32 (Teredo) after extracting any embedded IPv4 and re-testing it; the trade-off is that a strict deny-list will also block legitimate IPv6 or carrier-grade-NAT destinations, so pair it with an explicit outbound allow-list. Additional layered controls: resolve the hostname first and validate every returned address immediately before connecting (defeats DNS rebinding and TOCTOU gaps), force IMDSv2 or otherwise disable instance metadata access and explicitly block 169.254.169.254 and fd00:ec2::254 at the network layer (this may break cloud SDK features that legitimately use metadata), and restrict egress from the fetching service to only the required external hosts, accepting the added maintenance and potential breakage of unlisted integrations.

Affected VersionsENISA

lancet 1.3.1 ≤1.4.6
lancet 2.1.2 ≤2.3.9

Affected Packages

euvd lancet no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Lancet is a general-purpose Go utility library, and its netutil package exposes IsInternalIP/IsPublicIP as a convenience check that developers commonly wire into SSRF guards before making outbound HTTP requests. The pre-patch implementation (netutil/net.go lines 158-170 in v1.4.6 and 192-205 in v2.3.9) only tested IP.IsLoopback() plus a hand-rolled IPv4 deny-list covering 10/8, 172.16/12, 169.254/16 and 192.168/16, leaving a large blind spot mapped to CWE-918 (Server-Side Request Forgery). It never consulted Go's net.IP.IsPrivate()/IsLinkLocalUnicast(), so IPv6 unique-local (fd00::/8), IPv6 link-local (fe80::/10) and IPv4-mapped-IPv6 (::ffff:a.b.c.d) addresses passed as 'external'; it also omitted RFC 6598 carrier-grade NAT space (100.64.0.0/10, including the AWS metadata equivalent of 169.254.169.254) and IPv4-in-IPv6 transition encodings - NAT64 64:ff9b::/96, 6to4 2002::/16, and Teredo 2001:0::/32 which XORs the embedded IPv4 with 0xff. The upstream fix (commit 835111c832939a85416d686a1e99d5fe7060c9b4, PR #357, issue #356) extends the check to IsPrivate/IsLinkLocalUnicast, adds the RFC 6598 range via the 100.64/10 bitmask test, and introduces a helper that extracts and re-tests the embedded IPv4 for each transition prefix, with regression tests covering fd12:3456:789a::1, fe80::1, 100.64.0.1/100.127.255.255, ::ffff:192.168.0.1, 64:ff9b::a9fe:a9fe, 2002:7f00:1::1 and 2001::80ff:fffe while correctly leaving 100.63.255.255, 100.128.0.1, 64:ff9b::808:808, 2002:808:808::1 and 2001:db8::1 as public.

Know when Golang gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (vulncheck) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Network-reachable and unauthenticated, but AC:H because it depends on the app using this guard and crafting valid transition addresses; S:C with C:L/I:L reflects the SSRF pivot to internal systems, A:N as no availability impact.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

DescriptionCVE.org

Lancet through 2.3.9 contains an SSRF protection bypass vulnerability in netutil.IsInternalIP that misclassifies IPv6 private, link-local, CGNAT and transition addresses as external. Attackers can supply hostnames resolving to these address forms, including NAT64, 6to4 or Teredo embedding internal IPv4, to reach internal services or cloud metadata endpoints.

Threat Intelligence Overview

EPSS Score
0.3%
Top 76% exploitable
Prevalence
Medium
popular Go utility library, but SSRF-guard usage of this function is narrower
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

More in Golang

View all
CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2023-48795 MEDIUM POC
5.9 Dec 18

The SSH transport protocol with certain OpenSSH extensions, found in OpenSSH before 9.6 and other products, allows remot

CVE-2016-5386 HIGH
8.1 Jul 19

The net/http package in Go through 1.6 does not attempt to address RFC 3875 section 4.1.18 namespace conflicts and there

CVE-2026-24897 CRITICAL POC
10.0 Jan 28

Erugo file-sharing platform up to version 0.2.14 has a CVSS 10.0 path traversal allowing authenticated users to read any

CVE-2025-68121 CRITICAL POC
10.0 Feb 05

Critical certificate validation bypass in Go crypto/tls during session resumption. If ClientCAs or RootCAs fields are mu

CVE-2022-50926 CRITICAL POC
9.8 Jan 13

WAGO PFC200 G2 PLC (firmware affected) allows privilege escalation through cookie manipulation. Users can modify cookie

CVE-2026-28408 CRITICAL POC
9.8 Feb 27

Authentication bypass in WeGIA charitable institution management system before 3.6.5. The adicionar_tipo_docs_atendido.p

CVE-2026-24895 CRITICAL POC
9.8 Feb 12

CGI path splitting vulnerability in FrankenPHP before 1.11.2 — Unicode characters bypass path validation during CGI proc

CVE-2019-14809 CRITICAL POC
9.8 Aug 13

net/url in Go before 1.11.13 and 1.12.x before 1.12.8 mishandles malformed hosts in URLs, leading to an authorization by

CVE-2025-66719 CRITICAL POC
9.1 Jan 23

Free5gc NRF 1.4.0 has an authorization bypass in access token generation that allows authenticated users to request toke

CVE-2022-50909 HIGH POC
8.8 Jan 13

Algo 8028 Control Panel version 3.3.3 contains a command injection vulnerability in the fm-data.lua endpoint that allows

CVE-2026-82410 HIGH POC
8.7 Sep 16

Denial of service in PocketBase versions prior to 0.22.48 (0.22.x branch) and 0.23.0 through 0.39.6 (0.23.0+ branch) all

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy