Iconos SCW
héroe bg sin separador
Blog

Los codificadores conquistan la seguridad: serie Share & Learn - NoSQL Injection

Jaap Karan Singh
Publicado el 20 de diciembre de 2018
Última actualización el 6 de marzo de 2026

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Ver recurso
Ver recurso

Las bases de datos NoSQL son cada vez más populares. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, pero a medida que su uso se generaliza, inevitablemente salen a la luz más vulnerabilidades.

¿Interesado en más?

Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.

Más información

Secure Code Warrior aquí para que su organización le ayude a proteger el código durante todo el ciclo de vida del desarrollo de software y a crear una cultura en la que la ciberseguridad sea una prioridad. Ya sea administrador de AppSec, desarrollador, CISO o cualquier persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados con el código inseguro.

Reserve una demostración
Comparte en:
marcas de LinkedInSocialx logotipo
autor
Jaap Karan Singh
Publicado el 20 de diciembre de 2018

Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.

Comparte en:
marcas de LinkedInSocialx logotipo

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Ver recurso
Ver recurso

Rellene el siguiente formulario para descargar el informe.

Nos gustaría recibir su permiso para enviarle información sobre nuestros productos o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Icono de éxito de SCW
Icono de error scw
Para enviar el formulario, habilite las cookies de «análisis». No dudes en volver a desactivarlas una vez que hayas terminado.

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Ver seminario web
Comenzar
Más información

Haga clic en el enlace de abajo y descargue el PDF de este recurso.

Secure Code Warrior aquí para que su organización le ayude a proteger el código durante todo el ciclo de vida del desarrollo de software y a crear una cultura en la que la ciberseguridad sea una prioridad. Ya sea administrador de AppSec, desarrollador, CISO o cualquier persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados con el código inseguro.

Ver informeReserve una demostración
Ver recurso
Comparte en:
marcas de LinkedInSocialx logotipo
¿Interesado en más?

Comparte en:
marcas de LinkedInSocialx logotipo
autor
Jaap Karan Singh
Publicado el 20 de diciembre de 2018

Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.

Comparte en:
marcas de LinkedInSocialx logotipo

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Tabla de contenido

Descargar PDF
Ver recurso
¿Interesado en más?

Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.

Más información

Secure Code Warrior aquí para que su organización le ayude a proteger el código durante todo el ciclo de vida del desarrollo de software y a crear una cultura en la que la ciberseguridad sea una prioridad. Ya sea administrador de AppSec, desarrollador, CISO o cualquier persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados con el código inseguro.

Reserve una demostraciónDescargar
Comparte en:
marcas de LinkedInSocialx logotipo
Centro de recursos

Recursos para empezar

Más publicaciones
Centro de recursos

Recursos para empezar

Más publicaciones