CVE-2026-107503 (GCVE-0-2026-107503)
Vulnerability from cvelistv5
Published
2026-10-08 09:32
Modified
2026-10-15 13:09
Severity ?
VLAI Severity ?
EPSS score ?
CWE
Summary
In Eclipse Ditto versions 3.6.0 to 3.8.13 and 3.9.0 to 3.9.7, the Ditto Explorer UI loads its complete environment configuration, including the Ditto API URI and the OpenID Connect (OIDC) provider settings, from an arbitrary
cross-origin URL supplied in the environmentsURL query parameter. It adopts this configuration without user confirmation and persists it in the browser's localStorage. A crafted link can therefore set an attacker-controlled OIDC
authority with autoSso enabled. The UI then automatically starts a login at the genuine identity provider but exchanges the returned authorization code together with its PKCE code_verifier at an attacker-controlled token
endpoint. This lets the attacker redeem the code for the victim's access and refresh tokens. Alternatively, an attacker-controlled api_uri causes the UI to send the victim's bearer token or Basic credentials to the attacker. Because
the configuration is persisted, later visits to the UI without the crafted link repeat the token theft. In versions 3.9.0 to 3.9.7, the Swagger UI OIDC integration of the Helm chart and the Docker Compose deployment is affected in
the same way, but requires the user to start the login. The issue is fixed in 3.8.14 and 3.9.8.
References
Impacted products
| Vendor | Product | Version | ||
|---|---|---|---|---|
| Eclipse Ditto | Ditto Explorer UI |
Version: 3.6.0 ≤ Version: 3.9.0 ≤ |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-107503",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-08T14:24:20.513382Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-08T14:27:38.370Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Ditto Explorer UI",
"repo": "https://github.com/eclipse-ditto/ditto",
"vendor": "Eclipse Ditto",
"versions": [
{
"lessThan": "3.8.14",
"status": "affected",
"version": "3.6.0",
"versionType": "semver"
},
{
"lessThan": "3.9.8",
"status": "affected",
"version": "3.9.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "IAmNobodyAnyway"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "In Eclipse Ditto versions 3.6.0 to 3.8.13 and 3.9.0 to 3.9.7, the Ditto Explorer UI loads its complete environment configuration, including the Ditto API URI and the OpenID Connect (OIDC) provider settings, from an arbitrary\ncross-origin URL supplied in the \u003ccode\u003eenvironmentsURL\u003c/code\u003e query parameter. It adopts this configuration without user confirmation and persists it in the browser\u0027s localStorage. A crafted link can therefore set an attacker-controlled OIDC\n\u003ccode\u003eauthority\u003c/code\u003e with \u003ccode\u003eautoSso\u003c/code\u003e enabled. The UI then automatically starts a login at the genuine identity provider but exchanges the returned authorization code together with its PKCE \u003ccode\u003ecode_verifier\u003c/code\u003e at an attacker-controlled token\nendpoint. This lets the attacker redeem the code for the victim\u0027s access and refresh tokens. Alternatively, an attacker-controlled \u003ccode\u003eapi_uri\u003c/code\u003e causes the UI to send the victim\u0027s bearer token or Basic credentials to the attacker. Because\nthe configuration is persisted, later visits to the UI without the crafted link repeat the token theft. In versions 3.9.0 to 3.9.7, the Swagger UI OIDC integration of the Helm chart and the Docker Compose deployment is affected in\nthe same way, but requires the user to start the login. The issue is fixed in 3.8.14 and 3.9.8."
}
],
"value": "In Eclipse Ditto versions 3.6.0 to 3.8.13 and 3.9.0 to 3.9.7, the Ditto Explorer UI loads its complete environment configuration, including the Ditto API URI and the OpenID Connect (OIDC) provider settings, from an arbitrary\ncross-origin URL supplied in the environmentsURL query parameter. It adopts this configuration without user confirmation and persists it in the browser\u0027s localStorage. A crafted link can therefore set an attacker-controlled OIDC\nauthority with autoSso enabled. The UI then automatically starts a login at the genuine identity provider but exchanges the returned authorization code together with its PKCE code_verifier at an attacker-controlled token\nendpoint. This lets the attacker redeem the code for the victim\u0027s access and refresh tokens. Alternatively, an attacker-controlled api_uri causes the UI to send the victim\u0027s bearer token or Basic credentials to the attacker. Because\nthe configuration is persisted, later visits to the UI without the crafted link repeat the token theft. In versions 3.9.0 to 3.9.7, the Swagger UI OIDC integration of the Helm chart and the Docker Compose deployment is affected in\nthe same way, but requires the user to start the login. The issue is fixed in 3.8.14 and 3.9.8."
}
],
"impacts": [
{
"capecId": "CAPEC-593",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-593 Session Hijacking"
}
]
},
{
"capecId": "CAPEC-176",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-176 Configuration/Environment Manipulation"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 7.1,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"userInteraction": "ACTIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:L/VA:N/SC:H/SI:H/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-15",
"description": "CWE-15 External control of system or configuration setting",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-346",
"description": "CWE-346 Origin Validation Error",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-522",
"description": "CWE-522 Insufficiently Protected Credentials",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-15T13:09:30.155Z",
"orgId": "e51fbebd-6053-4e49-959f-1b94eeb69a2c",
"shortName": "eclipse"
},
"references": [
{
"url": "https://gitlab.eclipse.org/security/cve-assignment/-/work_items/380"
},
{
"url": "https://github.com/eclipse-ditto/ditto/security/advisories/GHSA-8767-g5qv-9jcf"
},
{
"url": "https://gitlab.eclipse.org/security/vulnerability-reports/-/work_items/1207"
},
{
"url": "https://github.com/eclipse-ditto/ditto/commit/d4e51ba20e53c73e3b24e64d4aca57f6079d9ca1"
},
{
"url": "https://github.com/eclipse-ditto/ditto/commit/71061f0b01df596fad80fb24502eb1e852ea6909"
},
{
"url": "https://github.com/eclipse-ditto/ditto/commit/ee65b8cd9b7219401dcac2c25b79adc8cee4a5ba"
},
{
"url": "https://eclipse.dev/ditto/release_notes_398.html"
},
{
"url": "https://eclipse.dev/ditto/release_notes_3814.html"
}
],
"source": {
"discovery": "UNKNOWN"
},
"x_generator": {
"engine": "Vulnogram 1.0.5"
}
}
},
"cveMetadata": {
"assignerOrgId": "e51fbebd-6053-4e49-959f-1b94eeb69a2c",
"assignerShortName": "eclipse",
"cveId": "CVE-2026-107503",
"datePublished": "2026-10-08T09:32:47.485Z",
"dateReserved": "2026-10-08T09:09:18.594Z",
"dateUpdated": "2026-10-15T13:09:30.155Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"vulnrichment": {
"containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2026-107503\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-10-08T14:24:20.513382Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-10-08T14:27:29.588Z\"}}], \"cna\": {\"source\": {\"discovery\": \"UNKNOWN\"}, \"credits\": [{\"lang\": \"en\", \"type\": \"finder\", \"value\": \"IAmNobodyAnyway\"}], \"impacts\": [{\"capecId\": \"CAPEC-593\", \"descriptions\": [{\"lang\": \"en\", \"value\": \"CAPEC-593 Session Hijacking\"}]}, {\"capecId\": \"CAPEC-176\", \"descriptions\": [{\"lang\": \"en\", \"value\": \"CAPEC-176 Configuration/Environment Manipulation\"}]}], \"metrics\": [{\"format\": \"CVSS\", \"cvssV4_0\": {\"Safety\": \"NOT_DEFINED\", \"version\": \"4.0\", \"Recovery\": \"NOT_DEFINED\", \"baseScore\": 7.1, \"Automatable\": \"NOT_DEFINED\", \"attackVector\": \"NETWORK\", \"baseSeverity\": \"HIGH\", \"valueDensity\": \"NOT_DEFINED\", \"vectorString\": \"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:L/VA:N/SC:H/SI:H/SA:N\", \"exploitMaturity\": \"NOT_DEFINED\", \"providerUrgency\": \"NOT_DEFINED\", \"userInteraction\": \"ACTIVE\", \"attackComplexity\": \"LOW\", \"attackRequirements\": \"PRESENT\", \"privilegesRequired\": \"NONE\", \"subIntegrityImpact\": \"HIGH\", \"vulnIntegrityImpact\": \"LOW\", \"subAvailabilityImpact\": \"NONE\", \"vulnAvailabilityImpact\": \"NONE\", \"subConfidentialityImpact\": \"HIGH\", \"vulnConfidentialityImpact\": \"HIGH\", \"vulnerabilityResponseEffort\": \"NOT_DEFINED\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"GENERAL\"}]}], \"affected\": [{\"repo\": \"https://github.com/eclipse-ditto/ditto\", \"vendor\": \"Eclipse Ditto\", \"product\": \"Ditto Explorer UI\", \"versions\": [{\"status\": \"affected\", \"version\": \"3.6.0\", \"lessThan\": \"3.8.14\", \"versionType\": \"semver\"}, {\"status\": \"affected\", \"version\": \"3.9.0\", \"lessThan\": \"3.9.8\", \"versionType\": \"semver\"}], \"defaultStatus\": \"unaffected\"}], \"references\": [{\"url\": \"https://gitlab.eclipse.org/security/cve-assignment/-/work_items/380\"}, {\"url\": \"https://github.com/eclipse-ditto/ditto/security/advisories/GHSA-8767-g5qv-9jcf\"}, {\"url\": \"https://gitlab.eclipse.org/security/vulnerability-reports/-/work_items/1207\"}, {\"url\": \"https://github.com/eclipse-ditto/ditto/commit/d4e51ba20e53c73e3b24e64d4aca57f6079d9ca1\"}, {\"url\": \"https://github.com/eclipse-ditto/ditto/commit/71061f0b01df596fad80fb24502eb1e852ea6909\"}, {\"url\": \"https://github.com/eclipse-ditto/ditto/commit/ee65b8cd9b7219401dcac2c25b79adc8cee4a5ba\"}, {\"url\": \"https://eclipse.dev/ditto/release_notes_398.html\"}, {\"url\": \"https://eclipse.dev/ditto/release_notes_3814.html\"}], \"x_generator\": {\"engine\": \"Vulnogram 1.0.5\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In Eclipse Ditto versions 3.6.0 to 3.8.13 and 3.9.0 to 3.9.7, the Ditto Explorer UI loads its complete environment configuration, including the Ditto API URI and the OpenID Connect (OIDC) provider settings, from an arbitrary\\ncross-origin URL supplied in the environmentsURL query parameter. It adopts this configuration without user confirmation and persists it in the browser\u0027s localStorage. A crafted link can therefore set an attacker-controlled OIDC\\nauthority with autoSso enabled. The UI then automatically starts a login at the genuine identity provider but exchanges the returned authorization code together with its PKCE code_verifier at an attacker-controlled token\\nendpoint. This lets the attacker redeem the code for the victim\u0027s access and refresh tokens. Alternatively, an attacker-controlled api_uri causes the UI to send the victim\u0027s bearer token or Basic credentials to the attacker. Because\\nthe configuration is persisted, later visits to the UI without the crafted link repeat the token theft. In versions 3.9.0 to 3.9.7, the Swagger UI OIDC integration of the Helm chart and the Docker Compose deployment is affected in\\nthe same way, but requires the user to start the login. The issue is fixed in 3.8.14 and 3.9.8.\", \"supportingMedia\": [{\"type\": \"text/html\", \"value\": \"In Eclipse Ditto versions 3.6.0 to 3.8.13 and 3.9.0 to 3.9.7, the Ditto Explorer UI loads its complete environment configuration, including the Ditto API URI and the OpenID Connect (OIDC) provider settings, from an arbitrary\\ncross-origin URL supplied in the \u003ccode\u003eenvironmentsURL\u003c/code\u003e query parameter. It adopts this configuration without user confirmation and persists it in the browser\u0027s localStorage. A crafted link can therefore set an attacker-controlled OIDC\\n\u003ccode\u003eauthority\u003c/code\u003e with \u003ccode\u003eautoSso\u003c/code\u003e enabled. The UI then automatically starts a login at the genuine identity provider but exchanges the returned authorization code together with its PKCE \u003ccode\u003ecode_verifier\u003c/code\u003e at an attacker-controlled token\\nendpoint. This lets the attacker redeem the code for the victim\u0027s access and refresh tokens. Alternatively, an attacker-controlled \u003ccode\u003eapi_uri\u003c/code\u003e causes the UI to send the victim\u0027s bearer token or Basic credentials to the attacker. Because\\nthe configuration is persisted, later visits to the UI without the crafted link repeat the token theft. In versions 3.9.0 to 3.9.7, the Swagger UI OIDC integration of the Helm chart and the Docker Compose deployment is affected in\\nthe same way, but requires the user to start the login. The issue is fixed in 3.8.14 and 3.9.8.\", \"base64\": false}]}], \"problemTypes\": [{\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-15\", \"description\": \"CWE-15 External control of system or configuration setting\"}]}, {\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-346\", \"description\": \"CWE-346 Origin Validation Error\"}]}, {\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-522\", \"description\": \"CWE-522 Insufficiently Protected Credentials\"}]}], \"providerMetadata\": {\"orgId\": \"e51fbebd-6053-4e49-959f-1b94eeb69a2c\", \"shortName\": \"eclipse\", \"dateUpdated\": \"2026-10-15T13:09:30.155Z\"}}}",
"cveMetadata": "{\"cveId\": \"CVE-2026-107503\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-10-15T13:09:30.155Z\", \"dateReserved\": \"2026-10-08T09:09:18.594Z\", \"assignerOrgId\": \"e51fbebd-6053-4e49-959f-1b94eeb69a2c\", \"datePublished\": \"2026-10-08T09:32:47.485Z\", \"assignerShortName\": \"eclipse\"}",
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…