Coders Conquer Security: Serie de aprendizaje y colaboración - Inyección NoSQL

Las bases de datos NoSQL son cada vez más populares. Es difícil negar su velocidad y facilidad para manejar datos no estructurados, especialmente con equipos de desarrollo que trabajan con metodologías cada vez más ágiles.
Los desarrolladores tardan tiempo en detectar vulnerabilidades y otros desafíos en las tecnologías emergentes. Solo después de haber estado en uso durante un tiempo en aplicaciones de producción, los problemas comienzan a salir a la luz.
Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para mantener sus aplicaciones seguras. Uno de estos riesgos es la inyección NoSQL.
Echemos un vistazo a qué es la inyección NoSQL, qué daños puede causar y cómo solucionarla:
Comprender la inyección NoSQL
La inyección NoSQL es causada por muchas de las mismas vulnerabilidades de inyección que la inyección XML o SQL.
La inyección NoSQL permite a los atacantes introducir 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 utilizan funciones o tienen operadores integrados que pueden manipularse para robar o modificar 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 entornos 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. Si el código es vulnerable a la inyección NoSQL, la base de datos buscará todos los registros donde el nombre de usuario y la contraseña no sean iguales a una cadena vacía. En otras palabras: todos ellos. Vaya.
Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y las contraseñas de cada usuario dentro de ella. Esto incluye los nombres de usuario y contraseñas de los administradores, dándoles acceso total a toda la base de datos.
Los atacantes a menudo intentan introducir valores que siempre son verdaderos. Otro ataque común es inyectar código malicioso en propiedades que están configuradas como 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 debería evaluarse como verdadera o falsa. Si esta función es alterada de alguna manera por la entrada del usuario, es probable que haya una inyección NoSQL oculta allí.
Para obtener una visión detallada de las complejidades de la inyección NoSQL, consulta este artículo de InfoQ.
Saber por qué la inyección NoSQL es peligrosa
La inyección NoSQL es peligrosa principalmente porque aún no ha recibido el escrutinio que merece por parte de la comunidad de seguridad.
Los impactos de la inyección NoSQL son muy similares a los de la inyección SQL tradicional. Los datos pueden ser robados o modificados, las cuentas pueden verse comprometidas al robar información y, quizás lo más grave, los datos podrían borrarse por completo si se ejecuta con éxito un comando de eliminación.
La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a ataques. "No SQL" no significa sin inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y corriendo la voz. Más desarrolladores necesitan educarse para poder proteger sus aplicaciones de amenazas poco conocidas que pueden convertirse en un gran dolor de cabeza si son explotadas.
Derrota la inyección NoSQL
La inyección NoSQL puede ser difícil de combatir. Desafortunadamente, no existe la opción de consultas parametrizadas como ocurre con la inyección SQL. Sin embargo, no es imposible. Aquí tienes algunas opciones que te ayudarán:
- Los fuzzers pueden utilizarse como un método para detectar vulnerabilidades. Aunque, como sucede con muchas cosas en la vida, el enfoque más sencillo puede ser el más eficaz. En este caso, una buena revisión de código es tu mejor aliada.
- Al revisar el código, busca 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 modifique tus consultas.
- Asegúrate de convertir la entrada del usuario a su tipo de dato correcto. Si es un número, conviértelo a número; si es una cadena, a cadena, y así sucesivamente.
- Nunca utilices $where o funciones eval similares junto con la entrada del usuario. En la mayoría de los casos, puedes evitarlo cambiando el modelo de datos o el esquema.
- Prueba a usar Mongoose como tu controlador de MongoDB. Mongoose te permite definir un esquema para tu base de datos NoSQL. Si le indicas a Mongoose que tus entradas son cadenas, se convertirán a cadenas. De este modo, cualquier objeto introducido por un atacante no será tratado como objeto, sino como cadena.
- ¡Refuerza tu base de datos! Crea cuentas de usuario con privilegios limitados, maximiza el tiempo de ejecución de las consultas y sigue siempre las mejores prácticas de seguridad aplicables a tu organización.
Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a implementarlas y empezar a usarlas sin pensar en la seguridad.
Es fundamental que te tomes el tiempo necesario para aprender a implementar una base de datos NoSQL de forma segura y protegerte contra las inyecciones NoSQL.
Por ejemplo, MongoDB Enterprise Edition cuenta con capacidades avanzadas de control de acceso para tus documentos. Aplicar el "principio de menor 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:
- Sanea tus entradas antes de usarlas en una expresión de consulta NoSQL
- Utiliza controladores que te faciliten la tarea, como Mongoose
- Realiza revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
- Utiliza fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.
NoSQL no significa "sin inyecciones"
Las bases de datos NoSQL están ganando popularidad rápidamente debido a su escalabilidad y rapidez de configuración. La novedad de esta 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 a ataques de inyección como las SQL, así que actúa con precaución y presta atención a tus consultas. Si quieres saber más, consulta nuestros Recursos de aprendizaje o pon a prueba tus habilidades con nuestra demo gratuita.
Prepárate con antelación y no tendrás que preocuparte por las inyecciones NoSQL en tus aplicaciones. ¡Así de fácil!
¿Crees que estás listo para localizar, identificar y solucionar inyecciones NoSQL ahora mismo? Entra en la arena de código seguro, guerrero:
¡Y eso es todo por 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. ¡Hasta pronto!
Controle el desarrollo impulsado por IA antes de su lanzamiento
Mida el riesgo asistido por IA, aplique políticas de codificación segura en el momento de la confirmación y acelere la entrega segura en todo su ciclo de vida de desarrollo de software (SDLC).
Explorar más blogs
Acceda a contenido especializado sobre programación segura, gobernanza de IA y gestión de riesgos de software.

