mediumCWE-74A03:2021

Inyección SMS

Incluir input del usuario sin validar en mensajes SMS permite a los atacantes inyectar saltos de línea y crear mensajes fraudulentos que parecen venir de tu aplicación.

Cómo Funciona

Los cuerpos de SMS son texto plano. Los caracteres de nueva línea (\n) pueden dividir un SMS en múltiples mensajes o inyectar contenido que aparece en una nueva línea — engañando a los destinatarios para que piensen que el texto adicional es parte del mensaje oficial. Esto se usa para enviar confirmaciones de pago falsas o links de phishing en nombre de tu app.

Código Vulnerable
// MAL: input del usuario directamente en el cuerpo del SMS
const mensaje = `Tu código de verificación es: ${req.body.codigo}`;
await twilioClient.messages.create({ body: mensaje, to: telefonoUsuario });
Código Seguro
// BIEN: sanitiza el input y usa una allowlist para el contenido del SMS
const codigo = req.body.codigo?.replace(/[^0-9]/g, '').slice(0, 8);
if (!codigo) return res.status(400).json({ error: 'Código inválido' });
const mensaje = `Tu código de verificación es: ${codigo}`;
await twilioClient.messages.create({ body: mensaje, to: telefonoUsuario });

Ejemplo Real

Los ataques de inyección SMS han sido usados para falsificar alertas bancarias y mensajes OTP en múltiples casos de fraude reportados. Los atacantes usan caracteres de nueva línea para inyectar información de saldo falsa o links maliciosos después de una primera línea que parece legítima.

Cómo Prevenirlo

  • Nunca incluyas input del usuario crudo en el cuerpo de un SMS — siempre sanitiza y valida primero
  • Para códigos de verificación, usa una allowlist estricta (solo dígitos, máximo 8 caracteres)
  • Usa las opciones de filtrado de contenido de Twilio o tu proveedor de SMS
  • Loguea todo el contenido SMS saliente para detección de anomalías

Tecnologías Afectadas

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas