Vulnerabilidades de MySQL

Estamos viviendo en una era digital, a medida que Internet y la tecnología se expanden y se vuelven más y más populares cada día que pasa, también lo son los delitos que se cometen en ella. En los últimos años, los ciberdelitos contra empresas o en general han crecido significativamente. Estos ciberdelincuentes maliciosos se aprovechan de los sistemas defectuosos o mal diseñados que utilizan estas empresas para obtener ganancias monetarias propias mediante la venta de datos, Ransom o por cualquier otro medio; o por mancillar el nombre de la empresa y su reputación. El sistema de administración de bases de datos relacionales MySQL se encuentra entre uno de los RDBMS de código abierto más populares en uso actualmente, el propósito principal de usarlo es almacenar los datos para servidores web o sitios web. La mayoría de los servidores web actualmente populares y también los marcos utilizan MySQL como su base de datos preferida.  

1. Inyección SQL: es uno de los ataques más comunes y peligrosos; en este tipo de ataque, los atacantes roban información o fomentan la pérdida de datos al atacar la base de datos. Básicamente, es un ataque de tipo inyección en el que el atacante ejecuta consultas SQL maliciosas que podrían tener varias implicaciones graves, como la pérdida de datos o incluso el robo de datos.  

La mayoría de las inyecciones de SQL se llevan a cabo en aplicaciones web. Los atacantes hacen uso de algunas lagunas y vulnerabilidades conocidas para apuntar a la aplicación mediante vulnerabilidades de inyección SQL principalmente para eludir el proceso de autenticación y la seguridad de la aplicación o para causar algún daño a la base de datos.  

Después de realizar un ataque exitoso, el usuario malintencionado puede acceder a las secciones autorizadas y autenticadas de los servidores web y las aplicaciones, y también puede modificar, agregar o eliminar los datos y también puede recuperar los registros.

Tomemos un ejemplo de una situación en la que intentamos autenticar a un usuario en alguna aplicación. Para hacer eso, primero tendríamos que enviar o ingresar las credenciales de inicio de sesión del usuario para fines de autenticación.    

Después de ingresar las credenciales, la aplicación generará una consulta SQL a continuación para verificar si el usuario con las credenciales ingresadas ya existe o no. Consulta:

SELECT * FROM utable WHERE username = “UserName001”
 AND password = “user1_password”

Este fue el caso de un usuario normal. Ahora, ¿qué pasa si un atacante está tratando de explotar el sistema? Podría ingresar la contraseña como «‘*’ O ‘1’ = ‘1’» y cuando la aplicación genere su consulta se verá así:

Consulta:

SELECT * FROM utable WHERE username = “UserName001” 
AND password = ‘*’ OR ‘1’ = ’1’.

Por lo tanto, siempre que el sistema ejecute esta consulta, siempre dará como resultado verdadero y la aplicación cree que la contraseña es correcta. En esta consulta, la primera parte buscará al usuario con nombre de usuario «UserName001» con la contraseña «*» y no dará ningún resultado o lo descartará como falso. Aquí es donde entra en juego la segunda parte de la consulta, aquí la contraseña siempre resultará verdadera. La aplicación dejará pasar la consulta y, por lo tanto, el usuario malintencionado podrá eludir la autenticación. De manera similar, el atacante también puede modificar, agregar, eliminar o recuperar los datos a su antojo. Sin embargo, esto se puede eludir mediante el uso de consultas parametrizadas/instrucciones SQL preparadas o desinfectando las entradas del usuario, antes de que la aplicación genere la consulta para las entradas proporcionadas.  

2. Validación de entrada incorrecta: la validación de entrada incorrecta es un tipo de ataque peligroso en el que un usuario malintencionado lleva a cabo un ataque a servidores web o sus instancias, como MySQL. Estos ataques se utilizan para hacer que las instancias, los servicios o los recursos de la red sean inaccesibles momentáneamente o incluso de forma permanente al interrumpir el host, el sistema o la instancia a la que está conectado. En MySQL, puede hacer que la instancia de MySQL se bloquee y, por lo tanto, quede momentáneamente inaccesible para cualquiera de los servicios que la utilizan como fuente de datos.  

El otro problema con este tipo de vulnerabilidad es que permite a los usuarios remotos autenticados provocar un ataque DoS mediante el uso de una declaración SELECT diseñada junto con un comando UpdateXML() con muchos elementos anidados únicos. El resultado de esto es un MySQL más susceptible a la vulnerabilidad DoS. Un atacante podría explotar esta falla para eliminar toda la base de datos y sus instancias, inutilizando otros servicios y haciéndolos inaccesibles para el usuario.  

La carga útil junto con los comandos que se pueden usar en este escenario es la siguiente:

Sintaxis:

$mysql->query("SELECT UpdateXML('<a>$a<b>ccc</b>
<d></d></a>', '/a', '<e>fff</e>') AS val1");

Para evitar esta vulnerabilidad, se pueden usar las versiones actualizadas de MySQL donde se ha parcheado este exploit, la versión 5.5.* y superiores están libres de esta vulnerabilidad.

3. Ejecución simultánea utilizando recursos compartidos con sincronización incorrecta o condición de carrera: la ejecución simultánea utilizando recursos compartidos con sincronización incorrecta es una condición no deseada que ocurre cuando un sistema intenta ejecutar dos o más de dos operaciones al mismo tiempo, aunque en la mayoría del sistema el las operaciones se realizan en el orden o momento correcto debido a los eventos no controlados para asegurarse de que las operaciones se realicen de manera efectiva.  

En MySQL, esto puede dar lugar a una condición de carrera, que puede considerarse un problema grave. Permite que un usuario local acceda a la base de datos y, después de eso, puede usar la escalada de privilegios o escalar sus privilegios de usuario y, después de cambiar sus privilegios de usuario, puede llevar a cabo un ataque de ejecución de código arbitrario como usuario local de la base de datos. Esta ejecución concurrente problemática utilizando recursos compartidos con una condición de sincronización incorrecta está presente en las versiones de MySQL anteriores a la versión 5.5.51, 5.6.xa 5.6.32, 5.7.xa 5.7.14 y 8.xa 8.0.0; MariaDB también se ve afectada por esta condición Versiones de MariaDB anteriores a la versión 5.5.52, 10.0.x a 10.0.27 y 10.1.x a 10.1.17. Los atacantes pueden usar esta vulnerabilidad a su favor al explotarla y eludir las restricciones de seguridad impuestas para ejecutar comandos no autorizados y arbitrarios. Esto, a su vez, podría usarse como plataforma de lanzamiento para otros ataques. Aunque ahora esta vulnerabilidad ha sido parcheada en las versiones vulnerables.

4. Permisos, privilegios y controles de acceso: es una vulnerabilidad antigua que ahora ha sido reparada. Esta vulnerabilidad permitió a los usuarios maliciosos anular el archivo de configuración de MySQL con numerosas configuraciones, por lo que estas configuraciones podrían implementarse la próxima vez que se inicie MySQL.  

5. Inyección de DNS en ghost: esta vulnerabilidad estaba presente en las versiones de ghost (una herramienta de migración de esquemas sin activación para MySQL) anteriores a la versión 1.1.3 que tenían vulnerabilidades de cruce de ruta de archivo o de directorio. Para explotarlo, el atacante debe tener acceso al host de destino o debe engañar al administrador para que ejecute un comando fantasma diseñado en el host que ejecuta el fantasma junto con el acceso a la red desde el host de destino que ejecuta el fantasma al malicioso ataque. servidor mysql El parámetro -database también se debe desinfectar adecuadamente para evitar esto.  

Si el código es vulnerable, se podría diseñar y utilizar un comando como el siguiente para explotar esta vulnerabilidad.

Sintaxis:

./gh-ost -user test -password -test -alter
 test -table test -database “test?allowAllFiles=true&”    

Publicación traducida automáticamente

Artículo escrito por kmbh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *