Deshabilitar la carga de ficheros en MySQL


Un posible ataque que se puede realizar contra cualquier aplicación web y, por extensión, contra el gestor de base de datos y el sistema donde este corre, son las SQLi. Sí, al sistema operativo, también. ¿Cómo? Pues, aprovechando una SQLi descubierta, intentar descargar ficheros críticos del sistema. Qué ficheros se podrá cargar dependerá del usuario con el que se esté ejecutando el demonio del gestor de base de datos. Es decir, podrá descargar aquellos para los que tenga permisos de lectura (y /etc/passwd lo puede leer cualquier usuario, ¡recuérdalo!)

Para evitar la fuga de información crítica de nuestro sistema, podemos:

  1. Como buena práctica recomendada para todos los servicios, ejecutar el demonio con un usuario con los mínimos permisos necesarios.
  2. Otra buena práctica recomendada: “enjaular el servicio” Con chroot impedir el acceso al sistema de archivos de nuestro sistema.
  3. Y el caso que nos ocupa: Dehabilitar la carga del ficheros en el gestor. Para el caso del MySQL en /etc/mysql/my.cnf, escribiremos

[mysqld]

local-infile=0

secure-file-priv=/dev/null

Si queremos hacerlo solo para determinados usuarios (los que usan nuestra aplicación web para conectarse a la base de datos son unos excelentes candidatos 😉 ), basta con revocar el privilegio file_priv a esos usuarios:

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
    ON [object_type] {tbl_name | * | *.* | db_name.*}
    FROM user [, user] ...
FLUSH PRIVILEGES;

Referencias

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s