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.
4719 vulnerabilities reference this CWE, most recent first.
GHSA-P486-6V3X-XW9F
Vulnerability from github – Published: 2026-04-06 03:30 – Updated: 2026-04-06 03:30A security vulnerability has been detected in imprvhub mcp-browser-agent up to 0.8.0. This impacts the function CallToolRequestSchema of the file src/handlers.ts of the component URL Parameter Handler. The manipulation of the argument request.params.name/request.params.arguments leads to server-side request forgery. The attack is possible to be carried out remotely. The exploit has been disclosed publicly and may be used. The vendor was contacted early about this disclosure but did not respond in any way.
{
"affected": [],
"aliases": [
"CVE-2026-5607"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-04-06T01:16:39Z",
"severity": "MODERATE"
},
"details": "A security vulnerability has been detected in imprvhub mcp-browser-agent up to 0.8.0. This impacts the function CallToolRequestSchema of the file src/handlers.ts of the component URL Parameter Handler. The manipulation of the argument request.params.name/request.params.arguments leads to server-side request forgery. The attack is possible to be carried out remotely. The exploit has been disclosed publicly and may be used. The vendor was contacted early about this disclosure but did not respond in any way.",
"id": "GHSA-p486-6v3x-xw9f",
"modified": "2026-04-06T03:30:18Z",
"published": "2026-04-06T03:30:18Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-5607"
},
{
"type": "WEB",
"url": "https://github.com/wing3e/public_exp/issues/25"
},
{
"type": "WEB",
"url": "https://vuldb.com/submit/785034"
},
{
"type": "WEB",
"url": "https://vuldb.com/vuln/355398"
},
{
"type": "WEB",
"url": "https://vuldb.com/vuln/355398/cti"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/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-P4HC-9PJH-55C8
Vulnerability from github – Published: 2026-05-05 20:29 – Updated: 2026-05-05 20:29SSRF Bypass in ssrfcheck - fails to classify reserved IP address space as invalid
ssrfcheck is an npm package that serves to provide protection from SSRF by validating URLs or hostname inputs.
Resources: * Project's GitHub code repository: https://github.com/felippe-regazio/ssrfcheck * Project's npm package: https://www.npmjs.com/package/ssrfcheck
Vulnerability
The ssrfcheck package maintains a denylist of IP addresses and ranges to check against when validating if an IP address is to be considered as safe or not.
However, the IP address list used for the denylist is incomplete and misses a reserved IP address space as defined by the IANA (Internet Assigned Numbers Authority):
- 224.0.0.0/4 - Multicast
Practically, this reserved IP address space is used for multicast traffic and would most commonly be used for reserved local communication over network protocols such as UDP, which would make it less likely to be used in a typical SSRF attack in practice.
However, such reserved IP address space shouldn't be allowed and it would be responsible of the SSRF protection package to align and conform to an agreed-upon standard of special-purposed addresses that should not be considered a valid public IP address. For reference, the popular npm packages private-ip and ipaddr.js that are highly dependent-upon to make decisions about SSRF protection and both consider the above mentioned IP address space as reserved and is not considered a valid public IP address.
Exploit Proof of Concept
- Install the
ssrfcheckpackage:
npm install ssrfcheck
- Define an
app.jsfile with the programmatic API ofssrfcheck:
import { isSSRFSafeURL } from 'ssrfcheck';
let result
result = isSSRFSafeURL('https://012.1.2.3/whatever');
console.log(result); // returns false
result = isSSRFSafeURL('https://localhost:8080/whatever');
console.log(result); // returns false
result = isSSRFSafeURL('https://239.255.255.250:8080/whatever');
console.log(result); // returns true - bypassed
Vulnerable versions
All versions of ssrfcheck are vulnerable to this issue, up to and including to the latest version of 1.1.1.
Assigned CVE
Author
Liran Tal
{
"affected": [
{
"package": {
"ecosystem": "npm",
"name": "ssrfcheck"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.2.0"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2025-8267"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2026-05-05T20:29:06Z",
"nvd_published_at": null,
"severity": "HIGH"
},
"details": "# SSRF Bypass in `ssrfcheck` - fails to classify reserved IP address space as invalid\n\n`ssrfcheck` is an npm package that serves to provide protection from SSRF by validating URLs or hostname inputs.\n\nResources: \n * Project\u0027s GitHub code repository: https://github.com/felippe-regazio/ssrfcheck\n * Project\u0027s npm package: https://www.npmjs.com/package/ssrfcheck\n \n## Vulnerability\n\nThe `ssrfcheck` package maintains a denylist of IP addresses and ranges to check against when validating if an IP address is to be considered as safe or not.\n\nHowever, the IP address list used for the denylist is incomplete and misses a reserved IP address space as defined by the IANA (Internet Assigned Numbers Authority):\n\n- 224.0.0.0/4 - Multicast\n\nPractically, this reserved IP address space is used for multicast traffic and would most commonly be used for reserved local communication over network protocols such as UDP, which would make it less likely to be used in a typical SSRF attack in practice.\n\nHowever, such reserved IP address space shouldn\u0027t be allowed and it would be responsible of the SSRF protection package to align and conform to an agreed-upon standard of special-purposed addresses that should not be considered a valid public IP address. For reference, the popular npm packages `private-ip` and `ipaddr.js` that are highly dependent-upon to make decisions about SSRF protection and both consider the above mentioned IP address space as reserved and is not considered a valid public IP address.\n\n## Exploit Proof of Concept\n\n1. Install the `ssrfcheck` package:\n\n```bash\nnpm install ssrfcheck\n```\n\n2. Define an `app.js` file with the programmatic API of `ssrfcheck`:\n\n```javascript\nimport { isSSRFSafeURL } from \u0027ssrfcheck\u0027;\n\nlet result\nresult = isSSRFSafeURL(\u0027https://012.1.2.3/whatever\u0027);\nconsole.log(result); // returns false\nresult = isSSRFSafeURL(\u0027https://localhost:8080/whatever\u0027);\nconsole.log(result); // returns false\n\nresult = isSSRFSafeURL(\u0027https://239.255.255.250:8080/whatever\u0027);\nconsole.log(result); // returns true - bypassed\n```\n\n## Vulnerable versions\n\nAll versions of ssrfcheck are vulnerable to this issue, up to and including to the latest version of `1.1.1`.\n\n## Assigned CVE\n\n[CVE-2025-8267](https://nvd.nist.gov/vuln/detail/CVE-2025-8267)\n\n# Author\n\nLiran Tal",
"id": "GHSA-p4hc-9pjh-55c8",
"modified": "2026-05-05T20:29:06Z",
"published": "2026-05-05T20:29:06Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/felippe-regazio/ssrfcheck/security/advisories/GHSA-p4hc-9pjh-55c8"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-8267"
},
{
"type": "WEB",
"url": "https://github.com/felippe-regazio/ssrfcheck/issues/5"
},
{
"type": "WEB",
"url": "https://github.com/felippe-regazio/ssrfcheck/commit/9507b49fd764f2a1a1d1e3b9ee577b7545e6950e"
},
{
"type": "WEB",
"url": "https://gist.github.com/lirantal/2976840639df824cb3abe60d13c65e04"
},
{
"type": "PACKAGE",
"url": "https://github.com/felippe-regazio/ssrfcheck"
},
{
"type": "WEB",
"url": "https://security.snyk.io/vuln/SNYK-JS-SSRFCHECK-9510756"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N/E:P",
"type": "CVSS_V4"
}
],
"summary": "ssrfcheck: SSRF Bypass Caused by Failure to Classify Reserved IP Address Space as Invalid"
}
GHSA-P4M7-27RV-P2VR
Vulnerability from github – Published: 2026-07-13 12:35 – Updated: 2026-07-13 12:35Server-Side Request Forgery (SSRF) vulnerability in bdthemes Instant Image Generator ai-image allows Server Side Request Forgery.This issue affects Instant Image Generator: from n/a through <= 2.1.4.
{
"affected": [],
"aliases": [
"CVE-2026-57413"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-07-13T10:16:35Z",
"severity": "MODERATE"
},
"details": "Server-Side Request Forgery (SSRF) vulnerability in bdthemes Instant Image Generator ai-image allows Server Side Request Forgery.This issue affects Instant Image Generator: from n/a through \u003c= 2.1.4.",
"id": "GHSA-p4m7-27rv-p2vr",
"modified": "2026-07-13T12:35:03Z",
"published": "2026-07-13T12:35:03Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-57413"
},
{
"type": "WEB",
"url": "https://patchstack.com/database/Wordpress/Plugin/ai-image/vulnerability/wordpress-instant-image-generator-plugin-2-1-4-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-P4MJ-GPQ6-MV6X
Vulnerability from github – Published: 2022-05-24 16:57 – Updated: 2024-04-04 02:08rpcapd/daemon.c in libpcap before 1.9.1 allows SSRF because a URL may be provided as a capture source.
{
"affected": [],
"aliases": [
"CVE-2019-15164"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2019-10-03T19:15:00Z",
"severity": "MODERATE"
},
"details": "rpcapd/daemon.c in libpcap before 1.9.1 allows SSRF because a URL may be provided as a capture source.",
"id": "GHSA-p4mj-gpq6-mv6x",
"modified": "2024-04-04T02:08:24Z",
"published": "2022-05-24T16:57:49Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2019-15164"
},
{
"type": "WEB",
"url": "https://github.com/the-tcpdump-group/libpcap/commit/33834cb2a4d035b52aa2a26742f832a112e90a0a"
},
{
"type": "WEB",
"url": "https://github.com/the-tcpdump-group/libpcap/blob/libpcap-1.9/CHANGES"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/5P5K3DQ4TFSZBDB3XN4CZNJNQ3UIF3D3"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/GBIEKWLNIR62KZ5GA7EDXZS52HU6OE5F"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/UZTIPUWABYUE5KQOLCKAW65AUUSB7QO6"
},
{
"type": "WEB",
"url": "https://seclists.org/bugtraq/2019/Dec/23"
},
{
"type": "WEB",
"url": "https://support.apple.com/kb/HT210785"
},
{
"type": "WEB",
"url": "https://support.apple.com/kb/HT210788"
},
{
"type": "WEB",
"url": "https://support.apple.com/kb/HT210789"
},
{
"type": "WEB",
"url": "https://support.apple.com/kb/HT210790"
},
{
"type": "WEB",
"url": "https://www.oracle.com/security-alerts/cpuapr2020.html"
},
{
"type": "WEB",
"url": "https://www.tcpdump.org/public-cve-list.txt"
},
{
"type": "WEB",
"url": "http://seclists.org/fulldisclosure/2019/Dec/26"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-P4XX-M758-3HPX
Vulnerability from github – Published: 2025-05-20 19:20 – Updated: 2025-05-20 19:20Problem
Webhooks are inherently vulnerable to Server-Side Request Forgery (SSRF), which can be exploited by adversaries to target internal resources (e.g., localhost or other services on the local network). While this is not a vulnerability in TYPO3 itself, it may enable attackers to blindly access systems that would otherwise be inaccessible. An administrator-level backend user account is required to exploit this vulnerability.
Solution
Update to TYPO3 versions 12.4.31 LTS, 13.4.12 LTS that fix the problem described.
[!IMPORTANT]
Manual actions required
To mitigate potential SSRF risks via webhooks, it is recommended to explicitly allow access only to trusted hosts. This can be achieved by configuring the allowlist in
$GLOBALS['TYPO3_CONF_VARS']['HTTP']['allowed_hosts']['webhooks'].If the allowlist is not defined or set to
null, all requests will be allowed. If the allowlist is an emptyarray, all requests will be blocked.By default, the factory setting allows all requests. This prevents existing webhooks from failing after upgrading to the affected TYPO3 versions. Administrators must configure this setting manually to enforce restrictions.
Credits
Thanks to the National Cyber Security Center (NCSC) of Switzerland for reporting this issue, and to TYPO3 core & security team member Benjamin Franzke for fixing it.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 12.4.30"
},
"package": {
"ecosystem": "Packagist",
"name": "typo3/cms-webhooks"
},
"ranges": [
{
"events": [
{
"introduced": "12.0.0"
},
{
"fixed": "12.4.31"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 13.4.11"
},
"package": {
"ecosystem": "Packagist",
"name": "typo3/cms-webhooks"
},
"ranges": [
{
"events": [
{
"introduced": "13.0.0"
},
{
"fixed": "13.4.12"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2025-47936"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2025-05-20T19:20:55Z",
"nvd_published_at": "2025-05-20T14:15:50Z",
"severity": "LOW"
},
"details": "### Problem\nWebhooks are inherently vulnerable to Server-Side Request Forgery (SSRF), which can be exploited by adversaries to target internal resources (e.g., _localhost_ or other services on the local network). While this is not a vulnerability in TYPO3 itself, it may enable attackers to blindly access systems that would otherwise be inaccessible. An administrator-level backend user account is required to exploit this vulnerability.\n\n### Solution\nUpdate to TYPO3 versions 12.4.31 LTS, 13.4.12 LTS that fix the problem described.\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e **Manual actions required**\n\u003e\n\u003e To mitigate potential SSRF risks via webhooks, it is recommended to explicitly allow access only to trusted hosts. This can be achieved by configuring the allowlist in `$GLOBALS[\u0027TYPO3_CONF_VARS\u0027][\u0027HTTP\u0027][\u0027allowed_hosts\u0027][\u0027webhooks\u0027]`.\n\u003e \n\u003e If the allowlist is not defined or set to `null`, all requests will be allowed.\n\u003e If the allowlist is an empty `array`, all requests will be blocked.\n\u003e \n\u003e By default, the factory setting allows all requests. This prevents existing webhooks from failing after upgrading to the affected TYPO3 versions. Administrators must configure this setting manually to enforce restrictions.\n\n\n### Credits\nThanks to the National Cyber Security Center (NCSC) of Switzerland for reporting this issue, and to TYPO3 core \u0026 security team member Benjamin Franzke for fixing it.",
"id": "GHSA-p4xx-m758-3hpx",
"modified": "2025-05-20T19:20:55Z",
"published": "2025-05-20T19:20:55Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/TYPO3/typo3/security/advisories/GHSA-p4xx-m758-3hpx"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-47936"
},
{
"type": "WEB",
"url": "https://github.com/TYPO3-CMS/webhooks/commit/0df8b8adae577876fa253679c9ef3fe2a7ee64fd"
},
{
"type": "PACKAGE",
"url": "https://github.com/TYPO3-CMS/webhooks"
},
{
"type": "WEB",
"url": "https://typo3.org/security/advisory/typo3-core-sa-2025-012"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:L/A:L",
"type": "CVSS_V3"
}
],
"summary": "TYPO3 CMS Webhooks Server Side Request Forgery"
}
GHSA-P52H-5FJJ-X2PC
Vulnerability from github – Published: 2022-05-24 19:15 – Updated: 2022-05-24 19:15The vCenter Server contains an SSRF (Server Side Request Forgery) vulnerability due to improper validation of URLs in vCenter Server Content Library. An authorised user with access to content library may exploit this issue by sending a POST request to vCenter Server leading to information disclosure.
{
"affected": [],
"aliases": [
"CVE-2021-21993"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-09-23T12:15:00Z",
"severity": "MODERATE"
},
"details": "The vCenter Server contains an SSRF (Server Side Request Forgery) vulnerability due to improper validation of URLs in vCenter Server Content Library. An authorised user with access to content library may exploit this issue by sending a POST request to vCenter Server leading to information disclosure.",
"id": "GHSA-p52h-5fjj-x2pc",
"modified": "2022-05-24T19:15:37Z",
"published": "2022-05-24T19:15:37Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-21993"
},
{
"type": "WEB",
"url": "https://www.vmware.com/security/advisories/VMSA-2021-0020.html"
}
],
"schema_version": "1.4.0",
"severity": []
}
GHSA-P52V-F53F-HRR6
Vulnerability from github – Published: 2024-01-23 21:30 – Updated: 2025-06-20 21:31A post-authenticated server-side request forgery (SSRF) vulnerability in Trend Micro Apex Central 2019 (lower than build 6481) could allow an attacker to interact with internal or local services directly.
Please note: an attacker must first obtain the ability to execute low-privileged code on the target system in order to exploit this vulnerability.
This is a similar, but not identical vulnerability as CVE-2023-38626.
{
"affected": [],
"aliases": [
"CVE-2023-38627"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-01-23T21:15:08Z",
"severity": "MODERATE"
},
"details": "A post-authenticated server-side request forgery (SSRF) vulnerability in Trend Micro Apex Central 2019 (lower than build 6481) could allow an attacker to interact with internal or local services directly.\n\nPlease note: an attacker must first obtain the ability to execute low-privileged code on the target system in order to exploit this vulnerability.\n\nThis is a similar, but not identical vulnerability as CVE-2023-38626.",
"id": "GHSA-p52v-f53f-hrr6",
"modified": "2025-06-20T21:31:49Z",
"published": "2024-01-23T21:30:20Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-38627"
},
{
"type": "WEB",
"url": "https://success.trendmicro.com/dcx/s/solution/000294176?language=en_US"
},
{
"type": "WEB",
"url": "https://www.zerodayinitiative.com/advisories/ZDI-23-1001"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-P53H-FPW3-FFWH
Vulnerability from github – Published: 2024-03-05 18:31 – Updated: 2024-08-27 21:31A Server-Side Request Forgery (SSRF) in the installUpdateThemePluginAction function of WonderCMS v3.1.3 allows attackers to force the application to make arbitrary requests via injection of crafted URLs into the installThemePlugin parameter.
{
"affected": [],
"aliases": [
"CVE-2024-27561"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-03-05T17:15:06Z",
"severity": "CRITICAL"
},
"details": "A Server-Side Request Forgery (SSRF) in the installUpdateThemePluginAction function of WonderCMS v3.1.3 allows attackers to force the application to make arbitrary requests via injection of crafted URLs into the installThemePlugin parameter.",
"id": "GHSA-p53h-fpw3-ffwh",
"modified": "2024-08-27T21:31:10Z",
"published": "2024-03-05T18:31:13Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-27561"
},
{
"type": "WEB",
"url": "https://github.com/zer0yu/CVE_Request/blob/master/WonderCMS/wondercms_installUpdateThemePluginAction_plugins.md"
}
],
"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"
}
]
}
GHSA-P59Q-W6FF-WF6F
Vulnerability from github – Published: 2024-06-25 00:34 – Updated: 2025-10-15 18:31Adminer and AdminerEvo are vulnerable to SSRF via database connection fields. This could allow an unauthenticated remote attacker to enumerate or access systems the attacker would not otherwise have access to. Adminer is no longer supported, but this issue was fixed in AdminerEvo version 4.8.4.
{
"affected": [],
"aliases": [
"CVE-2023-45195"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-06-24T22:15:10Z",
"severity": "MODERATE"
},
"details": "Adminer and AdminerEvo are vulnerable to SSRF via database connection fields. This could allow an unauthenticated remote attacker to enumerate or access systems the attacker would not otherwise have access to.\u00a0Adminer is no longer supported, but this issue was fixed in AdminerEvo version 4.8.4.",
"id": "GHSA-p59q-w6ff-wf6f",
"modified": "2025-10-15T18:31:47Z",
"published": "2024-06-25T00:34:45Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-45195"
},
{
"type": "WEB",
"url": "https://github.com/adminerevo/adminerevo/pull/102/commits/18f3167bbcbec3bc746f62db72e016aa99144efc"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/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:L/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:Y/R:X/V:X/RE:X/U:X",
"type": "CVSS_V4"
}
]
}
GHSA-P59W-9GQW-WJ8R
Vulnerability from github – Published: 2024-01-31 18:04 – Updated: 2024-11-22 17:56Introduction
This write-up describes a vulnerability found in Label Studio, a popular open source data labeling tool. The vulnerability affects all versions of Label Studio prior to 1.11.0 and was tested on version 1.8.2.
Overview
Label Studio's SSRF protections that can be enabled by setting the SSRF_PROTECTION_ENABLED environment variable can be bypassed to access internal web servers. This is because the current SSRF validation is done by executing a single DNS lookup to verify that the IP address is not in an excluded subnet range. This protection can be bypassed by either using HTTP redirection or performing a DNS rebinding attack.
Description
The following tasks_from_url method in label_studio/data_import/uploader.py performs the SSRF validation (validate_upload_url) before sending the request.
def tasks_from_url(file_upload_ids, project, user, url, could_be_tasks_list):
"""Download file using URL and read tasks from it"""
# process URL with tasks
try:
filename = url.rsplit('/', 1)[-1]
validate_upload_url(url, block_local_urls=settings.SSRF_PROTECTION_ENABLED)
# Reason for #nosec: url has been validated as SSRF safe by the
# validation check above.
response = requests.get(
url, verify=False, headers={'Accept-Encoding': None}
) # nosec
file_content = response.content
check_tasks_max_file_size(int(response.headers['content-length']))
file_upload = create_file_upload(
user, project, SimpleUploadedFile(filename, file_content)
)
if file_upload.format_could_be_tasks_list:
could_be_tasks_list = True
file_upload_ids.append(file_upload.id)
tasks, found_formats, data_keys = FileUpload.load_tasks_from_uploaded_files(
project, file_upload_ids
)
except ValidationError as e:
raise e
except Exception as e:
raise ValidationError(str(e))
return data_keys, found_formats, tasks, file_upload_ids, could_be_tasks_list
The validate_upload_url code in label_studio/core/utils/io.py is shown below.
def validate_upload_url(url, block_local_urls=True):
"""Utility function for defending against SSRF attacks. Raises
- InvalidUploadUrlError if the url is not HTTP[S], or if block_local_urls is enabled
and the URL resolves to a local address.
- LabelStudioApiException if the hostname cannot be resolved
:param url: Url to be checked for validity/safety,
:param block_local_urls: Whether urls that resolve to local/private networks should be allowed.
"""
parsed_url = parse_url(url)
if parsed_url.scheme not in ('http', 'https'):
raise InvalidUploadUrlError
domain = parsed_url.host
try:
ip = socket.gethostbyname(domain)
except socket.error:
from core.utils.exceptions import LabelStudioAPIException
raise LabelStudioAPIException(f"Can't resolve hostname {domain}")
if not block_local_urls:
return
if ip == '0.0.0.0': # nosec
raise InvalidUploadUrlError
local_subnets = [
'127.0.0.0/8',
'10.0.0.0/8',
'172.16.0.0/12',
'192.168.0.0/16',
]
for subnet in local_subnets:
if ipaddress.ip_address(ip) in ipaddress.ip_network(subnet):
raise InvalidUploadUrlError
The issue here is the SSRF validation is only performed before the request is sent, and does not validate the destination IP address. Therefore, an attacker can either redirect the request or perform a DNS rebinding attack to bypass this protection.
Proof of Concept
Both the HTTP redirection and DNS rebinding methods for bypassing Label Studio's SSRF protections are explained below.
HTTP Redirection
The python requests module automatically follows HTTP redirects (eg. response code 301 and 302). Therefore, an attacker could use a URL shortener (eg. https://www.shorturl.at/) or host the following Python code on an external server to redirect request from a Label Studio server to an internal web server.
from http.server import BaseHTTPRequestHandler, HTTPServer
class RedirectHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(301)
# skip first slash
self.send_header('Location', self.path[1:])
self.end_headers()
HTTPServer(("", 8080), RedirectHandler).serve_forever()
DNS Rebinding Attack
DNS rebinding can bypass SSRF protections by resolving to an external IP address for the first resolution, but when the request is sent resolves to an internal IP address that is blocked. For an example, the domain 7f000001.030d1fd6.rbndr.us will randomly switch between the IP address 3.13.31.214 that is not blocked to 127.0.0.1 which is not allowed.
Impact
SSRF vulnerabilities pose a significant risk on cloud environments, since instance credentials are managed by internal web APIs. An attacker can bypass Label Studio's SSRF protections to access internal web servers and partially compromise the confidentiality of those internal servers.
Remediation Advice
- Before saving any responses, validate the destination IP address is not in the deny list.
- Consider blocking internal cloud API IP ranges to mitigate the risk of compromising cloud credentials.
Discovered
- August 2023, Alex Brown, elttam
{
"affected": [
{
"package": {
"ecosystem": "PyPI",
"name": "label-studio"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.11.0"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2023-47116"
],
"database_specific": {
"cwe_ids": [
"CWE-918"
],
"github_reviewed": true,
"github_reviewed_at": "2024-01-31T18:04:40Z",
"nvd_published_at": "2024-01-31T17:15:13Z",
"severity": "MODERATE"
},
"details": "# Introduction\n\nThis write-up describes a vulnerability found in [Label Studio](https://github.com/HumanSignal/label-studio), a popular open source data labeling tool. The vulnerability affects all versions of Label Studio prior to [`1.11.0`](https://github.com/HumanSignal/label-studio/releases/tag/1.11.0) and was tested on version `1.8.2`.\n\n# Overview\n\nLabel Studio\u0027s SSRF protections that can be enabled by setting the `SSRF_PROTECTION_ENABLED` environment variable can be bypassed to access internal web servers. This is because the current SSRF validation is done by executing a single DNS lookup to verify that the IP address is not in an excluded subnet range. This protection can be bypassed by either using HTTP redirection or performing a [DNS rebinding attack](https://en.wikipedia.org/wiki/DNS_rebinding).\n\n# Description\n\nThe following `tasks_from_url` method in [`label_studio/data_import/uploader.py`](https://github.com/HumanSignal/label-studio/blob/1.8.2/label_studio/data_import/uploader.py#L127-L155) performs the SSRF validation (`validate_upload_url`) before sending the request.\n\n```python\ndef tasks_from_url(file_upload_ids, project, user, url, could_be_tasks_list):\n \"\"\"Download file using URL and read tasks from it\"\"\"\n # process URL with tasks\n try:\n filename = url.rsplit(\u0027/\u0027, 1)[-1]\n\n validate_upload_url(url, block_local_urls=settings.SSRF_PROTECTION_ENABLED)\n # Reason for #nosec: url has been validated as SSRF safe by the\n # validation check above.\n response = requests.get(\n url, verify=False, headers={\u0027Accept-Encoding\u0027: None}\n ) # nosec\n file_content = response.content\n check_tasks_max_file_size(int(response.headers[\u0027content-length\u0027]))\n file_upload = create_file_upload(\n user, project, SimpleUploadedFile(filename, file_content)\n )\n if file_upload.format_could_be_tasks_list:\n could_be_tasks_list = True\n file_upload_ids.append(file_upload.id)\n tasks, found_formats, data_keys = FileUpload.load_tasks_from_uploaded_files(\n project, file_upload_ids\n )\n\n except ValidationError as e:\n raise e\n except Exception as e:\n raise ValidationError(str(e))\n return data_keys, found_formats, tasks, file_upload_ids, could_be_tasks_list\n```\n\nThe `validate_upload_url` code in [`label_studio/core/utils/io.py`](https://github.com/HumanSignal/label-studio/blob/1.8.2/label_studio/core/utils/io.py#L174-L209) is shown below.\n\n```python\ndef validate_upload_url(url, block_local_urls=True):\n \"\"\"Utility function for defending against SSRF attacks. Raises\n - InvalidUploadUrlError if the url is not HTTP[S], or if block_local_urls is enabled\n and the URL resolves to a local address.\n - LabelStudioApiException if the hostname cannot be resolved\n\n :param url: Url to be checked for validity/safety,\n :param block_local_urls: Whether urls that resolve to local/private networks should be allowed.\n \"\"\"\n\n parsed_url = parse_url(url)\n\n if parsed_url.scheme not in (\u0027http\u0027, \u0027https\u0027):\n raise InvalidUploadUrlError\n\n domain = parsed_url.host\n try:\n ip = socket.gethostbyname(domain)\n except socket.error:\n from core.utils.exceptions import LabelStudioAPIException\n raise LabelStudioAPIException(f\"Can\u0027t resolve hostname {domain}\")\n\n if not block_local_urls:\n return\n\n if ip == \u00270.0.0.0\u0027: # nosec\n raise InvalidUploadUrlError\n local_subnets = [\n \u0027127.0.0.0/8\u0027,\n \u002710.0.0.0/8\u0027,\n \u0027172.16.0.0/12\u0027,\n \u0027192.168.0.0/16\u0027,\n ]\n for subnet in local_subnets:\n if ipaddress.ip_address(ip) in ipaddress.ip_network(subnet):\n raise InvalidUploadUrlError\n```\n\nThe issue here is the SSRF validation is only performed before the request is sent, and does not validate the destination IP address. Therefore, an attacker can either redirect the request or perform a DNS rebinding attack to bypass this protection.\n\n# Proof of Concept\n\nBoth the HTTP redirection and DNS rebinding methods for bypassing Label Studio\u0027s SSRF protections are explained below.\n\n### HTTP Redirection\n\nThe python `requests` module automatically follows HTTP redirects (eg. response code `301` and `302`). Therefore, an attacker could use a URL shortener (eg. `https://www.shorturl.at/`) or host the following Python code on an external server to redirect request from a Label Studio server to an internal web server.\n\n```python\nfrom http.server import BaseHTTPRequestHandler, HTTPServer\n\nclass RedirectHandler(BaseHTTPRequestHandler):\n\n def do_GET(self):\n self.send_response(301)\n # skip first slash\n self.send_header(\u0027Location\u0027, self.path[1:])\n self.end_headers()\n\nHTTPServer((\"\", 8080), RedirectHandler).serve_forever()\n```\n\n### DNS Rebinding Attack\n\nDNS rebinding can bypass SSRF protections by resolving to an external IP address for the first resolution, but when the request is sent resolves to an internal IP address that is blocked. For an example, the domain `7f000001.030d1fd6.rbndr.us` will randomly switch between the IP address `3.13.31.214` that is not blocked to `127.0.0.1` which is not allowed.\n\n# Impact\n\nSSRF vulnerabilities pose a significant risk on cloud environments, since instance credentials are managed by internal web APIs. An attacker can bypass Label Studio\u0027s SSRF protections to access internal web servers and partially compromise the confidentiality of those internal servers.\n\n# Remediation Advice\n\n* Before saving any responses, validate the destination IP address is not in the deny list.\n* Consider blocking internal cloud API IP ranges to mitigate the risk of compromising cloud credentials.\n\n# Discovered\n- August 2023, Alex Brown, elttam",
"id": "GHSA-p59w-9gqw-wj8r",
"modified": "2024-11-22T17:56:15Z",
"published": "2024-01-31T18:04:40Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/HumanSignal/label-studio/security/advisories/GHSA-p59w-9gqw-wj8r"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-47116"
},
{
"type": "WEB",
"url": "https://github.com/HumanSignal/label-studio/commit/55dd6af4716b92f2bb213fe461d1ffbc380c6a64"
},
{
"type": "WEB",
"url": "https://en.wikipedia.org/wiki/DNS_rebinding"
},
{
"type": "PACKAGE",
"url": "https://github.com/HumanSignal/label-studio"
},
{
"type": "WEB",
"url": "https://github.com/HumanSignal/label-studio/blob/1.8.2/label_studio/core/utils/io.py#L174-L209"
},
{
"type": "WEB",
"url": "https://github.com/HumanSignal/label-studio/blob/1.8.2/label_studio/data_import/uploader.py#L127-L155"
},
{
"type": "WEB",
"url": "https://github.com/HumanSignal/label-studio/releases/tag/1.11.0"
},
{
"type": "WEB",
"url": "https://github.com/pypa/advisory-database/tree/main/vulns/label-studio/PYSEC-2024-127.yaml"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N",
"type": "CVSS_V3"
}
],
"summary": "Label Studio SSRF on Import Bypassing `SSRF_PROTECTION_ENABLED` Protections"
}
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.