Vulnerabilidade raíz no Snap Package Management Toolkit

Qualys identificou unha terceira vulnerabilidade grave este ano (CVE-2022-3328) na utilidade snap-confine, que inclúe a marca de raíz SUID e é chamada polo proceso snapd para formar un ambiente executable para aplicacións distribuídas en paquetes autónomos. en formato snap. A vulnerabilidade permite que un usuario local sen privilexios logre a execución de código como root na configuración predeterminada de Ubuntu. O problema foi solucionado na versión de snapd 2.57.6. Lanzáronse actualizacións de paquetes para todas as ramas compatibles de Ubuntu.

Curiosamente, a vulnerabilidade en cuestión foi introducida no proceso de arranxar unha vulnerabilidade similar de febreiro en snap-confine. Os investigadores puideron preparar un exploit de traballo que proporciona acceso root en Ubuntu Server 22.04, que, ademais da vulnerabilidade de snap-confine, tamén implica dúas vulnerabilidades no proceso multipathd (CVE-2022-41974, CVE-2022-41973). relacionado con ignorar a comprobación de permisos ao pasar comandos privilexiados e o manexo inseguro de ligazóns simbólicas.

A vulnerabilidade en snap-confine é causada por unha condición de carreira na función must_mkdir_and_open_with_perms(), engadida para protexer contra a substitución do directorio /tmp/snap.$SNAP_NAME cunha ligazón simbólica despois da comprobación do propietario, pero antes da chamada do sistema de montaxe chámase para vincular directorios de montaxe para un paquete en formato snap. A seguridade engadida foi cambiar o nome do directorio /tmp/snap.$SNAP_NAME a outro directorio en /tmp cun nome aleatorio se existe e non é propiedade do usuario root.

Ao explotar a operación de cambio de nome do directorio /tmp/snap.$SNAP_NAME, os investigadores aproveitaron o feito de que snap-confine tamén crea un directorio /tmp/snap.rootfs_XXXXXX para a raíz do contido do paquete snap. A parte "XXXXXX" do nome é escollida aleatoriamente por mkdtemp(), pero un paquete chamado "rootfs_XXXXXX" pode pasar sc_instance_name_validate (é dicir, a idea é que $SNAP_NAME se estableza como "rootfs_XXXXXX" e despois a operación de cambio de nome terá como resultado sobrescritura). o directorio /tmp/snap.rootfs_XXXXXX co snap root).

Para conseguir o uso simultáneo de /tmp/snap.rootfs_XXXXXX e cambiar o nome de /tmp/snap.$SNAP_NAME, iniciáronse dúas instancias de snap-confine. Tan pronto como a primeira instancia crease /tmp/snap.rootfs_XXXXXX, o proceso bloquearíase e comezaría unha segunda instancia co nome do paquete rootfs_XXXXXX, facendo que o directorio temporal da segunda instancia /tmp/snap.$SNAP_NAME se converta no /tmp/snap .rootfs_XXXXXX directorio raíz da primeira instancia. Inmediatamente despois de realizar o cambio de nome, a segunda instancia fallou e /tmp/snap.rootfs_XXXXXX foi substituído pola manipulación das condicións de carreira, como na explotación da vulnerabilidade de febreiro. Despois do cambio, o bloqueo de execución foi eliminado da primeira instancia e os atacantes conseguiron o control total sobre o directorio raíz de snap.

O último paso foi crear unha ligazón simbólica /tmp/snap.rootfs_XXXXXX/tmp que foi utilizada pola función sc_bootstrap_mount_namespace() para vincular o directorio real escribible /tmp a calquera directorio do sistema de ficheiros, xa que segue a chamada a mount(). enlaces simbólicos antes de montar. Tal montaxe está bloqueada polas restricións de AppArmor, pero para evitar este bloqueo, o exploit explotou dúas vulnerabilidades auxiliares en multipathd.

Fonte: opennet.ru

Engadir un comentario