Encontraron una vulnerabilidad en el subsistema tty del kernel de Linux

Investigadores del equipo Google Project Zero dieron a conocer hace poco mediante una publicación de blog un nuevo método de explotación de vulnerabilidades (CVE-2020-29661) en la implementación del manejador ioctl TIOCSPGRP del subsistema tty del kernel de Linux, así como mecanismos de protección detallados que podrían bloquear dichas vulnerabilidades.

Se menciona en la publicación que el problema es causado por un error en la configuración de bloqueos, lo que lleva a una condición de carrera en el código de /tty/tty_jobctrl.c, que se usó para crear condiciones para acceder a la memoria después de su lanzamiento (use-after-free), explotado por el usuario espacio a través de la manipulación con ioct- llamando a TIOCSPGRP.

Adicional a la información publicada, también se realizó una demostración de un exploit funcional para la escalada de privilegios en Debian 10 con kernel 4.19.0-13-amd64 y el cual también no se descarta que pueda afectar a diversas distribuciones, entre las cuales claro están las basadas y derivadas de Debian.

Muchas de las técnicas de explotación individual y las opciones de mitigación que estoy describiendo aquí no son novedosas. Sin embargo, creo que es valioso escribirlos juntos para mostrar cómo interactúan varias mitigaciones con un exploit de uso después de libre bastante normal.

Los fragmentos de código en esta publicación de blog que son relevantes para el exploit se toman de la versión anterior 4.19.160, ya que en eso se basa el kernel de Debian objetivo; algunos otros fragmentos de código son de la línea principal de Linux.

Al mismo tiempo, en el artículo publicado, el énfasis no está tanto en la técnica de crear un exploit funcional, sino en qué herramientas existen en el kernel para protegerse contra tales vulnerabilidades.

La conclusión es decepcionante, ya que se menciona que los métodos como segmentar la memoria en el montón y controlar el acceso a la memoria después de que se libera no se aplican en la práctica, ya que conducen a una disminución del rendimiento y a la protección basada en CFI (Control Flow Integrity), que bloquea exploits en las últimas etapas de un ataque, requiere mejoras.

Un tipo especial de dispositivo terminal son los pseudoterminales , que se utilizan cuando, por ejemplo, abre una aplicación de terminal en un entorno gráfico o se conecta a una máquina remota a través de SSH. Mientras que otros dispositivos terminales están conectados a algún tipo de hardware, ambos extremos de un pseudoterminal están controlados por el espacio de usuario, y los pseudoterminales pueden ser creados libremente por el espacio de usuario (sin privilegios).

Cada vez que /dev/ptmxse abre (abreviatura de «multiplexor pseudoterminal»), el descriptor de archivo resultante representa el lado del dispositivo (al que se hace referencia en la documentación y las fuentes del kernel como » el pseudoterminal master») de un nuevo pseudoterminal.

 El dispositivo terminal correspondiente (al que normalmente se conecta un shell) es creado automáticamente por el kernel bajo /dev/pts/<number>.

Al observar lo que podría marcar la diferencia a largo plazo, el énfasis está en el uso de analizadores estáticos avanzados o en el uso de lenguajes seguros para la memoria como los dialectos Rust y C con anotaciones extendidas (como C comprobado) para construir damas de estado, cerraduras, objetos y punteros. Los métodos de protección también mencionan la activación del modo panic_on_oops, haciendo que las estructuras del kernel sean de solo lectura y restringiendo el acceso a las llamadas al sistema mediante mecanismos como seccomp.

El error que causaba el problema se solucionó en el kernel de Linux el 3 de diciembre del año pasado. El problema se manifiesta en los núcleos anteriores a la versión 5.9.13, pero la mayoría de las distribuciones han solucionado el problema en las actualizaciones del paquete del núcleo que se ofrecieron el año pasado.

También se menciona una vulnerabilidad similar (CVE-2020-29660) que se encontró simultáneamente en la implementación de la llamada ioctl TIOCGSID, pero también se eliminó en todas partes.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

from Linux Adictos https://ift.tt/3jU9PiS
via IFTTT

¿Programas macOS en Linux? Con Darling es posible.

¿Programas macOS en Linux?

A medida que va pasando el tiempo, las diferencias entre los sistemas operativos se van volviendo irrelevantes. Máquinas virtuales, contenedores y otras tecnologías permiten que podamos utilizar cada día más títulos de nuestros programas preferidos aunque no tenga versión para nuestro sistema operativo.

Wine, la herramienta que actúa como un intérprete entre el núcleo Linux y las aplicaciones Windows ya lleva mucho tiempo entre nosotros. Desde hace poco tiempo, también tenemos una herramienta para los programas de macOS.

¿Programas macOS en Linux? Con Darling es posible

Darling cumple una función similar a la de Wine con los programas de Windows, solo que no tiene ningún complejo en definirse como un emulador. Lo que hace es actuar como un traductor que permite ejecutar los programas de macOS usando los recursos de Linux. El nombre Darling (Querida) es la primera parte del nombre del núcleo de macOS (Darwin) y las primeras 3 letras de Linux. Supongo que la G final es para construir una palabra fácil de memorizar.

