Vulnerabilidades en Pagure y OBS, que permitieron la compromisión de paquetes en los repositorios de Fedora y openSUSE.

Investigadores de seguridad de la empresa Fenrisk han revelado información sobre vulnerabilidades en las herramientas Pagure y OBS (Open Build Service), que permitieron comprometer las infraestructuras de generación de paquetes de las distribuciones Fedora y openSUSE. Los investigadores demostraron la posibilidad de llevar a cabo un ataque para ejecutar código arbitrario en los servidores con Pagure y OBS, lo que podría ser utilizado para sustituir cambios en los paquetes de los repositorios de Fedora y openSUSE.

En la plataforma Pagure, utilizada en Fedora para la colaboración en código y metadatos de paquetes, se han identificado 4 vulnerabilidades. Para explotar los problemas identificados, se requiere tener una cuenta en el servicio Pagure, que cualquiera puede obtener (actualmente hay 24,899 usuarios registrados en Pagure.io). Tres de los problemas permiten leer archivos en el sistema, y uno de ellos permite ejecutar su propio código en. servidor. Los problemas fueron identificados el 1 de enero de 2024, reportados a través de bugzilla.redhat.com el 25 de abril de 2024 y solucionados en Pagure en un plazo de 3 horas.

  • Las vulnerabilidades CVE-2024-4981 y CVE-2024-47515 son causadas por un manejo incorrecto de enlaces simbólicos en las funciones de actualización de archivos y generación de archivos comprimidos. Estas vulnerabilidades permiten leer el contenido de archivos locales en el servidor; por ejemplo, se puede acceder al contenido del archivo con parámetros de sesión del administrador de Pagure y obtener acceso con sus privilegios. La explotación de la vulnerabilidad en la función _update_file_in_git() implica crear un repositorio en Pagure; añadir un commit con un nuevo archivo que se crea como enlace simbólico a un archivo del sistema deseado; y abrir dicho archivo para su edición en la interfaz web.
  • La vulnerabilidad (CVE-2024-4982) en la función view_issue_raw_file() permite salir del directorio base al especificar los caracteres "../" en los parámetros del Issue solicitado. Este problema permite leer archivos en el sistema, dependiendo de los permisos de acceso del proceso bajo el cual se ejecuta la interfaz web. Por ejemplo, para ver el archivo /etc/passwd se puede abrir la página "http://pagure.local:5000/your-repository/issue/raw/../../../../../../etc/passwd".
  • Una vulnerabilidad (CVE-2024-47516) en la función PagureRepo.log() permite la inyección de comandos y la ejecución de código en el servidor. El problema se debe a que al ver el historial de cambios de un archivo a través de la interfaz web, se llama al comando "git" pasando el identificador de la rama en la línea de comandos (por ejemplo, "/usr/bin/git --pretty=oneline --abbrev-commit -- README.md"). La validez del identificador no se verifica, por lo que se puede pasar cualquier opción de línea de comandos, como "--output=/tmp/foo.bar" para redirigir la salida a un archivo. Un atacante puede sobrescribir un archivo en el sistema al enviar una solicitud de este tipo: http://pagure.local:5000/test/history/README.md?identifier=--output=/tmp/foo.bar

    Pagure se ejecuta bajo el usuario git, por lo que solo se podrán sobrescribir los archivos de este usuario. Para ejecutar su propio código en el servidor, se puede aprovechar el servicio para acceder al repositorio por SSH, donde se ejecuta el comando "bash -c /usr/libexec/pagure/aclchecker.py". Un atacante puede usar la vulnerabilidad para sobrescribir el archivo "/srv/git/.bashrc" y este archivo se ejecutará en el intérprete de comandos bash al acceder al repositorio por ssh.

    El ataque consiste en registrarse en el sistema Pagure, crear un repositorio, agregar al repositorio un archivo README.md con un comentario de commit del tipo "|| /bin/bash" y enviar una solicitud "http://pagure.local:5000/test/history/README.md?identifier=--output=/srv/git/.bashrc". En el transcurso de estos pasos, se grabará en el archivo "/srv/git/.bashrc" una línea del tipo "34a5c43 || /bin/bash". Para ejecutar el archivo creado "/srv/git/.bashrc", solo se necesita conectarse al repositorio por SSH con su cuenta. La ejecución de código con los derechos del usuario git en el servidor Pagure permite controlar todo el contenido de los repositorios con los paquetes.

