1. Descripción técnica
Una regla de sudo puede parecer limitada a un programa concreto y aun así delegar capacidades equivalentes a una shell, lectura arbitraria o ejecución de procesos. El problema no está en sudo como producto, sino en autorizar una herramienta cuya interfaz permite escapar del propósito previsto. El mismo análisis se aplica a políticas equivalentes de doas: cambia el mecanismo de autorización, pero el programa hijo conserva las capacidades de la identidad objetivo.
La revisión debe abarcar todo el comportamiento alcanzable: subórdenes, editores, pagers, archivos de configuración, plugins, comandos externos, rutas de entrada y programas hijos.
1.1. Mecanismo
// renderizando diagrama…
2. Impacto
La consecuencia puede ser una shell como root, movimiento lateral a otra cuenta o lectura de un archivo protegido. NOPASSWD facilita la explotación, pero una regla peligrosa sigue siéndolo cuando solicita una contraseña que el usuario conoce.
3. Condiciones necesarias
- El usuario puede ejecutar la herramienta con una identidad más privilegiada.
- Los argumentos permitidos alcanzan una función secundaria útil.
- Esa función se ejecuta dentro del proceso privilegiado o crea un hijo que hereda sus credenciales.
- Las restricciones de entorno, ruta y argumentos no bloquean la variante utilizada.
4. Validación y detección
sudo -l muestra reglas efectivas para la cuenta. Cada regla se analiza con la versión instalada y la sintaxis realmente permitida. No se debe asumir que una receta genérica funciona si el patrón de argumentos es distinto.
En administración, las reglas deben probarse como políticas completas. Autorizar un binario por su nombre no limita las operaciones internas que ese binario ofrece.
5. Explotación documentada en los writeups
5.1. Editores, pagers y clientes interactivos
- 012-whitedoor usa
:!en Vim. - 014-darkside ejecuta una herramienta externa desde Nano.
- 019-vivifytech usa el escape del pager invocado por Git.
- 010-literal alcanza
\!en el cliente interactivo de MySQL.
5.2. Subórdenes y configuración
- 008-first carga una configuración de Neofetch con código Bash.
- 011-warrior usa
task executepara iniciar un programa. - 016-method usa
ip netns execcomo lanzador de procesos.
5.3. Lectura y contenido sustituible
- 009-hotel usa
wkhtmltopdf --post-filepara leer y enviar una clave de root. - 013-xmas reemplaza el JAR situado en la ruta autorizada.
5.4. Variante con doas
- 059-decode autoriza
cpcomoajneyay permite instalar unauthorized_keyscontrolado en su home.
6. Mitigación
- Autorizar comandos mínimos diseñados para una sola operación.
- Restringir argumentos y rutas, considerando opciones equivalentes y enlaces.
- Evitar herramientas interactivas, intérpretes, editores y programas con plugins.
- Proteger todos los archivos que el comando privilegiado cargará o ejecutará.
- Aplicar
NOEXECsólo como defensa secundaria, porque no cubre todas las formas de ejecución. - Registrar y revisar periódicamente las reglas efectivas.
7. Clasificación
- CWE relacionada: CWE-250, Execution with Unnecessary Privileges
- Vector: función secundaria de un programa autorizado por
sudo - Impacto: capacidad heredada de la identidad objetivo