highCWE-89A03:2021

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.

Código Vulnerable
// 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}'`
);
Código Seguro
// 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

Node.jsPythonJavaPHPGo

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas