Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

Resumen

Además de permitir a los usuarios proporcionar sus propios pares de claves SSH para la autenticación, la plataforma Microsoft Azure se basa en los pares de claves SSH para habilitar algunas características que se agregan a la máquina virtual (VM) en el momento de la implementación. Recientemente descubrimos que, en algunos escenarios concretos, las claves públicas de estos certificados de la plataforma Microsoft Azure podrían agregarse inesperadamente al archivo .ssh/authorized_keys. Estos escenarios se contemplan solo cuando la VM se aprovisiona mediante el uso de cloud-init y el usuario selecciona características adicionales de Azure que dependen de los certificados, como una identidad de servicio administrada por el sistema.

Este comportamiento inesperado ocurre debido a un cambio en la lógica de aprovisionamiento de sistemas operativos específicos. Se trata de sistemas que usan cloud-init y que instalan inadvertidamente la clave pública de todos los certificados disponibles para la VM en el archivo de claves autorizadas para SHH durante la creación de la VM.  

Para obtener más información, consulte CVE-2019-0816.

Más información

Detalles del escenario

Se sabe que la lógica cloud-init, que se menciona en la sección "Resumen", existe actualmente en las imágenes de Azure para Ubuntu 18.04, además de en las imágenes de cloud-init para la versión preliminar pública de RHEL 7.4/7.5/7.6 y CentOS 7.4. Asimismo, también puede existir en imágenes personalizadas que usen estos sistemas operativos. 
 
Si habilita una de las siguientes características mientras aprovisiona una de las imágenes de Linux, es posible que vea claves adicionales e inesperadas en un archivo .ssh/authorized_keys, como cualquiera de las siguientes: 

  • Identidad administrada

  • Extensiones con configuración protegida

  • Implementación de una VM con claves de Key Vault en una VM

Identificar y corregir las VM existentes

Identificar

Para comprobar si tiene claves adicionales, revise el archivo de claves autorizadas (archivo vi.ssh/authorized_keys) para determinar si se han agregado claves adicionales que no tenía intención de incluir.

Es seguro eliminar manualmente cualquier clave pública SSH adicional que pueda haber sido agregada. Esto no afectará a las características que se implementan junto con la VM. Además, tampoco afectará al par de claves SSH especificado para la autenticación.

Si no sabe o no puede diferenciar qué claves públicas del archivo .ssh/authorized_keys ha especificado para la autenticación, siga estos pasos: 

  1. Revise las plantillas de implementación:

    1. claves públicas SSH

    2. claves SSH en la configuración de cloud-init

  2. Recupere las claves SSH implementadas en el momento de la creación de dentro de la VM, si tiene acceso a sudo/root. Para ello, siga estos pasos:

    1. Compruebe la configuración de cloud-init que se pasó en CustomData: sudo cat /var/lib/waagent/ovf-env.xml | grep "<ns1:CustomData>"
      Use el valor CustomData y, después, la descodificación Base64 para obtener las claves públicas que implementó: echo "<customData value>" | base64 -D

    2. Alternativamente, compruebe el servicio Instance Meta Data (IMDS) para ver la clave pública SSH que se pasó en la propiedad de la clave pública SSH de la creación de la VM: curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/publicKeys?api-version=2018-04-02&format=json"

Corregir

Si ha identificado certificados adicionales que no tenía intención de implementar en la VM, puede eliminarlos borrando la línea correspondiente del archivo authorized_keys.

Ejecute la corrección conectándose a la VM de forma interactiva, o utilice la extensión de script personalizado o RunCommand en varias VM.

VM implementadas con extensiones con configuración protegida o una identidad administrada

Use el siguiente script para eliminar las claves públicas de los certificados en los que se ha implementado la VM con extensiones o identidad administrada. Esta acción no eliminará las claves que se especificaron al implementar una VM, o si la VM se implementó con claves de Key Vault.

Importante

Se recomienda hacer una copia de seguridad del archivo authorized_keys antes de ejecutar este script.

 

#!/bin/bash
set -e

# /var/lib/waagent has *.crt files that include the crt files corresponding to 
# the user provided public keys and one additional .crt file from MSI.
# This script converts the content of the .crt file into the ssh public key and
# remove it from the authorized_keys file
readarray -t CRT_FILES < <(grep -l -E "(Microsoft.ManagedIdentity|Windows Azure)" /var/lib/waagent/*.crt)
for ((i=0; i < ${#CRT_FILES[@]}; i++))
do
    PUBKEY=$(openssl x509 -in "${CRT_FILES[$i]}" -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8)
    sed -i -e "\@$PUBKEY@d" $HOME/.ssh/authorized_keys
Done 

Una vez ejecutado el script, compruebe el archivo ssh/authorized_keys para asegurarse de que solo están presentes las claves públicas conocidas.

VM implementadas con secretos de Key Vault

Para identificar si la clave se agregó al implementar con claves de Key Vault, siga estos pasos:

  1. Obtenga el nombre del certificado de Key Vault que ha implementado con la VM, revise las plantillas de código de implementación Az CLI o ARM, o ejecute Az CLI:
      az vm show --resource-group <resourceGroupName> --name <vmName> | grep certificateUrl

    La respuesta mostrará el nombre del certificado:
      "certificateUrl": "https://<keyVaultname>.vault.azure.net/secrets/<certName>/xxxxxxxxxxxxx"

  2. Descargue el certificado:
      az keyvault certificate download --vault-name <keyVaultName> --name <certName> --encoding PEM --file public.pem

  3. Extraiga la clave pública:
      openssl x509 -in public.pm -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8

  4. Compare la salida del paso anterior con los certificados restantes del archivo ssh/authorized_keys.
      vi .ssh/authorized_keys file

Solución

Imágenes de Azure Marketplace

Se han aplicado correcciones a cloud-init en las imágenes de Azure identificadas:

  • Canonical:UbuntuServer:18.04-LTS:18.04.201902190

Nota

Se agregará una actualización a las siguientes imágenes más adelante.

  • Canonical:UbuntuServer:18.10:x

  • RedHat:RHEL:7-RAW-CI (imagen de vista previa pública)

  • OpenLogic:CentOS:7-CI (imagen de vista previa pública)

Este artículo se actualizará cuando las imágenes estén disponibles.

Imágenes personalizadas

Si está usando imágenes personalizadas aprovisionadas por cloud-init para los sistemas operativos conocidos, tendrá que actualizar su imagen personalizada de origen.

Imágenes de Ubuntu 18.04

Para actualizar una imagen personalizada de origen, debe realizar las siguientes modificaciones:

  • Edite el siguiente archivo:

    /etc/cloud/cloud.cfg.d/90-azure.cfg

  • Agregue el código siguiente al final del archivo.

Importante

El código debe añadirse exactamente como se muestra, incluyendo los espacios.

datasource:
   Azure:
     agent_command: [service, walinuxagent, start]

Imágenes de RHEL 7.4/7.5/7.6 y CentOS 7.6

Si ha creado previamente las imágenes de RHEL o CentOS con estos pasos (o un método similar), debe actualizar la imagen de origen a partir de la cual creó las VM. Los siguientes son pasos adicionales que se requieren para agregar a la configuración de la imagen de VM de origen existente:

Paso 1 

Edite el siguiente archivo:

/etc/cloud/cloud.cfg.d/91-azure_datasource.cfg 

Importante

El código debe añadirse exactamente como se muestra, incluyendo los espacios.

Agregue las líneas siguientes al final del archivo: 

datasource:
   Azure:
     agent_command: [systemctl, start, waagent, --no-block]

Paso 2

Actualice la configuración del agente como se muestra a continuación:

cp /lib/systemd/system/waagent.service /etc/systemd/system/waagent.service
sed -i 's/After=network-online.target/WantedBy=cloud-init.service\\nAfter=network.service systemd-networkd-wait-online.service/g' /etc/systemd/system/waagent.service
systemctl daemon-reload

paquetes de cloud-init

Todos los paquetes de cloud-init que incluyen una corrección están en proceso de actualización. Microsoft está investigando este problema y publicará más información en este artículo cuando tenga más datos a su disposición. 

Preguntas más frecuentes

P1: ¿Ha obtenido acceso Microsoft a mi VM?

R1: Las claves de cifrado se usan para administrar identidades y las extensiones no están diseñadas para el acceso de los empleados de Microsoft. Contamos con procesos para supervisar, registrar y prevenir este tipo de acceso. Como medida de seguridad, estamos revisando todos los registros para asegurarnos de que no se haya accedido indebidamente a ninguna clave de cliente. En el caso de los certificados almacenados en Key Vault a los que se hace referencia en una implementación de VM o VMSS, los empleados de Microsoft no tienen acceso a los secretos.

P2: ¿Están afectados todos los SO y versiones implementados con cloud-init?

R2: No. Hemos visto que este problema de clave extraña solo se produce en los sistemas operativos identificados. No lo hemos visto en versiones anteriores de Ubuntu. Esto se debe a que esos sistemas usan un mecanismo diferente para establecer las claves públicas.

P3: ¿Incluyen la corrección los paquetes de cloud-init afectados para las distribuciones de Linux?

R3: Estamos trabajando para agregar las correcciones a los paquetes de las versiones afectadas y actualizaremos este artículo cuando completemos esta tarea.

P4: ¿Microsoft actualizará automáticamente cualquier VM afectada? 

R4: No. Microsoft no cambiará el contenido de las VM que ya haya aprovisionado.

P5: Nuestras directivas de seguridad me impiden usar una VM de Linux con contenido extraño en authorized_keys. ¿Qué puedo hacer al respecto?

R5: Puede eliminar de forma segura la línea incorrecta del archivo authorized_keys. Esto no afectará ni al par de claves SSH que creó y controla, ni a la identidad administrada. Puede hacerlo manualmente o ejecutando un script o un comando personalizados en cualquier flota afectada.

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×