Summary
SuiteCRM's CalendarAccount testConnection action can make a server-side request to a caller-supplied URL without validating its host, address, or scheme. An authenticated caller able to invoke the action may use the server's network access to reach internal services and obtain response data.
SuiteCRM's CalendarAccount testConnection action can make a server-side request to a caller-supplied URL without validating its host, address, or scheme. An authenticated caller able to invoke the action may use the server's network access to reach internal services and obtain response data.
Affected context
The issue occurs in the CalendarAccount connection-test flow, which passes server_url to curl through CalDAVProvider::makeCalDAVRequest() and sends a PROPFIND request. It is risky when an authenticated caller can invoke this action with a URL that the server can reach, because the URL is not checked for an allowed scheme, host, or destination address.
The issue occurs in the CalendarAccount connection-test flow, which passes server_url to curl through CalDAVProvider::makeCalDAVRequest() and sends a PROPFIND request. It is risky when an authenticated caller can invoke this action with a URL that the server can reach, because the URL is not checked for an allowed scheme, host, or destination address.
Exploit preconditions
- Attack surface: The CalendarAccount
testConnectionaction, which makes outbound requests from the SuiteCRM server. - Required access: An authenticated caller able to invoke the action and supply
server_url. - Trigger point: The action passes the supplied URL into the CalDAV request flow, which sends a PROPFIND request.
- Why exploitation is possible: The destination is not validated against host, address, or scheme restrictions, and the server may return non-success response bodies to the caller.
- Attack surface: The CalendarAccount
testConnectionaction, which makes outbound requests from the SuiteCRM server. - Required access: An authenticated caller able to invoke the action and supply
server_url. - Trigger point: The action passes the supplied URL into the CalDAV request flow, which sends a PROPFIND request.
- Why exploitation is possible: The destination is not validated against host, address, or scheme restrictions, and the server may return non-success response bodies to the caller.
Why this happens
The application uses caller-controlled URL data in a server-side request without adequately validating or constraining the destination. This is a CWE-918: Server-Side Request Forgery (SSRF) pattern: an application makes a request on behalf of a caller, allowing the caller to influence which network resource the server contacts.
The application uses caller-controlled URL data in a server-side request without adequately validating or constraining the destination. This is a CWE-918: Server-Side Request Forgery (SSRF) pattern: an application makes a request on behalf of a caller, allowing the caller to influence which network resource the server contacts.
Potential impact
- An attacker could reach internal services accessible from the SuiteCRM server.
- Response bodies may disclose partial information from internal services.
- Internal services could be enumerated based on request outcomes.
- Cloud metadata endpoints may be accessible if network controls permit.
- An attacker could reach internal services accessible from the SuiteCRM server.
- Response bodies may disclose partial information from internal services.
- Internal services could be enumerated based on request outcomes.
- Cloud metadata endpoints may be accessible if network controls permit.
General mitigation guidance
Defensive patterns focus on treating caller-supplied URLs as untrusted and limiting where the server can connect.
- Prefer a secure-by-default design that accepts a configured service identifier rather than an arbitrary URL.
- If URLs must be accepted, enforce strict scheme and destination allowlists, and validate resolved addresses against prohibited network ranges.
- Apply egress controls so the application can reach only required services.
- Avoid returning raw upstream response bodies or unnecessary details to callers.
- Run the application with the minimum network and system privileges needed.
Defensive patterns focus on treating caller-supplied URLs as untrusted and limiting where the server can connect.
- Prefer a secure-by-default design that accepts a configured service identifier rather than an arbitrary URL.
- If URLs must be accepted, enforce strict scheme and destination allowlists, and validate resolved addresses against prohibited network ranges.
- Apply egress controls so the application can reach only required services.
- Avoid returning raw upstream response bodies or unnecessary details to callers.
- Run the application with the minimum network and system privileges needed.
How teams detect issues like this
- Use static analysis to identify request APIs such as
curlthat receive user-controlled URLs. - Review code paths that pass request parameters into outbound HTTP clients, including redirects and DNS resolution behavior.
- Enforce code-review or CI policies requiring destination validation and approved outbound hosts.
- Monitor outbound requests for unexpected destinations, internal address ranges, and access to metadata endpoints.
- Automated security review tools may help flag flows from user input to server-side request operations.
- Use static analysis to identify request APIs such as
curlthat receive user-controlled URLs. - Review code paths that pass request parameters into outbound HTTP clients, including redirects and DNS resolution behavior.
- Enforce code-review or CI policies requiring destination validation and approved outbound hosts.
- Monitor outbound requests for unexpected destinations, internal address ranges, and access to metadata endpoints.
- Automated security review tools may help flag flows from user input to server-side request operations.

