CVE-2023-42456
sudo-rs Session File Relative Path Traversal vulnerability
Severity Score
Exploit Likelihood
Affected Versions
Public Exploits
0Exploited in Wild
-Decision
Descriptions
Sudo-rs, a memory safe implementation of sudo and su, allows users to not have to enter authentication at every sudo attempt, but instead only requiring authentication every once in a while in every terminal or process group. Only once a configurable timeout has passed will the user have to re-authenticate themselves. Supporting this functionality is a set of session files (timestamps) for each user, stored in `/var/run/sudo-rs/ts`. These files are named according to the username from which the sudo attempt is made (the origin user).
An issue was discovered in versions prior to 0.2.1 where usernames containing the `.` and `/` characters could result in the corruption of specific files on the filesystem. As usernames are generally not limited by the characters they can contain, a username appearing to be a relative path can be constructed. For example we could add a user to the system containing the username `../../../../bin/cp`. When logged in as a user with that name, that user could run `sudo -K` to clear their session record file. The session code then constructs the path to the session file by concatenating the username to the session file storage directory, resulting in a resolved path of `/bin/cp`. The code then clears that file, resulting in the `cp` binary effectively being removed from the system.
An attacker needs to be able to login as a user with a constructed username. Given that such a username is unlikely to exist on an existing system, they will also need to be able to create the users with the constructed usernames.
The issue is patched in version 0.2.1 of sudo-rs. Sudo-rs now uses the uid for the user instead of their username for determining the filename. Note that an upgrade to this version will result in existing session files being ignored and users will be forced to re-authenticate. It also fully eliminates any possibility of path traversal, given that uids are always integer values.
The `sudo -K` and `sudo -k` commands can run, even if a user has no sudo access. As a workaround, make sure that one's system does not contain any users with a specially crafted username. While this is the case and while untrusted users do not have the ability to create arbitrary users on the system, one should not be able to exploit this issue.
Sudo-rs, una implementación segura de memoria de sudo y su, permite a los usuarios no tener que ingresar autenticación en cada intento de sudo, sino que solo requiere autenticación de vez en cuando en cada terminal o grupo de procesos. Solo una vez que haya transcurrido un tiempo de espera configurable, el usuario deberá volver a autenticarse. Esta funcionalidad admite un conjunto de archivos de sesión (marcas de tiempo) para cada usuario, almacenados en `/var/run/sudo-rs/ts`. Estos archivos se nombran según el nombre de usuario desde el que se realiza el intento de sudo (el usuario de origen). Se descubrió un problema en versiones anteriores a la 0.2.1 donde los nombres de usuario que contenían los caracteres `.` y `/` podían provocar la corrupción de archivos específicos en el sistema de archivos. Como los nombres de usuario generalmente no están limitados por los caracteres que pueden contener, se puede construir un nombre de usuario que parezca un Path Traversal. Por ejemplo, podríamos agregar un usuario al sistema que contenga el nombre de usuario `../../../../bin/cp`. Cuando iniciaba sesión como usuario con ese nombre, ese usuario podía ejecutar `sudo -K` para borrar su archivo de registro de sesión. Luego, el código de sesión construye la ruta al archivo de sesión concatenando el nombre de usuario al directorio de almacenamiento del archivo de sesión, lo que da como resultado una ruta resuelta de `/bin/cp`. Luego, el código borra ese archivo, lo que da como resultado que el binario `cp` se elimine efectivamente del sistema. Un atacante debe poder iniciar sesión como usuario con un nombre de usuario construido. Dado que es poco probable que dicho nombre de usuario exista en un sistema existente, también deberán poder crear usuarios con los nombres de usuario creados. El problema se solucionó en la versión 0.2.1 de sudo-rs. Sudo-rs ahora usa el uid del usuario en lugar de su nombre de usuario para determinar el nombre del archivo. Tenga en cuenta que una actualización a esta versión hará que se ignoren los archivos de sesión existentes y los usuarios se verán obligados a volver a autenticarse. También elimina por completo cualquier posibilidad de Path Traversal, dado que los uids son siempre valores enteros. Los comandos `sudo -K` y `sudo -k` se pueden ejecutar, incluso si un usuario no tiene acceso a sudo. Como workaround, asegúrese de que su sistema no contenga ningún usuario con un nombre de usuario especialmente manipulado. Si bien este es el caso y aunque los usuarios que no son de confianza no tienen la capacidad de crear usuarios arbitrarios en el sistema, no se debería poder explotar este problema.
CVSS Scores
SSVC
- Decision:Track
Timeline
- 2023-09-08 CVE Reserved
- 2023-09-21 CVE Published
- 2024-09-24 CVE Updated
- 2024-09-27 EPSS Updated
- ---------- Exploited in Wild
- ---------- KEV Due Date
- ---------- First Exploit
CWE
- CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
- CWE-23: Relative Path Traversal
CAPEC
References (4)
URL | Tag | Source |
---|---|---|
http://www.openwall.com/lists/oss-security/2023/11/02/1 | ||
https://ferrous-systems.com/blog/sudo-rs-audit |
URL | Date | SRC |
---|
URL | Date | SRC |
---|---|---|
https://github.com/memorysafety/sudo-rs/commit/bfdbda22968e3de43fa8246cab1681cfd5d5493d | 2023-11-04 |
URL | Date | SRC |
---|---|---|
https://github.com/memorysafety/sudo-rs/security/advisories/GHSA-2r3c-m6v7-9354 | 2023-11-04 |
Affected Vendors, Products, and Versions
Vendor | Product | Version | Other | Status | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Vendor | Product | Version | Other | Status | <-- --> | Vendor | Product | Version | Other | Status |
Memorysafety Search vendor "Memorysafety" | Sudo Search vendor "Memorysafety" for product "Sudo" | < 0.2.1 Search vendor "Memorysafety" for product "Sudo" and version " < 0.2.1" | rust |
Affected
|