Los EXEC y los SYSTEM los carga el diablo

Los EXEC y los SYSTEM los carga el diablo

Hace unos meses, jugando con Kamailio, descubrí que un operador enviaba llamadas con un Call-ID (un campo interno de SIP que sirve para identificar a qué diálogo pertenece ese mensaje) erróneo que incluía comillas («), barras invertidas (\), comillas simples (‘), y arrobas (@) entre otros caracteres, de forma que, en principio todo funciona correctamente hasta que me dio por guardar ese parámetro dentro de una base de datos y descubrí que no se guardaban por ejecutar una cadena SQL incorrecta.

Me costó bastante descubrir el motivo de por qué esas llamadas no se guardaban, pero cuando por fín me di cuenta, aprendí la importancia de «sanitizar» cualquier información con la que vayamos a trabajar ya que, en cualquier momento podemos recibir una cadena malformada adrede para causar quién sabe qué.

Tras pasar todos los parámetros por una función que eliminaba caracteres extraños y verificaba que todo era correcto, empecé a pensar ¿y si un call-id, un dnid, un CallerID o un destino erróneo y malformado como el que yo recibí, apareciera como parámetro de un comando de ejecución? Las consecuencias podrían ser terribles.

Entonces apareció un mensaje en la lista de usuarios de Kamailio que coincidía justamente con lo que estaba evitando y es que un parámetro externo incluido dentro de una función de ejecución puede ser un grave problema de seguridad.

En Asterisk no son pocas las configuraciones que incluyen comandos de este tipo: Ejecuciones al finalizar una conversación para comprimir, mover o copiar la grabación de dicha conversación utilizando el caller id como parámetro, …. ¿y si el callerid fuese una cadena de inyección de código del tipo: «\nrm -rf /\n»? Es cierto que esa cadena nunca sería válida en el RFC y seguro que IEEE aparecería en sueños, pero la jugarreta se la haría bien.

Ya hablamos hace 13 años de cómo programar el dialplan de Asterisk para evitar este tipo de ataques malintencionados utilizando las funciones y aplicaciones de Asterisk en el artículo: Una nueva versión de Asterisk corrige el dialplan injection. En este caso el ataque permitía llamar a cualquier destino aunque el dialplan nos hubiera limitado el número al que llamar.

Inicia la conversación

¡Inicia la conversación!

Sé el primero en compartir tu opinión. Tu comentario puede ayudar a otros.

Si tienes una cuenta en Sinologic, no necesitas rellenar estos campos. Regístrate gratis · Iniciar sesión

Comunidad abierta

Únete a la comunidad Sinologic

Crea tu cuenta gratuita y participa en las conversaciones sobre VoIP, Asterisk, Kamailio y telecomunicaciones IP.

Nombre verificado Tu nombre aparece con insignia de miembro en cada comentario.
🔔
Notificaciones Recibe avisos cuando alguien responda a tus comentarios.
👍
Reacciones Reacciona con emojis a los comentarios de otros usuarios.
👤
Perfil personalizable Avatar, bio, enlaces a tu Twitter, GitHub y Telegram.
📬
Newsletter exclusivaPróximamente Contenido técnico y novedades directamente en tu bandeja.
🧪
Acceso anticipadoPróximamente Prueba herramientas y funciones antes que nadie.