Este es un tipo de exploit muy específico que afecta a todo tipo de software.

Use-After-Free (UAF) es una vulnerabilidad de corrupción de memoria primitiva que continúa representando una amenaza significativa para todo tipo de software, desde sistemas operativos hasta software de aplicación. Esta falla de seguridad crítica ocurre cuando un componente de la aplicación intenta acceder a los datos en una dirección de memoria que ya ha sido liberada, de ahí el nombre: use-after-free.

Las vulnerabilidades de UAF pueden llevar a la explotación potencial del software o incluso al compromiso del sistema. Esto es lo que es la vulnerabilidad UAF, por qué ocurre y cómo puede proteger su software de una vulnerabilidad UAF.

¿Qué es la vulnerabilidad Use-After-Free (UAF)?

Antes de sumergirnos en la vulnerabilidad Use-After-Free, demos un paso atrás y comprendamos algunos conceptos básicos de la administración de memoria. Cuando se ejecuta un programa, sus datos y código se cargan en la memoria.

La administración de memoria es el proceso de administrar cómo almacenar (llamado asignación de memoria) y eliminar (llamado desasignación de memoria) datos y códigos en la memoria de una manera óptima. Los dos segmentos de memoria primaria donde se almacenan los datos del programa son

instagram viewer
la pila y el montón.

A los programas se les puede asignar espacio de memoria estáticamente en la pila y dinámicamente en el montón. Se produce una vulnerabilidad de uso después de la liberación cuando los programadores no gestionan correctamente la asignación y desasignación de memoria dinámica en sus programas. Esto significa que la clase de vulnerabilidades UAF es un tipo de explotación de montón. Para comprender mejor esta vulnerabilidad, es útil tener una sólida comprensión de cómo funcionan los punteros en la programación.

Use-After-Free (UAF), como sugiere el nombre, es un tipo de vulnerabilidad de corrupción de memoria primitiva que ocurre cuando un objeto que ya ha sido se vuelve a acceder a la desasignación de la memoria, lo que provoca bloqueos o consecuencias no deseadas, como fugas de memoria, escalada de privilegios (EOP) o código arbitrario ejecución. Aprendamos cómo ocurre esta condición en primer lugar y cómo se explota.

¿Cómo se explota Use-After-Free (UAF)?

Use-After-Free (UAF), como sugiere el nombre, es una vulnerabilidad de corrupción de memoria primitiva que ocurre cuando un programa continúa accediendo a ubicaciones de memoria que ha liberado. Echemos un vistazo a un código de ejemplo:

#incluir <estudio.h>
#incluir <stdlib.h>

En tprincipal(){
En t *MUO = malloc (tamaño de (En t));
*MUO = 69420;
imprimir("Valor: %d\n", *MUO);
libre (MUO);
imprimir("¿Valor?: %d\n", *MUO);
devolver0;
}

¿Podría detectar la vulnerabilidad? Como puede ver, en este código, el MUO puntero se desasigna de la memoria usando el gratis() función, sin embargo, se llama de nuevo en la siguiente línea usando el imprimirf() función. Esto da como resultado un comportamiento inesperado del programa y, dependiendo de dónde esté presente la vulnerabilidad en el software, puede aprovecharse para obtener una escalada de privilegios y pérdidas de memoria.

¿Cómo mitigar el uso después de la liberación?

UAF se produce por errores en la programación de una aplicación. Hay algunas precauciones que puede tomar para evitar vulnerabilidades Use-After-Free en su software.

