CVE-2026-55374
canto-saas-api: Authenticated API requests can be redirected via unencoded path variables
canto-saas-api is a PHP library for interacting with the Canto SaaS API. Prior to version 3.0.0, Request::buildRequestUrl() joins values returned by Request::getPathVariables() without encoding individual path segments, including the scheme and contentId values used by GetContentDetailsRequest. When a consuming application supplies an untrusted path variable value, path traversal sequences, query delimiters, or fragment delimiters can change the destination endpoint before AbstractEndpoint::sendRequest() attaches the configured authentication token. An attacker who controls that path variable value through the consuming application can cause unintended reads or writes with the configured application's privileges on the same Canto instance, but applications that pass only trusted and validated identifiers are not exploitable. This issue is fixed in version 3.0.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
4.8
canto-saas-api: Authenticated API requests can be redirected via unencoded path variables
canto-saas-api is a PHP library for interacting with the Canto SaaS API. Prior to version 3.0.0, Request::buildRequestUrl() joins values returned by Request::getPathVariables() without encoding individual path segments, including the scheme and contentId values used by GetContentDetailsRequest. When a consuming application supplies an untrusted path variable value, path traversal sequences, query delimiters, or fragment delimiters can change the destination endpoint before AbstractEndpoint::sendRequest() attaches the configured authentication token. An attacker who controls that path variable value through the consuming application can cause unintended reads or writes with the configured application's privileges on the same Canto instance, but applications that pass only trusted and validated identifiers are not exploitable. This issue is fixed in version 3.0.0.
- Record
CVE-2026-55374- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-74, CWE-918
- Updated
- 2026-11-02
EUVDEUVD-2026-78905
4.8
canto-saas-api is a PHP library for interacting with the Canto SaaS API. Prior to version 3.0.0, Request::buildRequestUrl() joins values returned by Request::getPathVariables() without encoding individual path segments, including the scheme and contentId values used by GetContentDetailsRequest. When a consuming application supplies an untrusted path variable value, path traversal sequences, query delimiters, or fragment delimiters can change the destination endpoint before AbstractEndpoint::sendRequest() attaches the configured authentication token. An attacker who controls that path variable value through the consuming application can cause unintended reads or writes with the configured application's privileges on the same Canto instance, but applications that pass only trusted and validated identifiers are not exploitable. This issue is fixed in version 3.0.0.
- Record
EUVD-2026-78905- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-9qfv-wgh2-m6p8
4.8
canto-saas-api: Authenticated API requests can be redirected via unencoded path variables
Summary
In affected versions, Request::buildRequestUrl() inserts path variables into
the request URL without URL encoding (implode('/', $pathVariables)). All
request classes implementing getPathVariables() are affected, e.g.
GetContentDetailsRequest (scheme, contentId).
If a consuming application passes untrusted input (such as an ID taken from
an HTTP request parameter) as a path variable, characters like ../, ? or
# are sent verbatim and can change the path of the resulting API request.
Impact
An attacker who controls a path variable value can redirect the
library's authenticated request — the Bearer access token is attached in
AbstractEndpoint::sendRequest() — to a different API endpoint of the same
Canto instance, causing unintended reads or writes with the privileges of the
configured app. The impact depends on how the consuming application sources
path variable values; applications that only pass trusted, validated IDs are
not exploitable.
Patches
Fixed in 3.0.0: every path segment is encoded with rawurlencode() before
being inserted into the request URL.
Workarounds
If you cannot upgrade, validate untrusted values before passing them to
request classes, e.g. enforce an allowlist pattern such as
^[A-Za-z0-9_-]+$ for content IDs and schemes.
- Record
GHSA-9qfv-wgh2-m6p8- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-74, CWE-918
- Updated
- 2026-11-02
NVD
4.8
canto-saas-api is a PHP library for interacting with the Canto SaaS API. Prior to version 3.0.0, Request::buildRequestUrl() joins values returned by Request::getPathVariables() without encoding individual path segments, including the scheme and contentId values used by GetContentDetailsRequest. When a consuming application supplies an untrusted path variable value, path traversal sequences, query delimiters, or fragment delimiters can change the destination endpoint before AbstractEndpoint::sendRequest() attaches the configured authentication token. An attacker who controls that path variable value through the consuming application can cause unintended reads or writes with the configured application's privileges on the same Canto instance, but applications that pass only trusted and validated identifiers are not exploitable. This issue is fixed in version 3.0.0.
- Record
CVE-2026-55374- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-74, CWE-918
- Updated
- 2026-11-02
OSV
4.8
canto-saas-api: Authenticated API requests can be redirected via unencoded path variables
canto-saas-api is a PHP library for interacting with the Canto SaaS API. Prior to version 3.0.0, Request::buildRequestUrl() joins values returned by Request::getPathVariables() without encoding individual path segments, including the scheme and contentId values used by GetContentDetailsRequest. When a consuming application supplies an untrusted path variable value, path traversal sequences, query delimiters, or fragment delimiters can change the destination endpoint before AbstractEndpoint::sendRequest() attaches the configured authentication token. An attacker who controls that path variable value through the consuming application can cause unintended reads or writes with the configured application's privileges on the same Canto instance, but applications that pass only trusted and validated identifiers are not exploitable. This issue is fixed in version 3.0.0.
- Record
CVE-2026-55374- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-74, CWE-918
- Updated
- 2026-11-02
OSVGHSA-9qfv-wgh2-m6p8
4.8
canto-saas-api: Authenticated API requests can be redirected via unencoded path variables
Summary
In affected versions, Request::buildRequestUrl() inserts path variables into
the request URL without URL encoding (implode('/', $pathVariables)). All
request classes implementing getPathVariables() are affected, e.g.
GetContentDetailsRequest (scheme, contentId).
If a consuming application passes untrusted input (such as an ID taken from
an HTTP request parameter) as a path variable, characters like ../, ? or
# are sent verbatim and can change the path of the resulting API request.
Impact
An attacker who controls a path variable value can redirect the
library's authenticated request — the Bearer access token is attached in
AbstractEndpoint::sendRequest() — to a different API endpoint of the same
Canto instance, causing unintended reads or writes with the privileges of the
configured app. The impact depends on how the consuming application sources
path variable values; applications that only pass trusted, validated IDs are
not exploitable.
Patches
Fixed in 3.0.0: every path segment is encoded with rawurlencode() before
being inserted into the request URL.
Workarounds
If you cannot upgrade, validate untrusted values before passing them to
request classes, e.g. enforce an allowlist pattern such as
^[A-Za-z0-9_-]+$ for content IDs and schemes.
- Record
GHSA-9qfv-wgh2-m6p8- CVSS 3.1
- 4.8 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-74, CWE-918
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
jleehr/canto-saas-apiPackagist |
through 2.0.0 | 3.0.0 |
jleehr/canto-saas-apiPackagist |
before 3.0.0, plus listed versions 1.0.32.0.0 |
3.0.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-55374 is a medium vulnerability (CVSS 4.8) in Jleehr Canto-saas-api, published June 19, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.36%, the 29th percentile. Fixed in jleehr/canto-saas-api 3.0.0.
References
github.com/jleehr/canto-saas-api/security/advisories/GHSA-9qfv-wgh2-m6p8
github.com/jleehr/canto-saas-api/commit/300559fdae5d1bed2dc00a6477f5996833a77339
github.com/jleehr/canto-saas-api/releases/tag/3.0.0
github.com/advisories/GHSA-9qfv-wgh2-m6p8
github.com/CVEProject/cvelistV5/tree/main/cves/2026/55xxx/CVE-2026-55374.json
nvd.nist.gov/vuln/detail/CVE-2026-55374
github.com/jleehr/canto-saas-api