CVE-2025-27089

Directus is a real-time API and App dashboard for managing SQL database content. In affected versions if there are two overlapping policies for the `update` action that allow access to different fields, instead of correctly checking access permissions against the item they apply for the user is allowed to update the superset of fields allowed by any of the policies. E.g. have one policy allowing update access to `field_a` if the `id == 1` and one policy allowing update access to `field_b` if the `id == 2`. The user with both these policies is allowed to update both `field_a` and `field_b` for the items with ids `1` and `2`. Before v11, if a user was allowed to update an item they were allowed to update the fields that the single permission, that applied to that item, listed. With overlapping permissions this isn't as clear cut anymore and the union of fields might not be the fields the user is allowed to update for that specific item. The solution that this PR introduces is to evaluate the permissions for each field that the user tries to update in the validateItemAccess DB query, instead of only verifying access to the item as a whole. This is done by, instead of returning the actual field value, returning a flag that indicates if the user has access to that field. This uses the same case/when mechanism that is used for stripping out non permitted field that is at the core of the permissions engine. As a result, for every item that the access is validated for, the expected result is an item that has either 1 or null for all the "requested" fields instead of any of the actual field values. These results are not useful for anything other than verifying the field level access permissions. The final check in validateItemAccess can either fail if the number of items does not match the number of items the access is checked for (ie. the user does not have access to the item at all) or if not all of the passed in fields have access permissions for any of the returned items. This is a vulnerability that allows update access to unintended fields, potentially impacting the password field for user accounts. This has been addressed in version 11.1.2 and all users are advised to upgrade. There are no known workarounds for this vulnerability.
Configurations

Configuration 1 (hide)

cpe:2.3:a:monospace:directus:*:*:*:*:*:node.js:*:*

History

27 Feb 2025, 20:18

Type Values Removed Values Added
CPE cpe:2.3:a:monospace:directus:*:*:*:*:*:node.js:*:*
References () https://github.com/directus/directus/releases/tag/v11.1.2 - () https://github.com/directus/directus/releases/tag/v11.1.2 - Release Notes
References () https://github.com/directus/directus/security/advisories/GHSA-99vm-5v2h-h6r6 - () https://github.com/directus/directus/security/advisories/GHSA-99vm-5v2h-h6r6 - Vendor Advisory
First Time Monospace
Monospace directus
Summary
  • (es) Directus es un tablero de API y aplicaciones en tiempo real para administrar el contenido de la base de datos SQL. En las versiones afectadas, si hay dos políticas superpuestas para la acción `` `update'' que permiten el acceso a diferentes campos, en lugar de verificar correctamente los permisos de acceso contra el elemento que solicitan para el usuario puede actualizar el superconjunto de campos permitidos por cualquiera de las políticas. Por ejemplo: Tenga una política que permita actualizar el acceso a `field_a` si el` id == 1` y una política que permite el acceso de actualización a `field_b` si el` id == 2`. El usuario con ambas políticas puede actualizar tanto `Field_A` y` Field_B` para los elementos con IDS `1` y` 2`. Antes de V11, si a un usuario se le permitía actualizar un elemento, se le permitía actualizar los campos que el permiso único, que se aplicaba a ese elemento, enumeró. Con los permisos superpuestos, esto ya no es tan claro y la unión de los campos podría no ser los campos que el usuario puede actualizar para ese elemento específico. La solución que introduce este PR es evaluar los permisos para cada campo que el usuario intenta actualizar en la consulta DB de ValidateItemAccess, en lugar de verificar solo el acceso al elemento en su conjunto. Esto se hace, en lugar de devolver el valor de campo real, devolver un indicador que indica si el usuario tiene acceso a ese campo. Esto utiliza el mismo mecanismo de caso/cuando se utiliza para eliminar el campo no permitido que esté en el núcleo del motor de permisos. Como resultado, para cada elemento para el que se valida el acceso, el resultado esperado es un elemento que tiene 1 o NULL para todos los campos "solicitados" en lugar de cualquiera de los valores de campo reales. Estos resultados no son útiles para nada más que verificar los permisos de acceso a nivel de campo. La comprobación final de ValidateItemAccess puede fallar si el número de elementos no coincide con el número de elementos para el que se verifica el acceso (es decir, el usuario no tiene acceso al elemento) o si no todos los campos pasados ??tienen Permisos de acceso para cualquiera de los artículos devueltos. Esta es una vulnerabilidad que permite actualizar el acceso a los campos no deseados, lo que puede impactar el campo de contraseña para las cuentas de los usuarios. Esto se ha abordado en la versión 11.1.2 y se recomienda a todos los usuarios que actualicen. No se conocen workarounds para esta vulnerabilidad.

19 Feb 2025, 17:15

Type Values Removed Values Added
New CVE

Information

Published : 2025-02-19 17:15

Updated : 2025-02-27 20:18


NVD link : CVE-2025-27089

Mitre link : CVE-2025-27089

CVE.ORG link : CVE-2025-27089


JSON object : View

Products Affected

monospace

  • directus
CWE
CWE-863

Incorrect Authorization