Estas son algunas de las mejores prácticas que puede adoptar para minimizar las vulnerabilidades de corrupción de memoria en su software:

  • Usar lenguajes de programación seguros para la memoria como Rust con mecanismos incorporados para evitar vulnerabilidades de corrupción de memoria primitivas como UAF, desbordamientos de búfer, etc. Si usa lenguajes de programación como C/C++, es más probable que introduzca errores de memoria en su código. Por la misma razón, incluso los sistemas operativos como Windows y Linux están migrando lentamente a Rust. También debe considerar aprendiendo sobre óxido si crea programas de bajo nivel.
  • Además de usar un lenguaje seguro para la memoria, se recomienda que siga las mejores prácticas, como establecer un puntero en el valor NULL después de liberarlo para evitar cualquier introducción de vulnerabilidad Use-After-Free.
  • También puede implementar técnicas como la asignación única (OTA) que evita que los atacantes accedan a la memoria liberada. objetos y una política estricta de ciclo de vida de objetos, que ayuda a realizar un seguimiento de cada objeto de memoria que se asigna y desasignado Sin embargo, tenga en cuenta que estas implementaciones pueden aumentar la sobrecarga de memoria y rendimiento.

Ejemplos reales de vulnerabilidad Use-After-Free (UAF)

La vulnerabilidad Use-After-Free (UAF) ha sido descubierta y explotada en varios escenarios del mundo real, desde navegadores web hasta kernel de Android y aplicaciones cotidianas. Esto demuestra la necesidad de medidas de seguridad proactivas. Algunos ejemplos del mundo real de UAF incluyen:

  • Navegadores de Internet: las vulnerabilidades de UAF en los navegadores web se han aprovechado para ejecutar código arbitrario, comprometer la privacidad del usuario y ejecutar ataques de ejecución remota de código. Un ejemplo reciente sería CVE-2021-38008, que aprovechó una vulnerabilidad UAF en Google Chrome, lo que permitió a los actores de amenazas ejecutar código arbitrario de forma remota en la máquina de la víctima.
  • Sistemas operativos: las vulnerabilidades UAF encontradas en los kernels de Windows/Linux/Android han permitido a los atacantes obtener privilegios elevados, eludir los mecanismos de seguridad y ganar persistencia. Hay una plétora de vulnerabilidades UAF que se han encontrado y aún se encuentran en los núcleos del sistema operativo hasta la fecha. En el momento de escribir este artículo, CVE-2023-3269, se publicó públicamente otra vulnerabilidad UAF en el kernel de Linux que conduce a una escalada de privilegios. CVE-2022-23270 es un ejemplo de una vulnerabilidad UAF en el kernel de Windows.
  • Aplicaciones de software: las vulnerabilidades de UAF en las aplicaciones de software se han explotado para manipular programas comportamiento, lo que conduce a la divulgación de información, la ejecución de código arbitrario, el bloqueo del programa y, en el peor de los casos, el privilegio escalada. Múltiples aplicaciones de software han sido y siguen siendo susceptibles a los ataques UAF. Estos programas son en su mayoría programas C/C++ que se han desarrollado con enfoques de administración de memoria ineficientes e inseguros.

Para obtener más información sobre las vulnerabilidades Use-After-Free en aplicaciones del mundo real, puede consultar la MITRE oficial CVE página de lista y ordenar por palabra clave Use-After-Free.

La asignación de memoria eficiente ayuda a que el software sea seguro

La asignación de memoria óptima y bien pensada contribuye en gran medida a proteger sus aplicaciones de ser víctimas de vulnerabilidades comunes de corrupción de memoria primitiva.

UAF junto con Time Of Check Time of Use (TOCTOU), las condiciones de carrera y los desbordamientos de búfer (BOF) son algunas de las vulnerabilidades de memoria más comúnmente explotadas. Todo esto se puede evitar aprendiendo cómo la plataforma en la que se ejecuta administra la memoria de su programa. Esto le brinda claridad sobre cómo el sistema operativo está asignando su programa en la memoria y lo equipa con las herramientas para diseñar software para un rendimiento y seguridad óptimos.

Si aún no lo ha hecho, puede comenzar por comprender cómo se realiza la administración de memoria en Linux, el sistema operativo de servidor más utilizado del mundo.