Coders Conquer Security: Share & Learn Series - Inyección NoSQL
Las bases de datos NoSQL son cada vez más populares. Es difícil negar su velocidad y facilidad para tratar datos no estructurados, especialmente con equipos de desarrollo que trabajan con metodologías cada vez más ágiles.
Los desarrolladores tardan en eliminar las vulnerabilidades y otros problemas de la tecnología emergente. Sólo cuando se ha utilizado durante algún tiempo en aplicaciones de producción, los problemas empiezan a salir a la superficie.
Las bases de datos NoSQL son similares. Hay riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de estos riesgos es la inyección NoSQL.
Veamos qué es la inyección NoSQL, qué daños puede causar y cómo solucionarla:
Entender la inyección NoSQL
La inyección NoSQL es causada por muchas de las mismas vulnerabilidades de inyección como la inyección XML o SQL.
La inyección NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta 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 a menudo toman funciones o tienen operadores incorporados que pueden ser manipulados para robar o cambiar datos. Y cuando algo así se ejecuta con intención maliciosa, las consecuencias pueden ser nefastas.
Las bases de datos MongoDB son uno de los terrenos de juego más populares para explotar esta vulnerabilidad. "$ne: ""'es el operador equivalente a 1=1 en el mundo 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 NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no sean iguales a una cadena vacía. En otras palabras: todos. Vaya.
Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y las contraseñas de cada uno de los usuarios que la componen. Esto incluye los nombres de usuario y las contraseñas de los administradores, dándoles un pase de acceso a toda la base de datos.
Los atacantes a menudo tratan de pasar valores que siempre son verdaderos. Otro ataque común es inyectar código malicioso en las propiedades que se establecen en las funciones.
Por ejemplo, MongoDB utiliza una función find 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 una inyección NoSQL esté al acecho.
Para conocer con detalle los entresijos de la inyección NoSQL, consulte este artículo de InfoQ.
Sepa por qué la inyección NoSQL es peligrosa
La inyección NoSQL es peligrosa sobre todo porque todavía no ha recibido el escrutinio de la comunidad de seguridad que merece.
Los impactos de la inyección NoSQL son muy parecidos a los de la inyección SQL tradicional. Los datos pueden ser robados o modificados, las cuentas pueden verse comprometidas por el robo de datos y, tal vez lo más cruel, los datos podrían ser completamente borrados si se emite con éxito un comando de borrado.
La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. "No SQL" no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y corriendo la voz. Es necesario que más desarrolladores se eduquen para poder proteger sus aplicaciones de peligros poco conocidos que pueden convertirse en un gran dolor de cabeza si son explotados.
Derrotar la inyección NoSQL
La inyección NoSQL puede ser difícil de vencer. Por desgracia, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:
- Los fuzzers pueden utilizarse como un método para detectar vulnerabilidades. Aunque, como ocurre con muchas cosas en la vida, el enfoque más sencillo puede ser el más eficaz. En este caso, la vieja revisión de código es tu mejor aliado.
- Cuando revise el código, busque posibles lugares donde 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 convertir la entrada del usuario a su clase correcta. Si es un número, cámbialo a un número, si es una cadena, cámbialo a una cadena y así sucesivamente.
- Nunca utilice $where o funciones eval similares junto con la entrada del usuario. En la mayoría de los casos, se puede evitar cambiando el modelo de datos o el esquema.
- Prueba a utilizar Mongoose como tu controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si le dices a Mongoose que tus entradas son cadenas, se convertirán en cadenas. Así, cualquier objeto pasado por un atacante no será tratado como objeto, sino como cadena.
- Endurezca su 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 aplicables a su organización.
Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a montarlas y empezar a utilizarlas sin pensar en la seguridad.
Es esencial que te tomes el tiempo necesario para aprender a levantar de forma segura una base de datos NoSQL y protegerte de las inyecciones NoSQL.
Por ejemplo, MongoDB Enterprise Edition tiene capacidades 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 encuentre una vulnerabilidad en tu aplicación.
En resumen, esto es lo que tenemos:
- Sanear la entrada antes de utilizarla en una expresión de consulta NoSQL
- Utiliza controladores que te ayuden, como Mongoose
- Realización de revisiones de código que examinen específicamente cómo se utilizan los datos de entrada en las consultas
- Utilice fuzzers y escáneres para tratar de ayudar a encontrar vulnerabilidades en su código.
NoSQL no es sin inyecciones
Las bases de datos NoSQL están ganando rápidamente popularidad debido a sus características de escalabilidad y a la velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar las bases de datos NoSQL sin pensar en cómo asegurarlas.
Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúa con precaución y presta atención a tus consultas. Si quieres saber más, echa un vistazo a nuestros recursos de aprendizaje o pon a prueba tus habilidades con nuestra demo gratuita.
Prepárese con antelación y no tendrá que preocuparse por las inyecciones NoSQL en sus aplicaciones. Demasiado fácil!
¿Crees que estás preparado para localizar, identificar y arreglar la inyección NoSQL ahora mismo? Entra en el terreno del código seguro, guerrero:
Y con esto terminamos el 2018! Este será nuestro último post del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. Nos vemos pronto!
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 afloran más vulnerabilidades.
Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónJaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Las bases de datos NoSQL son cada vez más populares. Es difícil negar su velocidad y facilidad para tratar datos no estructurados, especialmente con equipos de desarrollo que trabajan con metodologías cada vez más ágiles.
Los desarrolladores tardan en eliminar las vulnerabilidades y otros problemas de la tecnología emergente. Sólo cuando se ha utilizado durante algún tiempo en aplicaciones de producción, los problemas empiezan a salir a la superficie.
Las bases de datos NoSQL son similares. Hay riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de estos riesgos es la inyección NoSQL.
Veamos qué es la inyección NoSQL, qué daños puede causar y cómo solucionarla:
Entender la inyección NoSQL
La inyección NoSQL es causada por muchas de las mismas vulnerabilidades de inyección como la inyección XML o SQL.
La inyección NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta 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 a menudo toman funciones o tienen operadores incorporados que pueden ser manipulados para robar o cambiar datos. Y cuando algo así se ejecuta con intención maliciosa, las consecuencias pueden ser nefastas.
Las bases de datos MongoDB son uno de los terrenos de juego más populares para explotar esta vulnerabilidad. "$ne: ""'es el operador equivalente a 1=1 en el mundo 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 NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no sean iguales a una cadena vacía. En otras palabras: todos. Vaya.
Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y las contraseñas de cada uno de los usuarios que la componen. Esto incluye los nombres de usuario y las contraseñas de los administradores, dándoles un pase de acceso a toda la base de datos.
Los atacantes a menudo tratan de pasar valores que siempre son verdaderos. Otro ataque común es inyectar código malicioso en las propiedades que se establecen en las funciones.
Por ejemplo, MongoDB utiliza una función find 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 una inyección NoSQL esté al acecho.
Para conocer con detalle los entresijos de la inyección NoSQL, consulte este artículo de InfoQ.
Sepa por qué la inyección NoSQL es peligrosa
La inyección NoSQL es peligrosa sobre todo porque todavía no ha recibido el escrutinio de la comunidad de seguridad que merece.
Los impactos de la inyección NoSQL son muy parecidos a los de la inyección SQL tradicional. Los datos pueden ser robados o modificados, las cuentas pueden verse comprometidas por el robo de datos y, tal vez lo más cruel, los datos podrían ser completamente borrados si se emite con éxito un comando de borrado.
La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. "No SQL" no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y corriendo la voz. Es necesario que más desarrolladores se eduquen para poder proteger sus aplicaciones de peligros poco conocidos que pueden convertirse en un gran dolor de cabeza si son explotados.
Derrotar la inyección NoSQL
La inyección NoSQL puede ser difícil de vencer. Por desgracia, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:
- Los fuzzers pueden utilizarse como un método para detectar vulnerabilidades. Aunque, como ocurre con muchas cosas en la vida, el enfoque más sencillo puede ser el más eficaz. En este caso, la vieja revisión de código es tu mejor aliado.
- Cuando revise el código, busque posibles lugares donde 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 convertir la entrada del usuario a su clase correcta. Si es un número, cámbialo a un número, si es una cadena, cámbialo a una cadena y así sucesivamente.
- Nunca utilice $where o funciones eval similares junto con la entrada del usuario. En la mayoría de los casos, se puede evitar cambiando el modelo de datos o el esquema.
- Prueba a utilizar Mongoose como tu controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si le dices a Mongoose que tus entradas son cadenas, se convertirán en cadenas. Así, cualquier objeto pasado por un atacante no será tratado como objeto, sino como cadena.
- Endurezca su 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 aplicables a su organización.
Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a montarlas y empezar a utilizarlas sin pensar en la seguridad.
Es esencial que te tomes el tiempo necesario para aprender a levantar de forma segura una base de datos NoSQL y protegerte de las inyecciones NoSQL.
Por ejemplo, MongoDB Enterprise Edition tiene capacidades 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 encuentre una vulnerabilidad en tu aplicación.
En resumen, esto es lo que tenemos:
- Sanear la entrada antes de utilizarla en una expresión de consulta NoSQL
- Utiliza controladores que te ayuden, como Mongoose
- Realización de revisiones de código que examinen específicamente cómo se utilizan los datos de entrada en las consultas
- Utilice fuzzers y escáneres para tratar de ayudar a encontrar vulnerabilidades en su código.
NoSQL no es sin inyecciones
Las bases de datos NoSQL están ganando rápidamente popularidad debido a sus características de escalabilidad y a la velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar las bases de datos NoSQL sin pensar en cómo asegurarlas.
Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúa con precaución y presta atención a tus consultas. Si quieres saber más, echa un vistazo a nuestros recursos de aprendizaje o pon a prueba tus habilidades con nuestra demo gratuita.
Prepárese con antelación y no tendrá que preocuparse por las inyecciones NoSQL en sus aplicaciones. Demasiado fácil!
¿Crees que estás preparado para localizar, identificar y arreglar la inyección NoSQL ahora mismo? Entra en el terreno del código seguro, guerrero:
Y con esto terminamos el 2018! Este será nuestro último post del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. Nos vemos pronto!
Las bases de datos NoSQL son cada vez más populares. Es difícil negar su velocidad y facilidad para tratar datos no estructurados, especialmente con equipos de desarrollo que trabajan con metodologías cada vez más ágiles.
Los desarrolladores tardan en eliminar las vulnerabilidades y otros problemas de la tecnología emergente. Sólo cuando se ha utilizado durante algún tiempo en aplicaciones de producción, los problemas empiezan a salir a la superficie.
Las bases de datos NoSQL son similares. Hay riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de estos riesgos es la inyección NoSQL.
Veamos qué es la inyección NoSQL, qué daños puede causar y cómo solucionarla:
Entender la inyección NoSQL
La inyección NoSQL es causada por muchas de las mismas vulnerabilidades de inyección como la inyección XML o SQL.
La inyección NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta 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 a menudo toman funciones o tienen operadores incorporados que pueden ser manipulados para robar o cambiar datos. Y cuando algo así se ejecuta con intención maliciosa, las consecuencias pueden ser nefastas.
Las bases de datos MongoDB son uno de los terrenos de juego más populares para explotar esta vulnerabilidad. "$ne: ""'es el operador equivalente a 1=1 en el mundo 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 NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no sean iguales a una cadena vacía. En otras palabras: todos. Vaya.
Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y las contraseñas de cada uno de los usuarios que la componen. Esto incluye los nombres de usuario y las contraseñas de los administradores, dándoles un pase de acceso a toda la base de datos.
Los atacantes a menudo tratan de pasar valores que siempre son verdaderos. Otro ataque común es inyectar código malicioso en las propiedades que se establecen en las funciones.
Por ejemplo, MongoDB utiliza una función find 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 una inyección NoSQL esté al acecho.
Para conocer con detalle los entresijos de la inyección NoSQL, consulte este artículo de InfoQ.
Sepa por qué la inyección NoSQL es peligrosa
La inyección NoSQL es peligrosa sobre todo porque todavía no ha recibido el escrutinio de la comunidad de seguridad que merece.
Los impactos de la inyección NoSQL son muy parecidos a los de la inyección SQL tradicional. Los datos pueden ser robados o modificados, las cuentas pueden verse comprometidas por el robo de datos y, tal vez lo más cruel, los datos podrían ser completamente borrados si se emite con éxito un comando de borrado.
La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. "No SQL" no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y corriendo la voz. Es necesario que más desarrolladores se eduquen para poder proteger sus aplicaciones de peligros poco conocidos que pueden convertirse en un gran dolor de cabeza si son explotados.
Derrotar la inyección NoSQL
La inyección NoSQL puede ser difícil de vencer. Por desgracia, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:
- Los fuzzers pueden utilizarse como un método para detectar vulnerabilidades. Aunque, como ocurre con muchas cosas en la vida, el enfoque más sencillo puede ser el más eficaz. En este caso, la vieja revisión de código es tu mejor aliado.
- Cuando revise el código, busque posibles lugares donde 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 convertir la entrada del usuario a su clase correcta. Si es un número, cámbialo a un número, si es una cadena, cámbialo a una cadena y así sucesivamente.
- Nunca utilice $where o funciones eval similares junto con la entrada del usuario. En la mayoría de los casos, se puede evitar cambiando el modelo de datos o el esquema.
- Prueba a utilizar Mongoose como tu controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si le dices a Mongoose que tus entradas son cadenas, se convertirán en cadenas. Así, cualquier objeto pasado por un atacante no será tratado como objeto, sino como cadena.
- Endurezca su 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 aplicables a su organización.
Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a montarlas y empezar a utilizarlas sin pensar en la seguridad.
Es esencial que te tomes el tiempo necesario para aprender a levantar de forma segura una base de datos NoSQL y protegerte de las inyecciones NoSQL.
Por ejemplo, MongoDB Enterprise Edition tiene capacidades 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 encuentre una vulnerabilidad en tu aplicación.
En resumen, esto es lo que tenemos:
- Sanear la entrada antes de utilizarla en una expresión de consulta NoSQL
- Utiliza controladores que te ayuden, como Mongoose
- Realización de revisiones de código que examinen específicamente cómo se utilizan los datos de entrada en las consultas
- Utilice fuzzers y escáneres para tratar de ayudar a encontrar vulnerabilidades en su código.
NoSQL no es sin inyecciones
Las bases de datos NoSQL están ganando rápidamente popularidad debido a sus características de escalabilidad y a la velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar las bases de datos NoSQL sin pensar en cómo asegurarlas.
Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúa con precaución y presta atención a tus consultas. Si quieres saber más, echa un vistazo a nuestros recursos de aprendizaje o pon a prueba tus habilidades con nuestra demo gratuita.
Prepárese con antelación y no tendrá que preocuparse por las inyecciones NoSQL en sus aplicaciones. Demasiado fácil!
¿Crees que estás preparado para localizar, identificar y arreglar la inyección NoSQL ahora mismo? Entra en el terreno del código seguro, guerrero:
Y con esto terminamos el 2018! Este será nuestro último post del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. Nos vemos pronto!
Haga clic en el siguiente enlace y descargue el PDF de este recurso.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Ver el informeReservar una demostraciónJaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Las bases de datos NoSQL son cada vez más populares. Es difícil negar su velocidad y facilidad para tratar datos no estructurados, especialmente con equipos de desarrollo que trabajan con metodologías cada vez más ágiles.
Los desarrolladores tardan en eliminar las vulnerabilidades y otros problemas de la tecnología emergente. Sólo cuando se ha utilizado durante algún tiempo en aplicaciones de producción, los problemas empiezan a salir a la superficie.
Las bases de datos NoSQL son similares. Hay riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de estos riesgos es la inyección NoSQL.
Veamos qué es la inyección NoSQL, qué daños puede causar y cómo solucionarla:
Entender la inyección NoSQL
La inyección NoSQL es causada por muchas de las mismas vulnerabilidades de inyección como la inyección XML o SQL.
La inyección NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta 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 a menudo toman funciones o tienen operadores incorporados que pueden ser manipulados para robar o cambiar datos. Y cuando algo así se ejecuta con intención maliciosa, las consecuencias pueden ser nefastas.
Las bases de datos MongoDB son uno de los terrenos de juego más populares para explotar esta vulnerabilidad. "$ne: ""'es el operador equivalente a 1=1 en el mundo 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 NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no sean iguales a una cadena vacía. En otras palabras: todos. Vaya.
Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y las contraseñas de cada uno de los usuarios que la componen. Esto incluye los nombres de usuario y las contraseñas de los administradores, dándoles un pase de acceso a toda la base de datos.
Los atacantes a menudo tratan de pasar valores que siempre son verdaderos. Otro ataque común es inyectar código malicioso en las propiedades que se establecen en las funciones.
Por ejemplo, MongoDB utiliza una función find 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 una inyección NoSQL esté al acecho.
Para conocer con detalle los entresijos de la inyección NoSQL, consulte este artículo de InfoQ.
Sepa por qué la inyección NoSQL es peligrosa
La inyección NoSQL es peligrosa sobre todo porque todavía no ha recibido el escrutinio de la comunidad de seguridad que merece.
Los impactos de la inyección NoSQL son muy parecidos a los de la inyección SQL tradicional. Los datos pueden ser robados o modificados, las cuentas pueden verse comprometidas por el robo de datos y, tal vez lo más cruel, los datos podrían ser completamente borrados si se emite con éxito un comando de borrado.
La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. "No SQL" no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y corriendo la voz. Es necesario que más desarrolladores se eduquen para poder proteger sus aplicaciones de peligros poco conocidos que pueden convertirse en un gran dolor de cabeza si son explotados.
Derrotar la inyección NoSQL
La inyección NoSQL puede ser difícil de vencer. Por desgracia, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:
- Los fuzzers pueden utilizarse como un método para detectar vulnerabilidades. Aunque, como ocurre con muchas cosas en la vida, el enfoque más sencillo puede ser el más eficaz. En este caso, la vieja revisión de código es tu mejor aliado.
- Cuando revise el código, busque posibles lugares donde 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 convertir la entrada del usuario a su clase correcta. Si es un número, cámbialo a un número, si es una cadena, cámbialo a una cadena y así sucesivamente.
- Nunca utilice $where o funciones eval similares junto con la entrada del usuario. En la mayoría de los casos, se puede evitar cambiando el modelo de datos o el esquema.
- Prueba a utilizar Mongoose como tu controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si le dices a Mongoose que tus entradas son cadenas, se convertirán en cadenas. Así, cualquier objeto pasado por un atacante no será tratado como objeto, sino como cadena.
- Endurezca su 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 aplicables a su organización.
Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a montarlas y empezar a utilizarlas sin pensar en la seguridad.
Es esencial que te tomes el tiempo necesario para aprender a levantar de forma segura una base de datos NoSQL y protegerte de las inyecciones NoSQL.
Por ejemplo, MongoDB Enterprise Edition tiene capacidades 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 encuentre una vulnerabilidad en tu aplicación.
En resumen, esto es lo que tenemos:
- Sanear la entrada antes de utilizarla en una expresión de consulta NoSQL
- Utiliza controladores que te ayuden, como Mongoose
- Realización de revisiones de código que examinen específicamente cómo se utilizan los datos de entrada en las consultas
- Utilice fuzzers y escáneres para tratar de ayudar a encontrar vulnerabilidades en su código.
NoSQL no es sin inyecciones
Las bases de datos NoSQL están ganando rápidamente popularidad debido a sus características de escalabilidad y a la velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar las bases de datos NoSQL sin pensar en cómo asegurarlas.
Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúa con precaución y presta atención a tus consultas. Si quieres saber más, echa un vistazo a nuestros recursos de aprendizaje o pon a prueba tus habilidades con nuestra demo gratuita.
Prepárese con antelación y no tendrá que preocuparse por las inyecciones NoSQL en sus aplicaciones. Demasiado fácil!
¿Crees que estás preparado para localizar, identificar y arreglar la inyección NoSQL ahora mismo? Entra en el terreno del código seguro, guerrero:
Y con esto terminamos el 2018! Este será nuestro último post del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. Nos vemos pronto!
Índice
Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónDescargarRecursos para empezar
Evaluación comparativa de las competencias en materia de seguridad: optimización del diseño seguro en la empresa
El movimiento Secure-by-Design es el futuro del desarrollo de software seguro. Conozca los elementos clave que las empresas deben tener en cuenta cuando piensan en una iniciativa Secure-by-Design.
DigitalOcean reduce su deuda de seguridad con Secure Code Warrior
El uso por parte de DigitalOcean de la formación Secure Code Warrior ha reducido significativamente la deuda de seguridad, permitiendo a los equipos centrarse más en la innovación y la productividad. La mejora de la seguridad ha reforzado la calidad de sus productos y su ventaja competitiva. De cara al futuro, SCW Trust Score les ayudará a seguir mejorando las prácticas de seguridad y a continuar impulsando la innovación.
Recursos para empezar
La puntuación de confianza revela el valor de las iniciativas de mejora de la seguridad mediante el diseño
Nuestra investigación ha demostrado que la formación en código seguro funciona. Trust Score, que utiliza un algoritmo basado en más de 20 millones de puntos de datos de aprendizaje procedentes del trabajo de más de 250 000 alumnos en más de 600 organizaciones, revela su eficacia a la hora de reducir las vulnerabilidades y cómo hacer que la iniciativa sea aún más eficaz.
Seguridad reactiva frente a seguridad preventiva: Prevenir es mejor que curar
La idea de introducir la seguridad preventiva en el código y los sistemas heredados al mismo tiempo que en las aplicaciones más recientes puede parecer desalentadora, pero un planteamiento basado en el diseño seguro, aplicado mediante la mejora de las competencias de los desarrolladores, puede aplicar las mejores prácticas de seguridad a esos sistemas. Es la mejor oportunidad que tienen muchas organizaciones de mejorar su seguridad.
Ventajas de la evaluación comparativa de las competencias de seguridad de los desarrolladores
La creciente atención que se presta al código seguro y a los principios del diseño seguro exige que los desarrolladores reciban formación en ciberseguridad desde el principio del proceso de desarrollo de software, con herramientas como Secure Code Warrior's Trust Score, que ayudan a medir y mejorar sus progresos.
Impulsando iniciativas de seguridad por diseño para empresas con éxito significativo
Nuestro último documento de investigación, Benchmarking Security Skills: Streamlining Secure-by-Design in the Enterprise, es el resultado de un análisis profundo de iniciativas reales de Secure-by-Design a nivel empresarial y de la derivación de enfoques de mejores prácticas basados en hallazgos basados en datos.