CWE-918
AllowedServer-Side Request Forgery (SSRF)
Abstraction: Base · Status: Incomplete
The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.
4787 vulnerabilities reference this CWE, most recent first.
GHSA-FCRH-FQXH-6FX6
Vulnerability from github – Published: 2026-03-02 21:24 – Updated: 2026-03-06 15:16Summary
A logic error in the API authentication flow causes the CSRF protection on the URL unfurl service endpoint to be trivially bypassed by any unauthenticated remote attacker. Combined with the absence of a login requirement on the endpoint itself, this allows an attacker to force the server to make arbitrary outbound HTTP requests to any host, including internal network addresses and cloud instance metadata services, and retrieve the response content.
Component: Idno/Pages/Service/Web/UrlUnfurl.php, Idno/Core/Session.php, Idno/Core/Actions.php
Vulnerability Class: Server-Side Request Forgery (SSRF)
Authentication Required: None
CVSSv4 Base Score: 9.2 (High) - AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
Affected Endpoint: GET /service/web/unfurl?url=<attacker-controlled-url>
Handled by Idno\Pages\Service\Web\UrlUnfurl::getContent().
Affected Versions: <= 1.6.3
cat version.idno
version = '1.6.3'
build = 2026021301
Code Flow
Step 1 — Endpoint access control
UrlUnfurl::getContent() (UrlUnfurl.php:36) enforces two access controls:
$this->xhrGatekeeper();
$this->tokenGatekeeper();
Notably, the original authentication check ($this->gatekeeper()) was explicitly removed with the following comment left in the source:
//$this->gatekeeper(); // Gatekeeper to ensure this service isn't abused by third parties
// UPDATE: Needs to be accessible to logged out users, TODO, find a way to prevent abuse
This leaves the endpoint accessible to unauthenticated users, with only the two remaining gatekeepers as a barrier.
Step 2 — Bypassing xhrGatekeeper()
Page::xhrGatekeeper() (Page.php:876) checks whether the request was made with the X-Requested-With:
XMLHttpRequest header:
function xhrGatekeeper()
{
if (!$this->xhr) {
$this->deniedContent();
}
}
This check is trivially bypassed by any HTTP client capable of setting custom headers.
Step 3 — Bypassing tokenGatekeeper() via premature API flag
Page::tokenGatekeeper() (Page.php:887) calls Actions::validateToken():
function tokenGatekeeper()
{
$url = $this->currentUrl();
$bits = explode('?', $url);
$url = $bits[0];
if (!\Idno\Core\Idno::site()->actions()->validateToken($url, false)) {
$this->deniedContent();
}
}
Actions::validateToken() (Actions.php:23) short-circuits entirely when isAPIRequest() returns true:
public static function validateToken($action = '', $haltExecutionOnBadRequest = true)
{
if (Idno::site()->session()->isAPIRequest()) {
return true;
}
return parent::validateToken($action, $haltExecutionOnBadRequest);
}
isAPIRequest() reads the is_api_request flag from the session:
function isAPIRequest()
{
if (!empty($_SESSION['is_api_request'])) {
return true;
}
return false;
}
The flag is set in Session::tryAuthUser() (Session.php:488), which runs early in the request lifecycle. The critical defect is here:
$apiUsername = $_SERVER['HTTP_X_IDNO_USERNAME'] ?? $_SERVER['HTTP_X_KNOWN_USERNAME'] ?? null;
$apiSignature = $_SERVER['HTTP_X_IDNO_SIGNATURE'] ?? $_SERVER['HTTP_X_KNOWN_SIGNATURE'] ?? null;
if (!$return && !empty($apiUsername) && !empty($apiSignature)) {
$this->setIsAPIRequest(true); // ← flag set here, before any credential check
$user = \Idno\Entities\User::getByHandle($apiUsername);
if (!empty($user)) {
$compare_hmac = base64_encode(hash_hmac('sha256', $_SERVER['REQUEST_URI'], $key, true));
if ($hmac == $compare_hmac) { // ← HMAC verified here, too late
$return = $this->refreshSessionUser($user);
}
}
}
setIsAPIRequest(true) is called unconditionally as soon as both X-IDNO-USERNAME and X-IDNO-SIGNATURE headers are present, regardless of whether the supplied credentials are valid. The HMAC verification that follows is therefore irrelevant — by the time tokenGatekeeper() calls validateToken(), the API flag is already set and the token check returns true immediately.
An attacker supplying any non-empty values for these two headers — real or fabricated — bypasses CSRF protection entirely.
Step 4 — The unfurl fetch
With both gatekeepers bypassed, execution reaches UnfurledUrl::unfurl() (UnfurledUrl.php:53):
public function unfurl($url)
{
$url = trim($url);
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}
$contents = \Idno\Core\Webservice::file_get_contents($url);
...
$this->data = $unfurled;
$this->source_url = $url;
return true;
}
FILTER_VALIDATE_URL accepts any valid URL including http://localhost/, http://169.254.169.254/, and http://10.0.0.1/. There is no allowlist, blocklist, or restriction on private/loopback address ranges.
The fetched content is parsed for OpenGraph metadata and mf2 microformats, then returned to the caller in a JSON response, giving the attacker a full read of the response body from the internal target.
Proof of Concept
Step 1: Run a webserver on the server running Idno to emulate an internal service. Ensure this server is not accessible localhost.
python -m http.server --bind 127.0.0.1 9001
Serving HTTP on 127.0.0.1 port 9001 (http://127.0.0.1:9001/) ...
Step 2: Verify that you cannot reach this server from a different system
curl http://rpi:9001
curl: (7) Failed to connect to rpi port 9001 after 26 ms: Couldn't connect to server
Step 3: Make a request to the unfurl URL with required headers and observe that you can reach the internal service.
curl -s "http://rpi:9090/service/web/unfurl?url=http://localhost:9001/test.html" \
-H "X-Requested-With: XMLHttpRequest" \
-H "X-IDNO-USERNAME: x" \
-H "X-IDNO-SIGNATURE: x"
{
"title": "Page Title",
"mf2": {
"items": [],
"rels": [],
"rel-urls": []
},
"id": null,
"rendered": "<div class=\"row unfurled-url\" id=\"unfurled-url-\" data-url=\"http:\/\/localhost:9001\/test.html\">\n <div class=\"basics\">\n \n <div class=\"text\">\n <h3><a href=\"http:\/\/localhost:9001\/test.html\" target=\"_blank\">Page Title<\/a><\/h3>\n \n <!--<div class=\"byline\"><a href=\"http:\/\/localhost:9001\/test.html\">localhost<\/a><\/div>-->\n <\/div>\n <\/div>\n \n <\/div>"
}
https://github.com/user-attachments/assets/6b8c7728-94e3-4b5e-ba7f-c0908e75d08c
Impact
Any unauthenticated remote attacker can force the server to issue HTTP requests to arbitrary destinations and retrieve response content. Practical attack scenarios include: * Cloud instance metadata exfiltration (AWS, GCP, Azure): The SSRF can reach the instance metadata service. On AWS with IMDSv1 (the default prior to late 2019 and still common on older instances), this exposes temporary IAM credentials, which can be used to gain full access to the associated cloud account. On GCP and Azure equivalent endpoints expose OAuth tokens and subscription details.
-
Internal network reconnaissance: The attacker can probe internal hosts and ports by observing response content and timing differences. Open ports responding to HTTP return content; ports with no HTTP listener produce an error or timeout. This allows mapping of internal services (databases, caches, admin panels, other web applications) that are not exposed to the public internet.
-
Access to localhost-restricted services: Web applications and administration interfaces commonly restrict access to 127.0.0.1. The SSRF bypasses this restriction by routing requests through the server itself. This includes Idno's own admin interface if it is firewall-restricted, as well as co-located services such as database administration tools, monitoring dashboards, and internal APIs.
-
Interaction with internal services Services such as Redis (default: no authentication), Memcached, and internal HTTP APIs may be reachable and manipulable via crafted URLs, potentially enabling cache poisoning, data exfiltration, or triggering state-changing operations on internal systems.
Remediation
Move setIsAPIRequest(true) to after successful HMAC verification:
if ($hmac == $compare_hmac) {
$this->setIsAPIRequest(true); // only set after credentials are verified
$return = $this->refreshSessionUser($user);
}
Defence in depth — block private address ranges in unfurl(): The unfurl function should reject requests to RFC 1918 addresses, loopback, and link-local ranges:
$host = parse_url($url, PHP_URL_HOST);
if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
// allowed
} else {
return false; // block private/reserved ranges
}
Note: An attempt was made to email the address provided in the security page but the address does not exist.
Your message wasn't delivered to security@idno.co because the address couldn't be found, or is unable to receive mail.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 1.6.3"
},
"package": {
"ecosystem": "Packagist",
"name": "idno/known"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.6.4"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-28508"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2026-03-02T21:24:37Z",
"nvd_published_at": "2026-03-06T05:16:35Z",
"severity": "CRITICAL"
},
"details": "## Summary\nA logic error in the API authentication flow causes the CSRF protection on the URL unfurl service endpoint to be trivially bypassed by any unauthenticated remote attacker. Combined with the absence of a login requirement on the endpoint itself, this allows an attacker to force the server to make arbitrary outbound HTTP requests to any host, including internal network addresses and cloud instance metadata services, and retrieve the response content.\n\n**Component**: `Idno/Pages/Service/Web/UrlUnfurl.php`, `Idno/Core/Session.php`, `Idno/Core/Actions.php` \n**Vulnerability Class**: [Server-Side Request Forgery (SSRF)](https://cwe.mitre.org/data/definitions/918.html)\n**Authentication Required**: None \n**CVSSv4 Base Score:** 9.2 (High) - [AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N](https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N)\n**Affected Endpoint**: GET `/service/web/unfurl?url=\u003cattacker-controlled-url\u003e`\nHandled by `Idno\\Pages\\Service\\Web\\UrlUnfurl::getContent()`.\n**Affected Versions**: \u003c= 1.6.3\n```\ncat version.idno\nversion = \u00271.6.3\u0027\nbuild = 2026021301\n```\n\n\n## Code Flow \n### Step 1 \u2014 Endpoint access control \n`UrlUnfurl::getContent()` (UrlUnfurl.php:36) enforces two access controls: \n`$this-\u003exhrGatekeeper();`\n`$this-\u003etokenGatekeeper();` \n\nNotably, the original authentication check (`$this-\u003egatekeeper()`) was explicitly removed with the following comment left in the source:\n\n```php\n//$this-\u003egatekeeper(); // Gatekeeper to ensure this service isn\u0027t abused by third parties\n// UPDATE: Needs to be accessible to logged out users, TODO, find a way to prevent abuse\n```\n\nThis leaves the endpoint accessible to unauthenticated users, with only the two remaining gatekeepers as a barrier.\n\n### Step 2 \u2014 Bypassing xhrGatekeeper()\n`Page::xhrGatekeeper()` (Page.php:876) checks whether the request was made with the X-Requested-With:\nXMLHttpRequest header:\n```php\nfunction xhrGatekeeper()\n{\n if (!$this-\u003exhr) {\n $this-\u003edeniedContent();\n }\n}\n```\n\nThis check is trivially bypassed by any HTTP client capable of setting custom headers.\n\n### Step 3 \u2014 Bypassing `tokenGatekeeper()` via premature API flag\n`Page::tokenGatekeeper()` (Page.php:887) calls `Actions::validateToken()`:\n```php\nfunction tokenGatekeeper()\n{\n $url = $this-\u003ecurrentUrl();\n $bits = explode(\u0027?\u0027, $url);\n $url = $bits[0];\n if (!\\Idno\\Core\\Idno::site()-\u003eactions()-\u003evalidateToken($url, false)) {\n $this-\u003edeniedContent();\n }\n}\n```\n`Actions::validateToken()` (Actions.php:23) short-circuits entirely when `isAPIRequest()` returns true:\n\n```php\npublic static function validateToken($action = \u0027\u0027, $haltExecutionOnBadRequest = true)\n{\n if (Idno::site()-\u003esession()-\u003eisAPIRequest()) {\n return true;\n }\n return parent::validateToken($action, $haltExecutionOnBadRequest);\n}\n```\n`isAPIRequest()` reads the `is_api_request` flag from the session:\n```php\nfunction isAPIRequest()\n{\n if (!empty($_SESSION[\u0027is_api_request\u0027])) {\n return true;\n }\n return false;\n}\n```\nThe flag is set in `Session::tryAuthUser()` (Session.php:488), which runs early in the request lifecycle. The critical defect is here:\n```php\n$apiUsername = $_SERVER[\u0027HTTP_X_IDNO_USERNAME\u0027] ?? $_SERVER[\u0027HTTP_X_KNOWN_USERNAME\u0027] ?? null;\n$apiSignature = $_SERVER[\u0027HTTP_X_IDNO_SIGNATURE\u0027] ?? $_SERVER[\u0027HTTP_X_KNOWN_SIGNATURE\u0027] ?? null;\nif (!$return \u0026\u0026 !empty($apiUsername) \u0026\u0026 !empty($apiSignature)) {\n $this-\u003esetIsAPIRequest(true); // \u2190 flag set here, before any credential check\n $user = \\Idno\\Entities\\User::getByHandle($apiUsername);\n if (!empty($user)) {\n $compare_hmac = base64_encode(hash_hmac(\u0027sha256\u0027, $_SERVER[\u0027REQUEST_URI\u0027], $key, true));\n if ($hmac == $compare_hmac) { // \u2190 HMAC verified here, too late\n $return = $this-\u003erefreshSessionUser($user);\n }\n }\n}\n```\n`setIsAPIRequest(true)` is called unconditionally as soon as both `X-IDNO-USERNAME` and `X-IDNO-SIGNATURE` headers are present, regardless of whether the supplied credentials are valid. The HMAC verification that follows is therefore irrelevant \u2014 by the time `tokenGatekeeper()` calls `validateToken()`, the API flag is already set and the token check returns true immediately. \n\nAn attacker supplying any non-empty values for these two headers \u2014 real or fabricated \u2014 bypasses CSRF protection entirely.\n\n### Step 4 \u2014 The unfurl fetch\nWith both gatekeepers bypassed, execution reaches `UnfurledUrl::unfurl()` (UnfurledUrl.php:53):\n```php\npublic function unfurl($url)\n{\n $url = trim($url);\n if (!filter_var($url, FILTER_VALIDATE_URL)) {\n return false;\n }\n $contents = \\Idno\\Core\\Webservice::file_get_contents($url);\n ...\n $this-\u003edata = $unfurled;\n $this-\u003esource_url = $url;\n return true;\n}\n```\n`FILTER_VALIDATE_URL` accepts any valid URL including http://localhost/, http://169.254.169.254/, and http://10.0.0.1/. There is no allowlist, blocklist, or restriction on private/loopback address ranges.\nThe fetched content is parsed for OpenGraph metadata and mf2 microformats, then returned to the caller in a JSON response, giving the attacker a full read of the response body from the internal target.\n\n## Proof of Concept\nStep 1: Run a webserver on the server running Idno to emulate an internal service. Ensure this server is not accessible localhost.\n```\npython -m http.server --bind 127.0.0.1 9001\nServing HTTP on 127.0.0.1 port 9001 (http://127.0.0.1:9001/) ...\n```\n\nStep 2: Verify that you cannot reach this server from a different system\n```\ncurl http://rpi:9001\ncurl: (7) Failed to connect to rpi port 9001 after 26 ms: Couldn\u0027t connect to server\n```\nStep 3: Make a request to the unfurl URL with required headers and observe that you can reach the internal service.\n```sh\ncurl -s \"http://rpi:9090/service/web/unfurl?url=http://localhost:9001/test.html\" \\\n -H \"X-Requested-With: XMLHttpRequest\" \\\n -H \"X-IDNO-USERNAME: x\" \\\n -H \"X-IDNO-SIGNATURE: x\"\n{\n \"title\": \"Page Title\",\n \"mf2\": {\n \"items\": [],\n \"rels\": [],\n \"rel-urls\": []\n },\n \"id\": null,\n \"rendered\": \"\u003cdiv class=\\\"row unfurled-url\\\" id=\\\"unfurled-url-\\\" data-url=\\\"http:\\/\\/localhost:9001\\/test.html\\\"\u003e\\n \u003cdiv class=\\\"basics\\\"\u003e\\n \\n \u003cdiv class=\\\"text\\\"\u003e\\n \u003ch3\u003e\u003ca href=\\\"http:\\/\\/localhost:9001\\/test.html\\\" target=\\\"_blank\\\"\u003ePage Title\u003c\\/a\u003e\u003c\\/h3\u003e\\n \\n \u003c!--\u003cdiv class=\\\"byline\\\"\u003e\u003ca href=\\\"http:\\/\\/localhost:9001\\/test.html\\\"\u003elocalhost\u003c\\/a\u003e\u003c\\/div\u003e--\u003e\\n \u003c\\/div\u003e\\n \u003c\\/div\u003e\\n \\n \u003c\\/div\u003e\"\n}\n```\n\n\nhttps://github.com/user-attachments/assets/6b8c7728-94e3-4b5e-ba7f-c0908e75d08c\n\n\n\n## Impact\nAny unauthenticated remote attacker can force the server to issue HTTP requests to arbitrary destinations and retrieve response content. Practical attack scenarios include:\n* Cloud instance metadata exfiltration (AWS, GCP, Azure): The SSRF can reach the instance metadata service. On AWS with IMDSv1 (the default prior to late 2019 and still common on older instances), this exposes temporary IAM\ncredentials, which can be used to gain full access to the associated cloud account. On GCP and Azure\nequivalent endpoints expose OAuth tokens and subscription details.\n\n* Internal network reconnaissance: The attacker can probe internal hosts and ports by observing response content and timing differences. Open ports responding to HTTP return content; ports with no HTTP listener produce an error or timeout. This allows mapping of internal services (databases, caches, admin panels, other web applications) that are not exposed to the public internet.\n\n* Access to localhost-restricted services: Web applications and administration interfaces commonly restrict access to 127.0.0.1. The SSRF bypasses this restriction by routing requests through the server itself. This includes Idno\u0027s own admin interface if it is firewall-restricted, as well as co-located services such as database administration tools, monitoring dashboards, and internal APIs.\n\n* Interaction with internal services\nServices such as Redis (default: no authentication), Memcached, and internal HTTP APIs may be reachable and manipulable via crafted URLs, potentially enabling cache poisoning, data exfiltration, or triggering state-changing operations on internal systems.\n\n\n## Remediation\nMove `setIsAPIRequest(true)` to after successful HMAC verification:\n```php\nif ($hmac == $compare_hmac) {\n $this-\u003esetIsAPIRequest(true); // only set after credentials are verified\n $return = $this-\u003erefreshSessionUser($user);\n}\n```\n\nDefence in depth \u2014 block private address ranges in unfurl():\nThe unfurl function should reject requests to RFC 1918 addresses, loopback, and link-local ranges:\n```php\n$host = parse_url($url, PHP_URL_HOST);\nif (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {\n // allowed\n} else {\n return false; // block private/reserved ranges\n}\n```\n\nNote: An attempt was made to email the address provided in the [security page](security@idno.co) but the address does not exist.\n\n```\nYour message wasn\u0027t delivered to security@idno.co because the address couldn\u0027t be found, or is unable to receive mail.\n```",
"id": "GHSA-fcrh-fqxh-6fx6",
"modified": "2026-03-06T15:16:04Z",
"published": "2026-03-02T21:24:37Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/idno/idno/security/advisories/GHSA-fcrh-fqxh-6fx6"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-28508"
},
{
"type": "PACKAGE",
"url": "https://github.com/idno/idno"
},
{
"type": "WEB",
"url": "https://github.com/idno/idno/releases/tag/1.6.4"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N",
"type": "CVSS_V4"
}
],
"summary": "Idno Vulnerable to Unauthenticated SSRF via URL Unfurl Endpoint"
}
GHSA-FCV7-PCHJ-75C2
Vulnerability from github – Published: 2026-06-03 18:33 – Updated: 2026-06-25 21:31A vulnerability in Cisco Unified Communications Manager (Unified CM) and Cisco Unified Communications Manager Session Management Edition (Unified CM SME) could allow an unauthenticated, remote attacker to conduct server-side request forgery (SSRF) attacks through an affected device.
This vulnerability is due to improper input validation for specific HTTP requests. An attacker could exploit this vulnerability by sending a crafted HTTP request to an affected device. A successful exploit could allow the attacker to write files to the underlying operating system that could be used later to elevate to root.
Note: Cisco has assigned this security advisory a Security Impact Rating (SIR) of Critical rather than High as the score indicates. The reason is that exploitation of this vulnerability could result in an attacker elevating privileges to root.
Note: To exploit this vulnerability, the WebDialer service must be enabled. WebDialer is disabled by default.
{
"affected": [],
"aliases": [
"CVE-2026-20230"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-06-03T18:16:20Z",
"severity": "HIGH"
},
"details": "A vulnerability in Cisco Unified Communications Manager (Unified CM) and Cisco Unified Communications Manager Session Management Edition (Unified CM SME) could allow an unauthenticated, remote attacker to conduct server-side request forgery (SSRF) attacks through an affected device.\n\n This vulnerability is due to improper input validation for specific HTTP requests. An attacker could exploit this vulnerability by sending a crafted HTTP request to an affected device. A successful exploit could allow the attacker to write files to the underlying operating system that could be used later to elevate to root.\n\n Note: Cisco has assigned this security advisory a Security Impact Rating (SIR) of Critical rather than High as the score indicates. The reason is that exploitation of this vulnerability could result in an attacker elevating privileges to root.\n\n Note: To exploit this vulnerability, the WebDialer service must be enabled. WebDialer is disabled by default.",
"id": "GHSA-fcv7-pchj-75c2",
"modified": "2026-06-25T21:31:22Z",
"published": "2026-06-03T18:33:11Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-20230"
},
{
"type": "WEB",
"url": "https://denizhalil.com/2026/06/12/cve-2026-20230-cisco-unified-cm-ssrf"
},
{
"type": "WEB",
"url": "https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-cucm-ssrf-cXPnHcW"
},
{
"type": "WEB",
"url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-20230"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-FCW7-W2VC-FPPM
Vulnerability from github – Published: 2026-07-28 00:31 – Updated: 2026-07-28 00:31Unauthenticated Server Side Request Forgery (SSRF) in Simple Link Directory Pro <= 15.0.6 versions.
{
"affected": [],
"aliases": [
"CVE-2026-61953"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-07-27T23:16:41Z",
"severity": "HIGH"
},
"details": "Unauthenticated Server Side Request Forgery (SSRF) in Simple Link Directory Pro \u003c= 15.0.6 versions.",
"id": "GHSA-fcw7-w2vc-fppm",
"modified": "2026-07-28T00:31:02Z",
"published": "2026-07-28T00:31:02Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-61953"
},
{
"type": "WEB",
"url": "https://patchstack.com/database/wordpress/plugin/simple-link-directory-pro/vulnerability/wordpress-simple-link-directory-pro-plugin-15-0-6-server-side-request-forgery-ssrf-vulnerability?_s_id=cve"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-FF24-4PRJ-GPMJ
Vulnerability from github – Published: 2026-04-10 20:59 – Updated: 2026-07-21 14:02Summary
The /api/templates/fetch endpoint accepts a caller-supplied url parameter and performs a server-side HTTP GET request to that URL without authentication and without URL scheme or host validation. The server's response is returned directly to the caller. type. This constitutes an unauthenticated SSRF vulnerability affecting any publicly reachable Arcane instance.
Details
- No allowlist or denylist of destination hosts/CIDRs
- No requirement for the caller to be authenticated
Response handling produces four distinct outcomes observable by the caller:
- Valid JSON targets return a fully reflected response body if the returned fields fit the expected internal struct
- Non-JSON HTTP 200 responses produce an error leaking the first byte of the response ("Invalid JSON response: invalid character '<'...")
- Non-200 responses leak the HTTP status code
- TCP-level failures distinguish between closed ports ("connection refused") and filtered ones ("i/o timeout")
PoC
Send an unauthenticated GET request to /api/templates/fetch, passing the target URL as the url query parameter.
Impact
- Unauthenticated port scanning of internal networks
- Access to internal HTTP services not exposed to the public internet (service discovery endpoints, internal dashboards, Kubernetes API)
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 1.17.2"
},
"package": {
"ecosystem": "Go",
"name": "github.com/getarcaneapp/arcane/backend"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.17.3"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-40242"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2026-04-10T20:59:27Z",
"nvd_published_at": "2026-04-10T21:16:27Z",
"severity": "HIGH"
},
"details": "### Summary\nThe /api/templates/fetch endpoint accepts a caller-supplied url parameter and performs a server-side HTTP GET request to that URL without authentication and without URL scheme or host validation. The server\u0027s response is returned directly to the caller. type. This constitutes an unauthenticated SSRF vulnerability affecting any publicly reachable Arcane instance.\n\n### Details\n- No allowlist or denylist of destination hosts/CIDRs\n- No requirement for the caller to be authenticated\n\nResponse handling produces four distinct outcomes observable by the caller: \n- Valid JSON targets return a fully reflected response body if the returned fields fit the expected internal struct\n- Non-JSON HTTP 200 responses produce an error leaking the first byte of the response (`\"Invalid JSON response: invalid character \u0027\u003c\u0027...\"`)\n- Non-200 responses leak the HTTP status code\n- TCP-level failures distinguish between closed ports (`\"connection refused\"`) and filtered ones (`\"i/o timeout\"`)\n\n### PoC\nSend an unauthenticated GET request to `/api/templates/fetch`, passing the target URL as the `url` query parameter.\n\n\u003cimg width=\"1041\" height=\"375\" alt=\"image\" src=\"https://github.com/user-attachments/assets/f9fd475e-90b0-4dec-95e1-0af6263f5bb5\" /\u003e\n\n### Impact\n- Unauthenticated port scanning of internal networks\n- Access to internal HTTP services not exposed to the public internet (service discovery endpoints, internal dashboards, Kubernetes API)",
"id": "GHSA-ff24-4prj-gpmj",
"modified": "2026-07-21T14:02:57Z",
"published": "2026-04-10T20:59:27Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/getarcaneapp/arcane/security/advisories/GHSA-ff24-4prj-gpmj"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-40242"
},
{
"type": "PACKAGE",
"url": "https://github.com/getarcaneapp/arcane"
},
{
"type": "WEB",
"url": "https://github.com/getarcaneapp/arcane/releases/tag/v1.17.3"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "Arcane has Unauthenticated SSRF with Conditional Response Reflection in Template Fetch Endpoint"
}
GHSA-FF3M-68VJ-H86P
Vulnerability from github – Published: 2023-06-27 15:30 – Updated: 2023-06-27 17:15Server-Side Request Forgery (SSRF) in GitHub repository plantuml/plantuml prior to 1.2023.9.
{
"affected": [
{
"package": {
"ecosystem": "Maven",
"name": "net.sourceforge.plantuml:plantuml-mit"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.2023.9"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "Maven",
"name": "net.sourceforge.plantuml:plantuml"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.2023.9"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2023-3432"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2023-06-27T17:15:16Z",
"nvd_published_at": "2023-06-27T15:15:11Z",
"severity": "HIGH"
},
"details": "Server-Side Request Forgery (SSRF) in GitHub repository plantuml/plantuml prior to 1.2023.9.",
"id": "GHSA-ff3m-68vj-h86p",
"modified": "2023-06-27T17:15:16Z",
"published": "2023-06-27T15:30:29Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-3432"
},
{
"type": "WEB",
"url": "https://github.com/plantuml/plantuml/commit/b32500bb61ae617bb312496d6d832e4be8190797"
},
{
"type": "PACKAGE",
"url": "https://github.com/plantuml/plantuml"
},
{
"type": "WEB",
"url": "https://huntr.dev/bounties/8ac3316f-431c-468d-87e4-3dafff2ecf51"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/FV7XL3CY3K3K5ER3ASMEQA546MIQQ7QM"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "PlantUML Server-Side Request Forgery vulnerability"
}
GHSA-FF75-FG5H-FJX7
Vulnerability from github – Published: 2026-04-28 00:31 – Updated: 2026-04-28 00:31A security flaw has been discovered in ChatGPTNextWeb NextChat up to 2.16.1. Affected by this issue is the function proxyHandler of the file app/api/[provider]/[...path]/route.ts. The manipulation results in server-side request forgery. The attack may be performed from remote. The exploit has been released to the public and may be used for attacks. The project was informed of the problem early through an issue report but has not responded yet.
{
"affected": [],
"aliases": [
"CVE-2026-7177"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-04-27T22:16:18Z",
"severity": "MODERATE"
},
"details": "A security flaw has been discovered in ChatGPTNextWeb NextChat up to 2.16.1. Affected by this issue is the function proxyHandler of the file app/api/[provider]/[...path]/route.ts. The manipulation results in server-side request forgery. The attack may be performed from remote. The exploit has been released to the public and may be used for attacks. The project was informed of the problem early through an issue report but has not responded yet.",
"id": "GHSA-ff75-fg5h-fjx7",
"modified": "2026-04-28T00:31:40Z",
"published": "2026-04-28T00:31:40Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-7177"
},
{
"type": "WEB",
"url": "https://github.com/ChatGPTNextWeb/NextChat/issues/6742"
},
{
"type": "WEB",
"url": "https://gist.github.com/YLChen-007/da6b00024f5b7e1d4fa0658c19b77fbf"
},
{
"type": "WEB",
"url": "https://github.com/ChatGPTNextWeb/NextChat"
},
{
"type": "WEB",
"url": "https://vuldb.com/submit/797645"
},
{
"type": "WEB",
"url": "https://vuldb.com/vuln/359779"
},
{
"type": "WEB",
"url": "https://vuldb.com/vuln/359779/cti"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:P/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
"type": "CVSS_V4"
}
]
}
GHSA-FF78-2Q7Q-3GPW
Vulnerability from github – Published: 2024-02-06 00:30 – Updated: 2024-02-13 15:31Server-side request forgery (SSRF) vulnerability that could allow a rogue server on the local network to modify its URL using another DNS address to point back to the loopback adapter. This could then allow the URL to exploit other vulnerabilities on the local server. This was addressed by fixing DNS addresses that refer to loopback. This issue affects My Cloud OS 5 devices before 5.27.161, My Cloud Home, My Cloud Home Duo and SanDisk ibi devices before 9.5.1-104.
{
"affected": [],
"aliases": [
"CVE-2023-22817"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-02-05T22:15:54Z",
"severity": "MODERATE"
},
"details": "Server-side request forgery (SSRF) vulnerability that could allow a rogue server on the local network to modify its URL using another DNS address to point back to the loopback adapter. This could then allow the URL to exploit other vulnerabilities on the local server. This was addressed\u00a0by fixing DNS addresses that refer to loopback. This issue affects My Cloud OS 5 devices before 5.27.161, My Cloud Home, My Cloud Home Duo and SanDisk ibi devices before 9.5.1-104.\u00a0\n",
"id": "GHSA-ff78-2q7q-3gpw",
"modified": "2024-02-13T15:31:10Z",
"published": "2024-02-06T00:30:25Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-22817"
},
{
"type": "WEB",
"url": "https://www.westerndigital.com/support/product-security/wdc-24001-western-digital-my-cloud-os-5-my-cloud-home-duo-and-sandisk-ibi-firmware-update"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-FFM6-VVPH-G5F5
Vulnerability from github – Published: 2026-06-22 17:01 – Updated: 2026-06-22 17:01Summary
The OpenCTI platform’s data ingestion feature accepts user-supplied URLs without validation and uses the Axios HTTP client with its default configuration (allowAbsoluteUrls: true). This allows attackers to craft requests to arbitrary endpoints, including internal services, because Axios will accept and process absolute URLs.
This results in a semi-blind SSRF, as responses may not be fully visible but can still impact internal systems.
Impact
OpenCTI’s data ingestion feature can allow an attacker to make the application send HTTP requests to arbitrary internal or external endpoints. This means an attacker could reach internal services that are not exposed publicly, such as Elasticsearch, Redis, or RabbitMQ, and potentially extract sensitive data or manipulate internal components. In cloud environments, the attacker could target metadata services like AWS, Azure, or GCP to obtain credentials and configuration details, which could lead to full compromise of the infrastructure. Even though the SSRF is semi-blind and the attacker may not see the full response, the ability to interact with internal services can enable enumeration, data exfiltration, and in some cases remote code execution if internal APIs expose dangerous functionality.
{
"affected": [
{
"package": {
"ecosystem": "PyPI",
"name": "pycti"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "6.8.16"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-21887"
],
"database_specific": {
"cwe_ids": [
"CWE-20",
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2026-06-22T17:01:22Z",
"nvd_published_at": "2026-03-12T17:16:36Z",
"severity": "HIGH"
},
"details": "### Summary\nThe OpenCTI platform\u2019s data ingestion feature accepts user-supplied URLs without validation and uses the Axios HTTP client with its default configuration (allowAbsoluteUrls: true). This allows attackers to craft requests to arbitrary endpoints, including internal services, because Axios will accept and process absolute URLs.\n\nThis results in a semi-blind SSRF, as responses may not be fully visible but can still impact internal systems.\n\n### Impact\nOpenCTI\u2019s data ingestion feature can allow an attacker to make the application send HTTP requests to arbitrary internal or external endpoints. This means an attacker could reach internal services that are not exposed publicly, such as Elasticsearch, Redis, or RabbitMQ, and potentially extract sensitive data or manipulate internal components. In cloud environments, the attacker could target metadata services like AWS, Azure, or GCP to obtain credentials and configuration details, which could lead to full compromise of the infrastructure. Even though the SSRF is semi-blind and the attacker may not see the full response, the ability to interact with internal services can enable enumeration, data exfiltration, and in some cases remote code execution if internal APIs expose dangerous functionality.",
"id": "GHSA-ffm6-vvph-g5f5",
"modified": "2026-06-22T17:01:22Z",
"published": "2026-06-22T17:01:22Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/OpenCTI-Platform/opencti/security/advisories/GHSA-ffm6-vvph-g5f5"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-21887"
},
{
"type": "PACKAGE",
"url": "https://github.com/OpenCTI-Platform/opencti"
},
{
"type": "WEB",
"url": "https://github.com/pypa/advisory-database/tree/main/vulns/pycti/PYSEC-2026-118.yaml"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N",
"type": "CVSS_V3"
}
],
"summary": "OpenCTI has Semi-Blind SSRF via Unvalidated External URL in Data Ingestion Feature"
}
GHSA-FFVM-PVFJ-68Q9
Vulnerability from github – Published: 2022-11-04 19:01 – Updated: 2022-11-07 19:00A vulnerability in the web-based management interface of Cisco BroadWorks CommPilot application could allow an authenticated, remote attacker to perform a server-side request forgery (SSRF) attack on an affected device. This vulnerability is due to insufficient validation of user-supplied input. An attacker could exploit this vulnerability by sending a crafted HTTP request to the web interface. A successful exploit could allow the attacker to obtain confidential information from the BroadWorks server and other device on the network. {{value}} ["%7b%7bvalue%7d%7d"])}]]
{
"affected": [],
"aliases": [
"CVE-2022-20951"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2022-11-04T18:15:00Z",
"severity": "MODERATE"
},
"details": "A vulnerability in the web-based management interface of Cisco BroadWorks CommPilot application could allow an authenticated, remote attacker to perform a server-side request forgery (SSRF) attack on an affected device. This vulnerability is due to insufficient validation of user-supplied input. An attacker could exploit this vulnerability by sending a crafted HTTP request to the web interface. A successful exploit could allow the attacker to obtain confidential information from the BroadWorks server and other device on the network. {{value}} [\"%7b%7bvalue%7d%7d\"])}]]",
"id": "GHSA-ffvm-pvfj-68q9",
"modified": "2022-11-07T19:00:19Z",
"published": "2022-11-04T19:01:09Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2022-20951"
},
{
"type": "WEB",
"url": "https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-broadworks-ssrf-BJeQfpp"
},
{
"type": "WEB",
"url": "https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-broadworks-ssrf-BJeQfpp"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-FFXG-5F8M-H72J
Vulnerability from github – Published: 2024-08-05 06:30 – Updated: 2024-08-30 19:56A Server-Side Request Forgery (SSRF) affects Rocket.Chat's Twilio webhook endpoint before version 6.10.1.
{
"affected": [
{
"package": {
"ecosystem": "npm",
"name": "rocket.chat"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "6.10.1"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2024-39713"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2024-08-05T15:14:20Z",
"nvd_published_at": "2024-08-05T05:15:39Z",
"severity": "HIGH"
},
"details": "A Server-Side Request Forgery (SSRF) affects Rocket.Chat\u0027s Twilio webhook endpoint before version 6.10.1.",
"id": "GHSA-ffxg-5f8m-h72j",
"modified": "2024-08-30T19:56:58Z",
"published": "2024-08-05T06:30:36Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-39713"
},
{
"type": "WEB",
"url": "https://github.com/RocketChat/Rocket.Chat/commit/ce072a1a70c86f90a4f502cdc0bad92d79f6e6e9"
},
{
"type": "WEB",
"url": "https://hackerone.com/reports/1886954"
},
{
"type": "PACKAGE",
"url": "https://github.com/RocketChat/Rocket.Chat"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N",
"type": "CVSS_V4"
}
],
"summary": "Rocket.Chat Server-Side Request Forgery (SSRF) vulnerability"
}
No mitigation information available for this CWE.
CAPEC-664: Server Side Request Forgery
An adversary exploits improper input validation by submitting maliciously crafted input to a target application running on a server, with the goal of forcing the server to make a request either to itself, to web services running in the server’s internal network, or to external third parties. If successful, the adversary’s request will be made with the server’s privilege level, bypassing its authentication controls. This ultimately allows the adversary to access sensitive data, execute commands on the server’s network, and make external requests with the stolen identity of the server. Server Side Request Forgery attacks differ from Cross Site Request Forgery attacks in that they target the server itself, whereas CSRF attacks exploit an insecure user authentication mechanism to perform unauthorized actions on the user's behalf.