CVE-2026-45688
Full vulnerability record from the local CVENow database.
Description
Rocket.Chat is an open-source, secure, fully customizable communications platform. Prior to 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, and 7.10.11, Rocket.Chat's CAS login handler forwards the client-supplied options.cas.credentialToken value straight into a MongoDB findOne({_id: ...}) query without any runtime type check. TypeScript's string parameter annotation is erased at runtime, so an unauthenticated attacker can substitute a MongoDB query operator ({"$gt": ""}, {"$ne": null}, etc.) for what the server expects to be an opaque ticket string. The injected operator matches the first unexpired document in the credential_tokens collection, bypassing the CAS ticket check entirely. When any legitimate CAS or SAML SSO login is in flight, the attacker's next DDP login call matches the same credential-token row via the NoSQL operator and is issued a full Meteor auth token (userId + token) bound to the victim. The token is immediately usable against the complete REST and DDP surface as that user. If the victim is an administrator, this escalates to full instance compromise via Apps-Engine app install. This vulnerability is fixed in 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, and 7.10.11.
View original CVE JSON
{
"id": "CVE-2026-45688",
"sourceIdentifier": "[email protected]",
"published": "2026-06-24T21:16:53.847",
"lastModified": "2026-10-25T22:10:00.150",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Rocket.Chat is an open-source, secure, fully customizable communications platform. Prior to 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, and 7.10.11, Rocket.Chat's CAS login handler forwards the client-supplied options.cas.credentialToken value straight into a MongoDB findOne({_id: ...}) query without any runtime type check. TypeScript's string parameter annotation is erased at runtime, so an unauthenticated attacker can substitute a MongoDB query operator ({\"$gt\": \"\"}, {\"$ne\": null}, etc.) for what the server expects to be an opaque ticket string. The injected operator matches the first unexpired document in the credential_tokens collection, bypassing the CAS ticket check entirely. When any legitimate CAS or SAML SSO login is in flight, the attacker's next DDP login call matches the same credential-token row via the NoSQL operator and is issued a full Meteor auth token (userId + token) bound to the victim. The token is immediately usable against the complete REST and DDP surface as that user. If the victim is an administrator, this escalates to full instance compromise via Apps-Engine app install. This vulnerability is fixed in 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, and 7.10.11."
},
{
"lang": "es",
"value": "Rocket.Chat es una plataforma de comunicaciones de código abierto, segura y totalmente personalizable. Antes de 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7 y 7.10.11, el gestor de inicio de sesión CAS de Rocket.Chat reenvía el valor options.cas.credentialToken proporcionado por el cliente directamente a una consulta MongoDB findOne({_id: ...}) sin ninguna verificación de tipo en tiempo de ejecución. La anotación de parámetro de cadena de TypeScript se borra en tiempo de ejecución, por lo que un atacante no autenticado puede sustituir un operador de consulta de MongoDB ({“$gt”: “”}, {“$ne”: null}, etc.) por lo que el servidor espera que sea una cadena de ticket opaca. El operador inyectado coincide con el primer documento no caducado en la colección credential_tokens, eludiendo por completo la verificación del ticket CAS. Cuando cualquier inicio de sesión legítimo de CAS o SAML SSO está en curso, la siguiente llamada de inicio de sesión DDP del atacante coincide con la misma fila de token de credencial a través del operador NoSQL y se le emite un token de autenticación completo de Meteor (userId + token) vinculado a la víctima. El token es inmediatamente utilizable contra toda la superficie REST y DDP como ese usuario. Si la víctima es un administrador, esto escala a un compromiso completo de la instancia a través de la instalación de una aplicación de Apps-Engine. Esta vulnerabilidad se corrige en 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7 y 7.10.11."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "RocketChat",
"product": "Rocket.Chat",
"versions": [
{
"version": ">= 8.5.0-rc.0, < 8.5.0",
"status": "affected"
},
{
"version": ">= 8.4.0-rc.0, < 8.4.1",
"status": "affected"
},
{
"version": ">= 8.3.0-rc.0, < 8.3.3",
"status": "affected"
},
{
"version": ">= 8.2.0-rc.0, < 8.2.3",
"status": "affected"
},
{
"version": ">= 8.1.0-rc.0, < 8.1.4",
"status": "affected"
},
{
"version": ">= 8.0.0-rc.0, < 8.0.5",
"status": "affected"
},
{
"version": ">= 7.11.0-rc.0, < 7.13.7",
"status": "affected"
},
{
"version": "< 7.10.11",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N",
"baseScore": 9.1,
"baseSeverity": "CRITICAL",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 3.9,
"impactScore": 5.2
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-06-25T00:00:00+00:00",
"id": "CVE-2026-45688",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "yes"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-943"
}
]
}
],
"references": [
{
"url": "https://github.com/RocketChat/Rocket.Chat/security/advisories/GHSA-rr54-jf4h-6cj9",
"source": "[email protected]"
}
]
}