CVE-2026-50887 Overview
CVE-2026-50887 is a Server-Side Request Forgery (SSRF) vulnerability [CWE-918] in the automatic short URL title resolution component of Shlink v5.0.1. Shlink is a self-hosted URL shortener that automatically fetches metadata from target URLs to populate the title field of shortened links. Attackers can supply a crafted longUrl value that forces the Shlink backend to issue HTTP requests against internal network resources. This enables reconnaissance of internal services, cloud metadata endpoints, and other resources reachable from the host running Shlink.
Critical Impact
Unauthenticated remote attackers can pivot through the Shlink server to scan internal networks and access otherwise unreachable internal HTTP services.
Affected Products
- Shlink v5.0.1
- Self-hosted Shlink deployments with automatic title resolution enabled
- Shlink REST API endpoints accepting longUrl parameters
Discovery Timeline
- 2026-06-15 - CVE-2026-50887 published to NVD
- 2026-06-17 - Last updated in NVD database
Technical Details for CVE-2026-50887
Vulnerability Analysis
Shlink includes a feature that automatically resolves the HTML <title> element of a destination URL when a new short link is created. The title resolver issues an outbound HTTP request to the value supplied in the longUrl parameter without validating the destination address. Because the request originates from the Shlink server, it inherits the server's network position and can reach internal hosts, loopback interfaces, and cloud provider metadata services.
The vulnerability falls under the Server-Side Request Forgery class [CWE-918]. An attacker submits a short URL creation request through the public API or web interface using a crafted target such as http://127.0.0.1:8080/admin or http://169.254.169.254/latest/meta-data/. The Shlink backend fetches the URL and may return content, response codes, or timing data that reveal the presence of internal services.
A proof-of-concept script demonstrating the issue is published on GitHub. See the GitHub Gist PoC Script for technical details.
Root Cause
The root cause is missing destination validation in the title resolution component. The component accepts arbitrary user-supplied URLs and dispatches HTTP requests without enforcing an allowlist of public destinations, blocking private IPv4 ranges (RFC 1918), loopback addresses, link-local ranges, or cloud metadata IPs.
Attack Vector
The attack vector is network-based and requires no authentication or user interaction. An attacker sends an API request to create a short URL with longUrl pointing to an internal target. The Shlink server performs the outbound HTTP fetch and exposes response information through API output, timing differences, or error messages. Attackers can enumerate internal hosts, fingerprint services, and in cloud deployments attempt to read instance metadata credentials.
No verified exploitation code is reproduced here. Refer to the GitHub Gist PoC Script for the published proof of concept.
Detection Methods for CVE-2026-50887
Indicators of Compromise
- Outbound HTTP requests from the Shlink host to RFC 1918 private addresses, 127.0.0.0/8, or 169.254.169.254
- Short URL creation API calls (POST /rest/v3/short-urls) containing longUrl values referencing internal hostnames, IPs, or non-standard ports
- Unusual spikes in short URL creation requests from a single source IP
- Shlink application logs showing fetch errors for internal-only destinations
Detection Strategies
- Inspect Shlink reverse proxy and application logs for longUrl parameters matching private IP ranges or cloud metadata endpoints
- Monitor egress traffic from the Shlink host and alert on connections to internal subnets that do not match the application baseline
- Apply web application firewall rules that block short URL submissions targeting reserved IP space
Monitoring Recommendations
- Forward Shlink API access logs and host-level network telemetry to a centralized SIEM for correlation
- Baseline normal outbound destinations from the Shlink server and alert on deviations to internal ranges
- Track repeated 4xx or 5xx responses from the title resolver as a signal of internal port scanning
How to Mitigate CVE-2026-50887
Immediate Actions Required
- Disable the automatic short URL title resolution feature in Shlink configuration until a fixed version is deployed
- Restrict outbound network access from the Shlink host to only the public destinations required for legitimate operation
- Place the Shlink server in a network segment that cannot reach internal management interfaces or cloud metadata services
- Require authentication on the short URL creation API and rate-limit submissions
Patch Information
No vendor patch information is referenced in the NVD entry at the time of publication. Monitor the Shlink project releases and apply the upgrade that addresses CVE-2026-50887 as soon as it is published. Until then, treat the title resolver as untrusted and rely on the workarounds below.
Workarounds
- Configure Shlink to disable automatic title fetching by setting the relevant AUTO_RESOLVE_TITLES option to false
- Route Shlink outbound traffic through an egress proxy that enforces an allowlist of public destinations
- Block traffic from the Shlink host to 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, and 169.254.169.254 at the host firewall
- Use IMDSv2 on AWS workloads to mitigate exposure of instance metadata through SSRF
# Example host-level egress restriction using iptables
iptables -A OUTPUT -d 127.0.0.0/8 -j REJECT
iptables -A OUTPUT -d 10.0.0.0/8 -j REJECT
iptables -A OUTPUT -d 172.16.0.0/12 -j REJECT
iptables -A OUTPUT -d 192.168.0.0/16 -j REJECT
iptables -A OUTPUT -d 169.254.169.254/32 -j REJECT
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