Hay que decir que a los desarrolladores de Darling la cosa les resulta más fácil que los de Wine. No tienen que hacer ingenieria inversa ni reinventar nada dado que se basan en las partes de Darwin que están bajo licencias abiertas. El propio Darling se distribuye bajo la licencia GPL.

Iniciando Darling

El programa no tiene interfaz gráfica. Lo ponemos en marcha desde la terminal con el comando:
darling shell
Al escribirlo, Darling creará un directorio raíz virtual o se conectará con uno existente. Además cargará los módulos del núcleo y construirá el sistema de archivos virtual donde ejecutaremos los programas.

Desde la línea de comandos podemos acceder a dos tipos de sistemas de archivos: el tradicional de macOS que incluye los directorios de nivel superior como /Applications, /Users y /System entre otros. Por otro lado, el del sistema operativo anfitrión lo hallamos en una partición denominada /Volumes/SystemRoot

Podemos verificar el núcleo con el siguiente comando:
uname
Y averiguar la versión de macOS con:
sw_vers
Salimos de la terminal con
exit
Y apagamos el contenedor con:
darling shutdown

Instalación de programas

Si estás usando Linux en arranque dual con macOS y quieres ejecutar alguno de los programas que tienes instalado en la partición de Mac, puedes hacerlo con el comando:
/Volumes/SystemRoot/run/media/usuario/Macintosh HD/Applications/nombre_app.app)
Muchos programas para macOS se distribuyen en formato .dmg. Para instalarlos en Darling hacemos:
Darling [~]$ hdiutil attach Downloads/aplicación.dmg
/Volumes/aplicacion
Darling [~]$ cp -r /Volumes/aplicación/aplicación.app /Applications/

En el caso de aplicaciones almacenadas en archivos comprimidos, lo descomprimimos y copiamos en la carpeta /Applications. Lo mismo con aplicaciones previamente descargas de la tienda de aplicaciones.
Por último nos quedan las aplicaciones .pkg, el formato de paquete nativo de macOS. Este formato implica ejecutar scripts durante la instalación. Para poder usarlos debemos hacer:
Darling [~]$ installer -pkg aplicación.pkg -target /
Podemos desinstalar los programas con:
uninstaller nombre_del_paquete
Debemos entender que si bien Darling funciona muy bien con aplicaciones para la línea de comandos, solo tiene funcionalidades muy limitadas para las que necesitan una interfaz gráfica.

Instalación de Darling

Si utilizas Debian o derivados, la instalación de Darling no tiene mayor problema. Solo tienes que tipear los comandos:

sudo apt install gdebi
sudo gdebi darling-dkms_X.X.X.testing_amd64.deb
sudo gdebi darling_X.X.X.testing_amd64.deb

Reemplaza las X por el número de versión de los paquetes que descargarás desde aquí

En otras distribuciones deberás compilarlo lo que requiere un espacio en disco de 10 GB y 1 GB para la instlación. Además deberás instalar previamente las dependencias para tu distribución. Las puedes consultar en la documentación

Descargamos los archivos necesarios con:

git clone --recursive https://github.com/darlinghq/darling.git

Es posible que tengas que instalar el paquete git.
Comprobamos si hay una nueva versión (Solo si descargaste hace tiempo)
git pull
git submodule init
git submodule update

Procedemos a compilar

  1. Vamos al directorio donde descargamos con cd darling
  2. Creamos un directorio de trabajo con mkdir build
  3. Cambiamos a ese directorio con cd build
  4. Configuramos con el comando cmake
  5. Construimos con el comando make
  6. Instalamos con sudo make install

Vamos a necesitar instalar un módulo para el kernel. Lo hacemos con los comandos:
make lkm
sudo make lkm_install

from Linux Adictos https://ift.tt/3w1PQDw
via IFTTT

Así funciona el borrador mágico del Pixel 6: probamos la eliminación de objetos no deseados de las fotos

Así funciona el borrador mágico del Pixel 6: probamos la eliminación de objetos no deseados de las fotos

Con la salida de los nuevos móviles de Google una funcionalidad de software ha acaparado gran atención: el borrador mágico. Integrado en Google Fotos, los Pixel 6 pueden eliminar elementos no deseados de cualquier imagen de manera automática. Y hemos comprobado su funcionamiento: a menudo parece casi magia.

Pocas funciones de software creadas por Google han despertado tanta expectación como el borrador mágico, una herramienta integrada en Google Photos que se ofrece como ventaja exclusiva de los Google Pixel. Y lo hemos probado: a pesar de que su funcionamiento no siempre es preciso, lo cierto es que puede eliminar elementos de las imágenes casi como si fuese magia. Esa persona que se cuela en el momento menos pensado, un árbol que estropea la vista panorámica… Las posibilidades son infinitas.


Continue reading →