En la plataforma OBS (Open Build Service), utilizada en openSUSE y algunas otras distribuciones para la construcción de paquetes, se ha identificado una vulnerabilidad (CVE-2024-22033) que permite ejecutar su propio código en el servidor. La vulnerabilidad fue identificada el 27 de junio de 2024, reportada al proyecto openSUSE el 29 de junio y resuelta el 10 de julio.

La vulnerabilidad se encuentra en el servicio «obs-service-download_url», donde faltaba una verificación adecuada de la URL utilizada al ejecutar la utilidad wget desde un script que descarga el código fuente en OBS. Un atacante puede especificar en el servicio OBS la configuración del paquete generado, en la que en lugar de la URL para descargar el código, se indicará una opción de la línea de comandos para wget, por ejemplo: —output-document=\/tmp\/test tempfile

Para evitar el error al intentar ejecutar wget sin URL, en el ejemplo se indica la opción «download-manifest», que permite especificar una lista de URLs en un archivo separado. El ejemplo anterior llevará a la ejecución del comando: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 —output-document=\/tmp\/test

que permite escribir en el archivo \/tmp\/test el contenido descargado a través de la URL especificada en el archivo \/srv\/obs\/service\/XXXXX\/src\/tempfile, desde el código que el atacante cargó en OBS a través de la interfaz build.opensuse.org, que permite el registro libre. Además de sobrescribir el archivo en el servidor, el atacante también puede enviarse cualquier archivo, especificando en lugar de «—output-document» la opción «—post-file», por ejemplo, «—post-file=\/etc\/passwd». Así, el atacante puede leer y escribir archivos en el servidor, según lo permitan los permisos bajo los que se ejecute el servicio OBS.

Para convertir la posibilidad de escritura en un archivo en ejecución de código en el servidor, los investigadores propusieron un método que consta de dos etapas. Se requieren dos etapas porque el atacante puede crear un archivo «.wgetrc» con configuraciones para wget, pero eso no es suficiente para ejecutar comandos. Sin embargo, a través de «.wgetrc» se pueden crear condiciones para ejecutar cualquier programa en el sistema, pero sin pasarle argumentos. Para ejecutar código arbitrario, se sugiere iniciar el programa «prove», que procesa el archivo de configuración «.proverc», que permite especificar la opción «—exec» para ejecutar cualquier código.

En la primera etapa, mediante las manipulaciones mencionadas anteriormente con 'download-manifest' en el directorio personal del usuario 'obsservicerun', se crea un archivo '.proverc' que incluye los comandos que se ejecutarán al iniciar el proceso 'prove'. En la segunda etapa, se crea un archivo '.wgetrc' con el parámetro 'use-askpass=/usr/bin/prove', que llama a 'prove'. Una vez que se han generado estos archivos, es suficiente con establecer las condiciones para cargar cualquier dato usando wget, lo que llevará a la ejecución del código del atacante en el servidor con los derechos del usuario 'obsservicerun'. Los derechos del usuario 'obsservicerun' son suficientes para extraer claves de los repositorios que los usuarios de OBS utilizan para firmar paquetes.

Adición: El equipo de Seguridad de Productos de SUSE considera que el riesgo de la vulnerabilidad en OBS ha sido sobrestimado y la declaración de los investigadores de que el problema permite comprometer todos los paquetes en la distribución openSUSE no es precisa. Se señala que los servicios en la infraestructura build.opensuse.org se ejecutan utilizando contenedores aislados, que son recreados y no contienen información crítica. La vulnerabilidad identificada se evalúa como peligrosa, pero no suficiente para comprometer la infraestructura de construcción de openSUSE y los paquetes generados. Además, se indica que las acciones en la interfaz de OBS, descritas en el ejemplo de ataque, solo podrían haber sido realizadas en una versión de OBS instalada localmente en la estación de trabajo del desarrollador.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster