Actividad2 - Seguridad en Aplicaciones AJAX
Actividad2 - Seguridad en Aplicaciones AJAX
Actividad2 - Seguridad en Aplicaciones AJAX
SEGURIDAD EN SISTEMAS
APLICACIONES Y EL BIG DATA
Actividad 2: Seguridad en aplicaciones Ajax
Descripción breve
En esta actividad se investigará sobre aplicaciones AJAX, su origen y concepción y analizar sus
debilidades y fortalezas a tomar en cuenta la hora de su implementación
AJAX
Lo normal al solicitar un recurso web en los 90s y principios de los 2000's era que al acceder
al obtener el DNS obteníamos un archivo de carácter estatico, y a partir del cual podriamos ser
redirigido a otros recursos, en la medida que internet comenzó a ser más dinámico fue
necesario implementar protocolos que permitieran navegar de modo más o menos seguro, de
aquí la creación de AJAX.
AJAX significa Asynchornous Javascript and XML (Javascript Asincrono y XML) y a su vez
XML es eXtensible Markup Language (Lenguaje de marcado extensible), por tanto, lo primero
que nos debe quedar claro es que AJAX no refiere a un lenguaje de programación o un
framework de ningún tipo, sino que es una tecnología. La idea de esta tecnología es permitir a
un navegador (o una aplicación) solicitar recursos a un servidor asíncrono, que el cliente no
sabe cuándo recibirá esos recursos que solicitó. Esto es especialmente relevante para las RIAs
ya que el contenido que deben mostrar es de carácter dinámico, puede que pueda deberse a
búsquedas realizadas por el usuario, o preferencias optimizadas mediante algoritmos de IA y
Data Science, claro ejemplo de esto es YouTube.
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
Obtenemos de este modo un proceso mucho más complejo, ya que distintos componentes de
la aplicación son cargados tomando en cuenta diferentes factores según se construye el
componente, que puede ir desde acciones de búsqueda iniciadas por el usuario, un despliegue
dinámico al ir haciendo scrolling, o simplemente tener tiempos de espera mientras la
información llega desde el servidor. Otro requerimiento muy importante en las RIA que Ajax
satisface fue el solo ir cargando y recargando las áreas que eran necesarias, evitando que la
página web recargara por completo, ahorrando recursos web y de procesamiento tanto al
navegador como al servidor, ya que cada componente es responsable de las solicitudes que
realiza.
Es importante aclar que a pesar del significado del acrónimo AJAX, este no está realmente
limitado a XML, sino que fue desarrollado con XML pero que soporta muchas otras formas de
intercambio de información como JSON, CSV, YAML etc. Por otro lado, una rápida consulta
a la documentación de otros lenguajes y sus frameworks, mostrara que AJAX no está
únicamente limitado JavaScript, sino en general a cualquier lenguaje con capacidades de
conexión a la red.
Para concluir, hay que decir que el XMLHttpRequest, tiene algunas limitantes importantes
que hay que tener en cuenta, según IBM (2024):
Marcador y navegación: Dado que Ajax se usa para carga asíncrona de bits de contenido
en una página existente, puede que parte de la información de la página no corresponda a una
recién cargada. El historial del navegador y los marcadores pueden no tener el
comportamiento correcto ya que la URL no cambió a pesar de que partes de la página fueron
modificadas un problema común en la Single Page Aplications (SPA).
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
SOP
La Same Origin Policy (Política del mismo Origen), Es una importante medida de seguridad
relacionada a AJAX que bloquea las peticiones donde el solicitante y servidor no están
debidamente identificados. El origen es definido en la estructura de la URL con tres factores
importantes:
1. El esquema / scheme: Que puede ser http o https, dado esto, http://google.com y
https://google.com no son considerados el mismo origen.
2. El dominio / domain: Que es el nombre con el que buscamos un sitio web o un servidor,
cualquier cambio en el nombre del mismo invalida la SOP.
3. El puerto / port: a travez del cual se hace la solicitud, aunque normalmente no es
visible, cualquier cambio invalida la SOP.
Recordando que, en un navegador, cada pestaña es una instancia separada de las demás, dos
pestañas que contengan información de un mismo sitio pueden intercambiar información
entre ellas, pero no asi con pestañas que contenga información de sitios diferentes.
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
VULNERABILIDADES
Las RIAs y AJAX son propenso a una serie de ataques por parte de actores
malintencionados, a continuación, mencionaremos algunas de las principales
vulnerabilidades en distintos aspectos de la comunicación en la red.
JSON
• Cuando el servidor procesa datos de fuentes no seguras y/o sin sanear los datos
previamente.
• Ataques del lado del cliente resultado de que los datos proporcionados por el usuario
se analizan utilizando la función eval() de JavaScript sin ningún tipo de saneamiento
.
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
Ataque JSONP (relleno JSON): JSONP significa Notación de objetos JavaScript con relleno,
que permite enviar datos JSON entre dominios sin preocuparse por problemas entre
dominios.
Ataques de fuerza bruta: Es posible realizar ataques que caen bajo la categoría de fuerza
bruta, como pruebas de limitación de velocidad, política de bloqueo, etc. en JSON. Los pasos
son similares a los enfoques tradicionales de aplicaciones web.
CSRF: Es posible realizar CSRF en una implementación basada en JSON para secuestrar las
peticiones de una página o aplicación, pero a veces puede resultar complicado.
XML
Para los datos XML la OWASP defino dos conjuntos de vulnerabilidades que son la más
comunes.
1. Formato incorrecto.
2. XML no válidos.
Documentos XML con formato incorrecto: vulnerabilidades que utilizan documentos con
formato incorrecto.
La especificación XML del W3C define un conjunto de principios que los documentos XML
deben seguir para considerarse bien formados. Cuando un documento viola cualquiera de
estos principios, se debe considerar un error fatal y los datos que contiene se consideran
malformados.
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
XML External Entities expansion / XXE: Un ataque de entidad externa XML es un tipo
de ataque contra una aplicación que analiza la entrada XML. Este ataque se produce cuando
un analizador XML débilmente configurado procesa la entrada XML que contiene una
referencia a una entidad externa. Este ataque puede provocar la divulgación de datos
confidenciales, denegación de servicio, falsificación de solicitudes del lado del servidor,
escaneo de puertos desde la perspectiva de la máquina donde se encuentra el analizador y
otros impactos en el sistema.
Un documento con formato incorrecto puede afectar el consumo de recursos del CPU. En
determinados escenarios, la cantidad de tiempo necesaria para procesar documentos con
formato incorrecto puede ser mayor que la necesaria para documentos con formato correcto.
Cuando esto sucede, un atacante puede aprovechar un ataque de consumo asimétrico de
recursos para aprovechar el mayor tiempo de procesamiento y provocar una denegación de
servicio (DoS).
RSS Injection: La tecnología RSS es una característica de XML que permite distribuir
contenido en tiempo real, es muy común en blogs, canales de noticias, y en general, cualquier
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
fuente de información que requiera actualización constante. Los atacantes pueden aprovechar
esta característica para inyectar condigo malicioso a través del contenido.
Billion Laughs: El ataque Billion Laughs, también conocido como expansión exponencial de
entidades, utiliza múltiples niveles de entidades anidadas. Cada entidad hace referencia a otra
entidad varias veces y la definición de entidad final contiene una pequeña cadena. La
expansión exponencial genera varios gigabytes de texto y consume mucha memoria y tiempo
de CPU.
Bomba Yaml: Una bomba es un tipo especial de carga útil generalmente dirigida a servidores
web con puntos finales con acceso (endpoints) a Internet que, tras la serialización, aumenta
su tamaño en una escala exponencial, ocupando toda la memoria disponible de los sistemas y
eventualmente bloqueándolos. Estos accidentes provocan apagones, por lo que las bombas
son ideales para ataques de denegación de servicio.
JAVASCRIPT
Siendo el lenguaje nativo con el que los navegadores dan funcionalidad y dinamismo a las
páginas, SAP y RIAS, es natural que se utilizado a su vez por atacantes como medio para lograr
sus objetivos, además de ser usado hoy en día para construir APIs y aplicaciones de todo tipo.
Cross-Site Scripting (XSS): Ocurre cuando un atacante inyecta código malicioso en una
página web vista por otros usuarios. Luego, usuarios desprevenidos pueden ejecutar el código
inyectado, lo que permite al atacante robar información confidencial o realizar acciones no
autorizadas en nombre del usuario. Cross Site Request Forgery (CSRF) La falsificación de
solicitudes entre sitios (CSRF) es un ataque que obliga a un usuario final a ejecutar acciones
no deseadas en una aplicación web en la que está actualmente autenticado. Con un poco de
ayuda de ingeniería social (como enviar un enlace por correo electrónico o chat), un atacante
puede engañar a los usuarios de una aplicación web para que ejecuten acciones de su elección.
MéMétodo eval(): Aunque MDN lo define como un método que evalúa una cadena de
caracteres que si resulta en una expresión o sentencia validad es ejecutada, pudiéramos decir
que su función es más bien ejecutar código de manera póstuma a su declaración u obtención,
siempre y cuando sea un código valido. eval() es ejecutado con los mismos privilegios que el
código que invoca este método, es decir, si es invocado desde un scope de 3er nivel, puede
afectar a todo el nivel los de más abajo, y si es invocado desde el 1er nivel (objeto global),
afectara a la totalidad del código. Estas características permiten inyectar todo tipo de código
malicioso si se encuentra el método en alguna parte del script.
Uso de var y function: Las palabras reservadas de var, usada para declarar variables y
function, para declarar funciones, tienen el problema de que son accesibles al largo de todo el
espacio de memoria que utiliza JavaScript sin importar el nivel de privilegios de la misma, por
lo que un atacante pudiera inyectar código malicioso en cualquiera de las dos.
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
Por motivos de seguridad, las aplicaciones AJAX solo pueden conectarse nuevamente al sitio
web del que provienen. Para permitir que AJAX contacte sitios de terceros de esta manera, se
creó el puente de servicio AJAX. En un puente, un host proporciona un servicio web que actúa
como proxy para reenviar el tráfico entre el JavaScript que se ejecuta en el cliente y el sitio de
terceros. Un puente podría considerarse una conexión de "servicio web a servicio web". Un
atacante podría utilizar esto para acceder a sitios con acceso restringido.
DEFENSAS
HTTPS: Aunque parezca una obviedad, uno de los primeros pasos debe ser el solo permitir
las solicitudes HTTPS. Además, el sitio o la API en cuestión debe contar también con su
certificado para enviar los datos de manera encriptada.
1. Permite a una aplicación web exponer sus recursos, de manera selectiva o general.
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
2. Permite a un cliente web realizar una petición AJAX que se encuentra en otro dominio.
CORS añade Cabeceras a la solicitud HTTP que permite a las aplicaciones y
navegadores describir los orígenes de las peticiones, además las especificaciones de los
navegadores exigen que comprueben previamente la petición, cosa que es posible
realizar también a nivel de aplicación.
Puede (y es bueno) usarlo en combinación con cookies de seguridad, y además definir los
métodos permitidos en las peticiones.
Cookies CSRF Token: Para prevenir los ataques CSRF se puede generar un token con
algoritmos de seguridad que permitan que cada uno sea único y sirvan como credencial de
identificación para una aplicación/usuario con los debidos permisos para interactuar con el
origen de los recursos. Si no hubiera un token valido, las consultas deben ser bloqueadas. Un
CSRF token debe tener las siguientes características:
Los tokens deben ser enviados a través de las cabeceras HTTP para no ser leídos por
JavaScript. Muchos Framework para el desarrollo de APIs ya vienen con métodos solidos para
el uso de estos tokens, como: Django, .NetCore, Laravel, Spring o NestJS.
Ejemplo de un DTO para una API de un servidor RADIUS, los campos deben
Validación de Campos: Puede estar íntimamente relacionado con el DTO, la idea general
consiste en revisar que cada uno los campos que se reciben o se enviar a través de la red
cumplan con características específicas al momento de procesar la información, muchas veces
esto se hace también aplicado formulas bien conocidas de expresiones regulares, aunque no
siempre es necesario.
JavaScript Dado que los navegadores funcionan esencialmente con JavaScript para darle
interactividad y dinamos a las páginas es importante tener en cuenta varias medidas de
seguridad con respecto a los scripts que dan estas características, teniendo especial cuidado
con las características más riesgosas de este lenguaje.
Uso de Linters: Son extensiones para los editores de código e IDEs, que permiten revisar la
sintaxis del script, y algunos incluso evalúan los resultados de funcione y métodos en tiempo
real.
Validar Inputs del Usuario: Existen librerías y cientos de recursos en internet que permite
aplicar Regexs fuerte y probados para los inputs que el usuario coloca en los campos
determinados.
Usar TypeScript: Este super set de JavaScript permite realizar el desarrollo de los scripts
haciendo uso de tipado fuerte e interfaces para tener una alta consistencia ente los valores
enviados y recibidos. Este lenguaje no se usa en producción, sino que transpila de forma segura
todo el proyecto en un solo script.
Ejemplo de un método de clase para API de un servidor RADIUS, el método indica el tipo de
dato a recibir y los datos que podría devolver.
WebAssembly (Wasm): Es un nuevo estándar para cumplir con las funcionalidades que
posee JavaScript permitiendo a otros lenguajes programar las mismas tareas y exportarlas a
un archivo binario. Actualmente los navegadores transforman el código wasm en código JS,
pero si naturaleza lo hace más difícil de manipular.
RECOMENDACIONES FINALES
• Siempre testear el código contra inyecciones de todo tipo, siempre y cuando sean
pertinentes a la aplicación, es decir, si la aplicación no ejecuta comando SQL no hay
necesidad de probar la resistencia de una SQL Injection.
• Uso de frameworks de desarrollo bien conocidos, ya que por lo general están bien
probados, han sobrevivido a la prueba del tiempo y tienden a tener comunidades
activas que se encargan de identificar y corregir las vulnerabilidades.
• En el desarrollo con JavaScript, conocer los métodos y practicas más vulnerables para
poder evitarlos, a su vez, usar las nuevas palabras reservadas para variables y
contantes, let y const, respectivamente, además de crear funciones flechas (fat arrow
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
// código a ejecutar
};
• Tener una lista clara y concisa de los requerimientos de seguridad que requiere una
aplicación y hacer el seguimiento.
Asignatura Datos del alumno Fecha
Seguridad en sistemas, Apellidos: Hernandez Sabatino
8/1/2024
aplicaciones y el big data Nombre: Jose
BIBLIOGRAFIA
GuardRails (seudónimo) (18/04/2023). The Top Ten JavaScript Vulnerabilities and How
to Avoid Them. https://securityboulevard.com/2023/04/the-top-ten-javascript-
vulnerabilities-and-how-to-avoid-them/. Visitado por última vez el 03/04/2024.
MDN (21/11/23) Fetching data from the server - Learn web development.
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-
side_web_APIs/Fetching_data. Visitado por última vez el 02/01/2024.