Skip to main content

Shlink EUVDEUVD-2026-52434

| CVE-2026-18737 HIGH
SQL Injection (CWE-89)
2026-08-03 VulnCheck GHSA-2jhc-j623-f52p
7.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Obtain any valid Shlink API key
  2. Delivery
    Craft malicious SQL fragment as direction value in orderBy parameter
  3. Exploit
    Send HTTP GET request to /rest/v{n}/tags/stats endpoint
  4. Execution
    Unsanitized input injected into Doctrine QueryBuilder ORDER BY clause
  5. Persist
    Database executes attacker-controlled SQL subquery
  6. Impact
    Extract sensitive data via repeated time-based or boolean-oracle requests

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Persistence

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

Exploitation Conditions

Exploitation requires possession of any valid Shlink API key - no administrative, owner-level, or elevated privileges are needed; any tenant's key suffices. The injection point is the direction value within the orderBy query parameter on the tag statistics endpoint (GET /rest/v{n}/tags/stats), which is standard Shlink functionality requiring no special or non-default configuration to be enabled. Exploitation is limited by: (1) the attacker must hold at least one valid API key (PR:L - not anonymously exploitable); (2) impact is read-only data extraction, with no confirmed path to data modification or service disruption from this vulnerability alone; (3) no specific platform, OS, or deployment mode is required beyond a functioning Shlink instance accessible over the network.

Impact

The CVSS 4.0 score of 7.1 with vector AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N accurately reflects the risk profile: network-accessible, low-complexity, authenticated (API key required, PR:L), with high confidentiality impact and no integrity or availability impact. The CVSS signals are internally consistent with the description - network vector aligns with the REST API exposure, and low-privilege matches the API key authentication model. A public proof-of-concept repository (theopaid on GitHub) exists, substantially lowering the exploitation skill threshold and elevating real-world urgency beyond what the raw score alone conveys. The vulnerability is not currently listed in CISA KEV, so mass in-the-wild exploitation is not confirmed at time of analysis; however, the combination of a public POC and a single-credential exploitation path means the window between publication and active abuse is likely short. The sole meaningful limiting factor is the requirement for a valid API key, which reduces but does not eliminate exposure - particularly in environments with broadly issued keys or shared tenant deployments.

Exploit ScenarioDerived

An attacker holding any valid Shlink API key sends a crafted GET request to /rest/v{n}/tags/stats?orderBy=visits:SLEEP(5)-- or an equivalent boolean-oracle payload, causing the database to delay responses in proportion to injected logic. By iterating injected subqueries, the attacker enumerates hashed API key secrets, full destination URLs, visitor IP addresses, and geolocation records from the shared database across all tenants. A public proof-of-concept on GitHub reduces the expertise required to near-zero for anyone already holding an API key.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 03, 2026

Blind SQL injection in Shlink's tag statistics REST endpoint allows any API key holder to extract sensitive data from the underlying database across all tenants. The unvalidated direction value of the orderBy query parameter flows unsanitized into a Doctrine QueryBuilder ORDER BY clause, enabling time-based, boolean-oracle, and error-based extraction of long URLs, visitor records, IP addresses, geolocation data, user agents, and hashed API key secrets. A public proof-of-concept exploit is available on GitHub, no public exploit identified at time of analysis as confirmed actively exploited, but the low barrier to exploitation - any valid API key suffices - makes this a genuine remediation priority for Shlink operators.

RemediationAI

No vendor-released patch version is confirmed from available data - operators should monitor the official Shlink GitHub repository (https://github.com/shlinkio/shlink) and the VulnCheck advisory (https://www.vulncheck.com/advisories/shlink-blind-sql-injection-via-tags-stats-orderby-parameter) for an updated release and apply it immediately upon availability. As an immediate compensating control, audit and revoke all API keys issued to untrusted or non-essential parties, since any valid API key is sufficient for exploitation. Consider blocking or rate-limiting access to the tag statistics endpoint (GET /rest/v{n}/tags/stats) at the reverse proxy or WAF layer to reduce automated exploitation throughput; note that this impacts legitimate tag analytics consumers. Deploy WAF rules targeting ORDER BY injection patterns such as time-delay functions (SLEEP, WAITFOR) and nested SELECT subqueries in sort parameters, accepting that sophisticated bypass techniques may circumvent signature-based detection. If the tag statistics endpoint is not operationally required, disabling it entirely at the application or proxy level eliminates the attack surface with no side effects on other Shlink functionality.

Affected VersionsENISA

Shlink 3.3.1 ≤5.1.5

Affected Packages

euvd shlink 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

Shlink (CPE: cpe:2.3:a:shlinkio:shlink:*:*:*:*:*:*:*:*) is an open-source PHP-based URL shortener using Doctrine ORM's QueryBuilder for database interaction. The root cause is CWE-89 (SQL Injection): ORDER BY clauses cannot leverage standard parameterized query bindings in the same way as WHERE predicates, and Shlink's tag statistics endpoint omits any allowlist validation or sanitization of the direction sort-direction value before concatenating it into the ORDER BY clause. This allows attackers to inject SQL subqueries - including time-delayed expressions (e.g., SLEEP), boolean conditionals, and error-generating constructs - that the database engine executes with the privileges of the application database user. Because Shlink operates as a multi-tenant URL shortening service, a single compromised or malicious API key can be used to enumerate data belonging to any tenant stored in the shared database.

Know when Shlink 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 7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 6.5 MEDIUM

REST API endpoint is network-accessible requiring only an API key (PR:L, AV:N); read-only extraction with no confirmed integrity or availability impact (I:N, A:N, S:U).

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

DescriptionCVE.org

Shlink contains a blind SQL injection vulnerability that allows any authenticated API key holder to inject arbitrary SQL fragments by supplying an unvalidated direction value in the orderBy query parameter of the tag statistics endpoint. Attackers can craft a malicious direction string containing SQL subqueries that flows unsanitized into a Doctrine QueryBuilder ORDER BY clause, enabling time-based, boolean-oracle, and error-based extraction of sensitive data including long URLs, visitor records, IP addresses, geolocation data, user agents, and hashed API key secrets from any tenant.

Executive ViewAI

Why It Matters

Shlink contains a critical data exposure vulnerability in its tag statistics API with publicly available exploit code, allowing any API key holder to extract sensitive business data including shortened URLs, visitor records, IP geolocation, and hashed API secrets across all tenant databases. This multi-tenant exposure creates immediate regulatory and business risk through potential data breach. With no vendor patch currently available, immediate remediation action is required.

Business Impact: High
Compensating Controls

Until vendor patch is available: (1) Restrict network access to the tag statistics REST endpoint via firewall or Web Application Firewall, limiting to internal-only addresses or disabling if not operationally required; (2) Rotate all API keys and enforce principle of least privilege with restricted scope; (3) Implement request-rate limiting and WAF rules to detect and block SQL injection attempts; (4) Enable database query audit logging and monitor for suspicious data extraction patterns; (5) Consider completely disabling the tag statistics API feature until patched if business operations permit.

Threat Intelligence Overview

EPSS Score
0.2%
Top 85% exploitable
Prevalence
Low
niche self-hosted open-source URL shortener, developer-focused deployments
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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 HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

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

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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