Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N
Webhook registration is network-accessible and requires only a low-privileged account; Changed Scope and High Confidentiality reflect SSRF reaching loopback services outside Memos' trust boundary.
Primary rating from Vendor (TuranSec).
CVSS VectorVendor: TuranSec
Lifecycle Timeline
2DescriptionCVE.org
Memos' webhook URL validation, isReservedIP() (internal/webhook/validate.go), checks a candidate IP against a reservedCIDRs list that omits 0.0.0.0/8 and never calls ip.IsUnspecified() - unlike the correctly implemented sibling function isInternalIP() in internal/httpgetter/html_meta.go, which does. Because Linux redirects connections to 0.0.0.0 to loopback (127.0.0.1), an attacker registering a webhook URL of http://0.0.0.0:PORT/ bypasses the reserved-IP check and causes the Memos server to make outbound HTTP requests to its own loopback interface, exposing internal-only services.
AnalysisAI
Webhook URL validation bypass in Memos allows authenticated users to trigger Server-Side Request Forgery via the 0.0.0.0 address notation, causing the server to make outbound HTTP requests to its own loopback interface and exposing internal-only services, with a CVSS 8.5 score reflecting Changed Scope and High Confidentiality impact. The root cause is a code-divergence defect: isReservedIP() in internal/webhook/validate.go omits the 0.0.0.0/8 CIDR block and never calls ip.IsUnspecified(), while the correctly implemented sibling function isInternalIP() in internal/httpgetter/html_meta.go does both. No public exploit code or CISA KEV listing has been identified at time of analysis, but the low attack complexity and standard SSRF-to-loopback technique make this a realistic risk on any Linux-hosted Memos instance with multi-user access.
Technical ContextAI
Memos is an open-source self-hosted memo and note-taking web application identified by CPE cpe:2.3:a:usememos:memos:*:*:*:*:*:*:*:*. The vulnerability is a CWE-918 (Server-Side Request Forgery) rooted in incomplete IP address validation within the webhook registration subsystem. The function isReservedIP() in internal/webhook/validate.go validates candidate webhook destination IPs against a hardcoded reserved CIDR list but fails to include 0.0.0.0/8 and does not call ip.IsUnspecified(). On Linux, the kernel routes any TCP connection targeting 0.0.0.0 to the loopback interface (127.0.0.1), meaning a webhook URL of http://0.0.0.0:PORT/ passes all validation checks yet causes the Memos process to connect to itself. The explicit contrast with isInternalIP() in internal/httpgetter/html_meta.go - which correctly handles this case - indicates the two functions diverged during separate development or modification cycles rather than representing a design-level oversight. The CVSS Changed Scope metric (S:C) reflects the ability to reach services beyond Memos itself, such as unauthenticated admin APIs, Redis instances, Docker daemons, or cloud metadata endpoints bound to loopback.
RemediationAI
No vendor-released patch has been identified at time of analysis; monitor the Memos GitHub repository at https://github.com/usememos/memos for a patched release and apply it immediately upon availability. As the highest-priority compensating control, restrict webhook creation permissions to trusted administrative accounts only, directly reducing the PR:L attack surface by preventing low-privilege users from registering arbitrary URLs; the trade-off is reduced self-service capability for regular users. Implement host-level or container egress firewall rules blocking outbound HTTP connections from the Memos process to 0.0.0.0/8, 127.0.0.0/8, and any other loopback or internal CIDR ranges, so that even if a bypass is triggered the TCP connection is dropped before reaching sensitive services; note that this will also block any legitimate webhook integrations targeting internal endpoints, which must be explicitly re-permitted. Additionally, audit all existing webhook registrations in the Memos database for URLs containing 0.0.0.0 or other reserved address notations to identify whether exploitation has already occurred.
elestio memos v0.23.0 is vulnerable to Server-Side Request Forgery (SSRF) due to insufficient validation of user-supplie
Authorization Bypass Through User-Controlled Key in GitHub repository usememos/memos prior to 0.9.0. Rated critical seve
Cross-site Scripting (XSS) - Stored in GitHub repository usememos/memos prior to 0.9.1. Rated critical severity (CVSS 9.
Cross-site Scripting (XSS) - Stored in GitHub repository usememos/memos prior to 0.9.1. Rated critical severity (CVSS 9.
Cross-Site Request Forgery (CSRF) in GitHub repository usememos/memos prior to 0.15.1. Rated high severity (CVSS 8.8), t
Improper Privilege Management in GitHub repository usememos/memos prior to 0.13.2. Rated high severity (CVSS 8.8), this
Cross-Site Request Forgery (CSRF) in GitHub repository usememos/memos prior to 0.9.1. Rated high severity (CVSS 8.8), th
Improper Access Control in GitHub repository usememos/memos prior to 0.9.1. Rated high severity (CVSS 8.8), this vulnera
Improper Privilege Management in GitHub repository usememos/memos prior to 0.9.1. Rated high severity (CVSS 8.8), this v
Authorization Bypass Through User-Controlled Key in GitHub repository usememos/memos prior to 0.9.1. Rated high severity
Improper Access Control in GitHub repository usememos/memos prior to 0.9.0. Rated high severity (CVSS 8.8), this vulnera
Improper Authorization in GitHub repository usememos/memos prior to 0.9.0. Rated high severity (CVSS 8.8), this vulnerab
Same weakness CWE-918 – Server-Side Request Forgery (SSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53356
GHSA-jjh5-p3gc-84xr