259 lines
12 KiB
JSON
259 lines
12 KiB
JSON
{
|
||
"dataType": "CVE_RECORD",
|
||
"dataVersion": "5.2",
|
||
"cveMetadata": {
|
||
"cveId": "CVE-2026-90898",
|
||
"assignerOrgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
|
||
"state": "PUBLISHED",
|
||
"assignerShortName": "JFROG",
|
||
"dateReserved": "2026-09-14T10:13:28.161Z",
|
||
"datePublished": "2026-09-14T10:18:53.454Z",
|
||
"dateUpdated": "2026-09-14T11:19:46.276Z"
|
||
},
|
||
"containers": {
|
||
"cna": {
|
||
"providerMetadata": {
|
||
"orgId": "48a46f29-ae42-4e1d-90dd-c1676c1e5e6d",
|
||
"shortName": "JFROG",
|
||
"dateUpdated": "2026-09-14T10:18:53.454Z"
|
||
},
|
||
"title": "Bifrost unauthenticated remote code execution via MCP stdio client registration",
|
||
"problemTypes": [
|
||
{
|
||
"descriptions": [
|
||
{
|
||
"lang": "en",
|
||
"cweId": "CWE-306",
|
||
"description": "CWE-306 Missing Authentication for Critical Function",
|
||
"type": "CWE"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"descriptions": [
|
||
{
|
||
"lang": "en",
|
||
"cweId": "CWE-284",
|
||
"description": "CWE-284 Improper Access Control",
|
||
"type": "CWE"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"affected": [
|
||
{
|
||
"vendor": "maximhq",
|
||
"product": "Bifrost",
|
||
"platforms": [
|
||
"Linux",
|
||
"macOS"
|
||
],
|
||
"collectionURL": "https://github.com/maximhq/bifrost",
|
||
"packageName": "github.com/maximhq/bifrost/transports",
|
||
"repo": "git://github.com/maximhq/bifrost",
|
||
"modules": [
|
||
"transports/bifrost-http",
|
||
"core/mcp"
|
||
],
|
||
"programFiles": [
|
||
"transports/bifrost-http/handlers/mcp.go",
|
||
"transports/bifrost-http/handlers/middlewares.go"
|
||
],
|
||
"versions": [
|
||
{
|
||
"status": "affected",
|
||
"version": "0",
|
||
"lessThan": "2.1.0",
|
||
"versionType": "semver"
|
||
}
|
||
],
|
||
"defaultStatus": "unaffected"
|
||
}
|
||
],
|
||
"descriptions": [
|
||
{
|
||
"lang": "en",
|
||
"value": "Bifrost registers MCP clients through its management API. A stdio client is a command plus args. Bifrost starts that program in the gateway the moment the client is added. No MCP handshake required.\n\n\n\nThe default is governance.auth_config.is_enabled=false. Auth off means every caller is a local admin. One unauthenticated POST /api/mcp/client is enough to run a program as the Bifrost process user (appuser on the official image).\n\n\n\n transports/v2.1.0 refuses an unauthenticated stdio registration with 403. transports/v2.0.0 still allows it.",
|
||
"supportingMedia": [
|
||
{
|
||
"type": "text/html",
|
||
"base64": false,
|
||
"value": "<p>Bifrost registers MCP clients through its management API. A stdio client is a command plus args. Bifrost starts that program in the gateway the moment the client is added. No MCP handshake required.</p><p>The default is governance.auth_config.is_enabled=false. Auth off means every caller is a local admin. One unauthenticated POST /api/mcp/client is enough to run a program as the Bifrost process user (appuser on the official image).</p><p> transports/v2.1.0 refuses an unauthenticated stdio registration with 403. transports/v2.0.0 still allows it.</p>"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"references": [
|
||
{
|
||
"url": "https://github.com/maximhq/bifrost/pull/6757",
|
||
"name": "PR #6757: refuse unauthenticated stdio MCP registration",
|
||
"tags": [
|
||
"patch"
|
||
]
|
||
},
|
||
{
|
||
"url": "https://github.com/maximhq/bifrost/commit/12e170352bd25eab1ae9ba16611f1797d1fd8fdc",
|
||
"name": "Merge commit for PR #6757",
|
||
"tags": [
|
||
"patch"
|
||
]
|
||
},
|
||
{
|
||
"url": "https://github.com/maximhq/bifrost/releases/tag/transports/v2.1.0",
|
||
"name": "Bifrost HTTP v2.1.0 (first release containing the fix)",
|
||
"tags": [
|
||
"release-notes"
|
||
]
|
||
},
|
||
{
|
||
"url": "https://github.com/maximhq/bifrost",
|
||
"name": "Bifrost repository",
|
||
"tags": [
|
||
"product"
|
||
]
|
||
}
|
||
],
|
||
"metrics": [
|
||
{
|
||
"format": "CVSS",
|
||
"scenarios": [
|
||
{
|
||
"lang": "en",
|
||
"value": "GENERAL"
|
||
}
|
||
],
|
||
"cvssV3_1": {
|
||
"version": "3.1",
|
||
"attackVector": "NETWORK",
|
||
"attackComplexity": "LOW",
|
||
"privilegesRequired": "NONE",
|
||
"userInteraction": "NONE",
|
||
"scope": "UNCHANGED",
|
||
"confidentialityImpact": "HIGH",
|
||
"integrityImpact": "HIGH",
|
||
"availabilityImpact": "HIGH",
|
||
"baseSeverity": "CRITICAL",
|
||
"baseScore": 9.8,
|
||
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
|
||
}
|
||
}
|
||
],
|
||
"configurations": [
|
||
{
|
||
"lang": "en",
|
||
"value": "Management API reachable and governance.auth_config.is_enabled=false, which is the documented default. Confirmed on maximhq/bifrost v1.6.3. Fixed in transports/v2.1.0 (2026-09-08). An operator who enables management authentication and keeps the admin listener off untrusted networks is not exposed to the unauthenticated form of this issue.",
|
||
"supportingMedia": [
|
||
{
|
||
"type": "text/html",
|
||
"base64": false,
|
||
"value": "<p>Management API reachable and governance.auth_config.is_enabled=false, which is the documented default. Confirmed on maximhq/bifrost v1.6.3. Fixed in transports/v2.1.0 (2026-09-08). An operator who enables management authentication and keeps the admin listener off untrusted networks is not exposed to the unauthenticated form of this issue.</p>"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"workarounds": [
|
||
{
|
||
"lang": "en",
|
||
"value": "Set governance.auth_config.is_enabled to true, use strong administrator credentials, and firewall the management listener.",
|
||
"supportingMedia": [
|
||
{
|
||
"type": "text/html",
|
||
"base64": false,
|
||
"value": "<p>Set governance.auth_config.is_enabled to true, use strong administrator credentials, and firewall the management listener. </p>"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"solutions": [
|
||
{
|
||
"lang": "en",
|
||
"value": "Upgrade Bifrost HTTP transport to 2.1.0 or later. PR #6757 returns 403 for unauthenticated stdio MCP client registration when dashboard authentication is disabled or unconfigured. Authenticated admins can still add stdio clients. The 1.6.x line through 1.6.11 and transports/v2.0.0 do not include this change.",
|
||
"supportingMedia": [
|
||
{
|
||
"type": "text/html",
|
||
"base64": false,
|
||
"value": "<p>Upgrade Bifrost HTTP transport to 2.1.0 or later. PR #6757 returns 403 for unauthenticated stdio MCP client registration when dashboard authentication is disabled or unconfigured. Authenticated admins can still add stdio clients. The 1.6.x line through 1.6.11 and transports/v2.0.0 do not include this change.</p>"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"exploits": [
|
||
{
|
||
"lang": "en",
|
||
"value": "JFrog has a private proof of concept. An unauthenticated POST /api/mcp/client with connection_type stdio and attacker-chosen command and args starts the program in the gateway. Public exploit details are not included in this record.",
|
||
"supportingMedia": [
|
||
{
|
||
"type": "text/html",
|
||
"base64": false,
|
||
"value": "<p>JFrog has a private proof of concept. An unauthenticated POST /api/mcp/client with connection_type stdio and attacker-chosen command and args starts the program in the gateway. Public exploit details are not included in this record.</p>"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"timeline": [
|
||
{
|
||
"time": "2026-07-13T10:27:00.000Z",
|
||
"lang": "en",
|
||
"value": "Reported to the Bifrost maintainers (GHSA-86gf-xh3g-rvxq)"
|
||
},
|
||
{
|
||
"time": "2026-09-02T15:14:00.000Z",
|
||
"lang": "en",
|
||
"value": "Fix merged upstream (PR #6757)"
|
||
},
|
||
{
|
||
"time": "2026-09-08T15:15:00.000Z",
|
||
"lang": "en",
|
||
"value": "Fix first shipped in Bifrost HTTP v2.1.0"
|
||
}
|
||
],
|
||
"credits": [
|
||
{
|
||
"lang": "en",
|
||
"value": "Yuval Moravchick | JFrog",
|
||
"type": "finder"
|
||
}
|
||
],
|
||
"source": {
|
||
"discovery": "EXTERNAL"
|
||
},
|
||
"x_generator": {
|
||
"engine": "Vulnogram 1.0.4"
|
||
}
|
||
},
|
||
"adp": [
|
||
{
|
||
"metrics": [
|
||
{
|
||
"other": {
|
||
"type": "ssvc",
|
||
"content": {
|
||
"id": "CVE-2026-90898",
|
||
"role": "CISA Coordinator",
|
||
"options": [
|
||
{
|
||
"Exploitation": "none"
|
||
},
|
||
{
|
||
"Automatable": "yes"
|
||
},
|
||
{
|
||
"Technical Impact": "total"
|
||
}
|
||
],
|
||
"version": "2.0.3",
|
||
"timestamp": "2026-09-14T11:01:44.207374Z"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"title": "CISA ADP Vulnrichment",
|
||
"providerMetadata": {
|
||
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
|
||
"shortName": "CISA-ADP",
|
||
"dateUpdated": "2026-09-14T11:19:46.276Z"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
} |