Sospecho que un ataque como este funcionaría, donde «algo» es un módulo del núcleo que intentará cargar después de que se monte rootfs:
$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko
Tenga en cuenta también que podría usar otros nombres, dependiendo de los alias declarados en el módulo. Supongo que no se cargará hasta que se ejecute depmod, lo que sucederá la próxima vez que haya una actualización del kernel, por lo que elmkdir
que ni siquiera se mostrará recientemente en el registro de sudo.
Hay muchas cosas en / etc que leen todos los archivos en un directorio, a veces de forma recursiva. Peor aún, algunos de esos directorios no existen por defecto, y la única forma de conocerlos es leer la página de manual, los scripts de inicio, etc. para el programa que los usa. Algunas, peor aún, son cosas obsoletas de compatibilidad con versiones anteriores, y es posible que ya ni siquiera estén documentadas.
editar: Pensé en algunos directorios más, estos en /usr/local
:
/usr/local/lib/perl/5.14.2
(difiere según la versión de Perl, intente perl -V
averiguarlo). Cree un File
subdirectorio allí y póngalo Find.pm
. Ahora, cuando alguien use File::Find
, usará la versión del atacante. Del mismo modo, haz lo mismo con Getopt::Long
. Las utilidades del sistema a menudo se escriben en Perl, por lo que esto probablemente da origen. (Prueba ack-grep --color -a 'use.+::' /usr/sbin | less -R
)
- Creo que Python, Ruby, etc. tienen directorios similares. Las utilidades del sistema también están escritas en Python.
- Subvierte muchas cosas que alguien compila con subdirectorios
/usr/local/include
.