Queries Crudos en ORMs
Usar metodos de SQL crudo como $queryRaw de Prisma o query() de Sequelize con interpolacion de strings bypasea la proteccion contra SQL injection del ORM.
Cómo Funciona
Los ORMs como Prisma y Sequelize proveen query builders seguros que parametrizan los inputs automaticamente. Sin embargo, tambien exponen metodos de query crudo para operaciones complejas. Cuando los desarrolladores usan estos metodos crudos con interpolacion o concatenacion de strings en vez de placeholders parametrizados, reintroducen vulnerabilidades de SQL injection. Un atacante puede inyectar SQL malicioso a traves de input del usuario que se interpola directamente en el string del query. Esto es especialmente peligroso porque los desarrolladores asumen que el ORM los protege, creando una falsa sensacion de seguridad.
// Prisma - vulnerable raw query
const users = await prisma.$queryRaw(
`SELECT * FROM users WHERE email = '${email}'`
);
// Sequelize - vulnerable raw query
const results = await sequelize.query(
`SELECT * FROM orders WHERE status = '${status}'`
);// Prisma - parameterized raw query
const users = await prisma.$queryRaw(
Prisma.sql`SELECT * FROM users WHERE email = ${email}`
);
// Sequelize - parameterized raw query
const results = await sequelize.query(
'SELECT * FROM orders WHERE status = ?',
{ replacements: [status] }
);Ejemplo Real
En 2021, una vulnerabilidad en un CMS popular de Node.js fue rastreada a queries crudos de Sequelize con interpolacion de strings. Los atacantes la explotaron para extraer credenciales de admin de la base de datos, afectando mas de 10,000 instalaciones antes de que se publicara un parche.
Cómo Prevenirlo
- Siempre usa tagged template literals con Prisma.sql para $queryRaw
- Usa replacements parametrizados en queries crudos de Sequelize
- Prefiere los query builders del ORM sobre queries crudos siempre que sea posible
- Usa reglas de ESLint para detectar interpolacion de strings en metodos de query crudo
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Cadena de Conexion Expuesta
criticalURLs de conexion a base de datos con usuario y password hardcodeadas en el codigo fuente, dejando las credenciales accesibles a cualquiera con acceso al repositorio.
Backup de Base de Datos Expuesto
highArchivos de dump de base de datos (.sql, .dump, .bak) commiteados al repositorio exponen el esquema completo y datos, incluyendo credenciales de usuarios y registros sensibles.
Deserializacion Insegura
highDeserializar datos no confiables con librerias como node-serialize o yaml.load de Python permite a los atacantes ejecutar codigo arbitrario en el servidor.
Queries N+1 Explotables
lowLa expansion de relaciones sin limites en queries de ORM permite a los atacantes disparar miles de queries a la base de datos con un solo request de API, causando denegacion de servicio.