Una cultura de seguridad: cómo Sage creó su programa de defensores
Descubre cómo Sage reforzó su seguridad con un enfoque flexible y centrado en las relaciones, logrando formar a más de 200 expertos en seguridad y alcanzar una reducción de riesgos cuantificable.

Kamer van Koophandel: Seguridad a escala impulsada por los desarrolladores
La Cámara de Comercio (Kamer van Koophandel) comparte cómo integró la programación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de puntuación de confianza y una cultura de responsabilidad compartida en seguridad.

Cómo un «Juego de Códigos» guía a IAG Group hacia un futuro de programación más seguro
IAG Group es la entidad detrás de muchas de las principales compañías de seguros en la región de Asia-Pacífico, que suscribe pólizas para millones de clientes por un valor aproximado de 11.400 millones de dólares australianos en primas anuales.

Mes de la Concienciación sobre Ciberseguridad 2026: Comprender la seguridad de la IA es fundamental para la defensa empresarial
Hemos llegado a un punto en el que la mayoría de las principales empresas de IA han pedido públicamente una ralentización global en el desarrollo de la IA para que las medidas de seguridad puedan ponerse al día, pero la verdad es que ya se han materializado graves problemas de seguridad. Esto deja a innumerables líderes de seguridad y equipos ejecutivos en una situación urgente, a medida que los costes monetarios y de riesgo de la implementación de la IA siguen acumulándose.

Habilitador 8: Branding de su programa
Un programa de codificación segura necesita algo más que un buen contenido para tener éxito. El Habilitador 8 muestra cómo el branding transforma la participación en una experiencia codiciada basada en el estatus.
.avif)
Cada empleado está ahora en la primera línea de la ciberseguridad de la IA
El panorama tecnológico empresarial está cambiando a una velocidad que pocos previeron hasta que fue demasiado tarde. Hemos cruzado oficialmente el umbral del código escrito por humanos y la asistencia básica de copilotos hacia la era del Ciclo de Vida de Desarrollo Agéntico (ADLC). Si bien los agentes de IA autónomos prometen una eficiencia sin precedentes en múltiples funciones, también traen consigo una clase completamente nueva de riesgos regulatorios y de seguridad.
Proteja el desarrollo basado en IA antes de su lanzamiento
Identifique riesgos de desarrollo, aplique políticas y prevenga vulnerabilidades en todo el ciclo de vida de su software.