ECS: Cómo evitar la inyección de encabezado de host en ECS 3.8.0 y versiones posteriores para evitar errores 403 de la API de administración y una interfaz de usuario de Grafana inaccesible

Summary: A partir de ECS 3.8.0.x, se aborda un problema de seguridad relacionado con la inserción de encabezados de host (consulte las notas de la versión de STORAGE-27164).

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions

¿Qué es la inyección de encabezado de host?

  • La aplicación confía en el encabezado de host HTTP proporcionado por el usuario y utiliza el encabezado de host proporcionado por el usuario para redirigir a otra página. 
  • Un atacante podría aprovecharse de esto cambiando el encabezado del host HTTP a un nombre de host malicioso y redirigiendo al usuario a una página web maliciosa. 
Nota: Esto solo afecta a las llamadas de la API de administración a través de un proxy o un balanceador de carga. No afecta las operaciones de datos.


¿Qué cambios se implementarán a partir de ECS 3.8.0.x?

Como parte de la corrección, se implementa un nuevo conjunto de API que permite configurar o anular la configuración de la lista de nombres de servidor permitidos. El valor del encabezado del host de las solicitudes entrantes se verifica con esa lista. La solicitud se rechaza si el valor del encabezado del host no está presente en esa lista.

A continuación, se presenta el nuevo conjunto de API REST presentadas para registrar y administrar la lista de servidores aceptados.
 
Nombre del recurso Descripción
GET /acceptedservernames/ Obtiene la lista de nombres aceptados de servidores de administración
POST /acceptedservernames/ Crea o reemplaza la lista de nombres aceptados de servidores de administración
PUT /acceptedservernames/ Actualice la lista de nombres aceptados de servidores de administración.
DELETE /acceptedservernames/ Elimina la lista de nombres aceptados de servidores de administración

 

¿En qué circunstancias se ve afectado?

Casos de uso para implementar la solución de configuración de la lista de servidores aceptados en ECS:

Actualización de Actualización o instalación en Corrección
ECS 3.7 y versiones anteriores ECS 3.8.0.x
  • La implementación de la solución es obligatoria si utiliza un proxy o un balanceador de carga para enviar llamadas de la API de administración a ECS.
  • Si no se implementa la solución, recibirá errores 403 de la API de administración y no se podrá acceder a la interfaz de usuario de Grafana.
ECS 3.7 y versiones anteriores ECS 3.8.1.x o superior
  • La implementación de la solución es opcional si utiliza un proxy o un balanceador de carga para enviar llamadas de la API de administración a ECS.
  • Si no se implementa la solución, seguirá siendo vulnerable a esta vulnerabilidad y ECS acepta todas las llamadas de la API de administración. 
ECS 3.8.0.x ECS 3.8.1.x o superior
  • Si ya implementó la solución en ECS 3.8.0, la solución permanece implementada en ECS 3.8.1 o versiones más recientes.
  • Tiene la opción de revertir la solución para permitir que todas las direcciones IP realicen llamadas a la API de administración.
  • Si decide revertir la solución, seguirá siendo vulnerable a esta vulnerabilidad y ECS acepta todas las llamadas de la API de administración. 



¿Qué indica que ha encontrado un problema?

  • Todas las API de inicio de sesión de administración fallarán con 403-forbidden después de una nueva instalación o actualización a 3.8.0.x desde versiones 3.8 anteriores.
  • También es posible que no se pueda acceder al panel de Grafana. 


¿Qué errores muestran los registros en ECS?

"GET /login HTTP/1.1" 403 error is seen in /opt/storageos/logs/nginx/access.log and /opt/storageos/logs/objcontrolsvc.log on nodes API calls are made against.

 

Resumen de la resolución (después de la actualización a 3.8.0.x o posterior)

  1. Actualice el software ECS xDoctor a la versión más reciente.
  2. Agregue la lista de direcciones IP externas.
  3. No es necesario registrar servidores externos que realicen llamadas a la API de administración directamente a los nodos de ECS o que utilicen las IP de los nodos de ECS, ya que la conexión ya se realizó correctamente. El siguiente procedimiento solo es necesario si la conexión se pasa a través de un servidor proxy o un balanceador de carga. Por lo tanto, todos los proxy o balanceadores de carga se deben agregar a la lista de aceptación de nombres de servidores de administración.


Actualización de 1-xDoctor

  1. Actualice el software ECS xDoctor a la versión más reciente disponible.
  1. Compruebe la versión de xDoctor que se ejecuta en el sistema. Si la versión es 4.8-87.0 o posterior, vaya al paso "Agregar lista de direcciones IP externas". Si ese no es el caso, continúe con los pasos que se indican a continuación.
Comando: 
# sudo xdoctor --version
Ejemplo:
admin@node1:~> sudo xdoctor --version
4.8-87.0
  1. Inicie sesión en el sitio de soporte de Dell, conéctese directamente a esta ubicación de descarga de ECS Download, busque xDoctor mediante la barra de búsqueda de palabras clave y haga clic en el enlace xDoctor 4.8-87.0 RPM para descargar. Para ver las notas de la versión, conéctese directamente a la página del producto ECS y seleccione Manuales y documentos en la barra lateral desde donde deberían estar disponibles para su descarga.
  2. Una vez descargado el RPM, utilice cualquier programa SCP remoto para cargar el archivo en el directorio /home/admin en el primer nodo de ECS.
  3. Una vez finalizada la carga, acceda mediante el protocolo SSH al primer nodo del sistema ECS mediante el usuario administrador.
  4. Actualice xDoctor en todos los nodos con la versión recientemente distribuida.  
Comando:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
Ejemplo:
admin@ecs-n1:~> sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
2022-07-04 07:41:49,209: xDoctor_4.8-83.0 - INFO    : xDoctor Upgrader Instance (1:SFTP_ONLY)
2022-07-04 07:41:49,210: xDoctor_4.8-83.0 - INFO    : Local Upgrade (/home/admin/xDoctor4ECS-4.8-84.0.noarch.rpm)
2022-07-04 07:41:49,226: xDoctor_4.8-83.0 - INFO    : Current Installed xDoctor version is 4.8-86.0
2022-07-04 07:41:49,242: xDoctor_4.8-86.0 - INFO    : Requested package version is 4.8-84.0
2022-07-04 07:41:49,242: xDoctor_4.8-86.0 - INFO    : Updating xDoctor RPM Package (RPM)
2022-07-04 07:41:49,293: xDoctor_4.8-86.0 - INFO    :  - Distribute package
2022-07-04 07:41:50,759: xDoctor_4.8-86.0 - INFO    :  - Install new rpm package
2022-07-04 07:42:04,401: xDoctor_4.8-86.0 - INFO    : xDoctor successfully updated to version 4.8-87.0
  1. Si el entorno es un VDC de múltiples racks, el nuevo paquete de xDoctor se debe instalar en el primer nodo de cada rack. Para identificar estos primeros racks, ejecute el siguiente comando. En esta instancia, hay cuatro racks y cuatro racks principales resaltados
  1. Busque los nodos primarios del rack (resaltados en negrita a continuación).
Comando:
# svc_exec -m "ip address show private.4 |grep -w inet"
Ejemplo:
admin@ecsnode1~> svc_exec -m "ip address show private.4 |grep -w inet"
svc_exec v1.0.2 (svc_tools v2.1.0)                 Started 2021-12-20 14:03:33
 
Output from node: r1n1                                retval: 0
    inet 169.254.1.1/16 brd 169.254.255.255 scope global private.4
 
Output from node: r2n1                                retval: 0
    inet 169.254.2.1/16 brd 169.254.255.255 scope global private.4
 
Output from node: r3n1                                retval: 0
    inet 169.254.3.1/16 brd 169.254.255.255 scope global private.4
 
Output from node: r4n1                                retval: 0
    inet 169.254.4.1/16 brd 169.254.255.255 scope global private.4
  1. Copie el paquete del primer nodo del sistema (R1N1) en los otros primeros racks según se indica a continuación:
Ejemplo:
admin@ecs-n1: scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.2.1:/home/admin/
xDoctor4ECS-4.8-84.0.noarch.rpm                                                                                                                        100%   32MB  31.9MB/s   00:00
admin@ecsnode1~> scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.3.1:/home/admin/
xDoctor4ECS-4.8-84.0.noarch.rpm                                                                                                                        100%   32MB  31.9MB/s   00:00
admin@ecsnode1~> scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.4.1:/home/admin/
xDoctor4ECS-4.8-87.0.noarch.rpm                                                                                                                        100%   32MB  31.9MB/s   00:00
admin@ecsnode1~>
  1. Según el paso 1 anterior, ejecute el mismo comando de instalación de xDoctor en cada uno de los racks principales identificados anteriormente. 
Comando:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm


2-A Agrega una lista de direcciones IP externas.

  • Un usuario de administración debe realizar esta actividad con una función de administrador de seguridad. En el siguiente ejemplo, usamos el usuario raíz , ya que también tiene la funcionalidad de administración de seguridad.
  • Se puede realizar en cualquier nodo de ECS VDC.
  • En una federación con varios VDC, se debe realizar después de que se hayan actualizado todos los VDC de la federación. A continuación, el procedimiento se puede aplicar a cada VDC.
  • NOTA: La lista de permitidos se replica en todos los VDC federados, por lo que agregar entradas de la lista de permitidos en un clúster replica esas entradas en el otro clúster y sobrescribe todo lo que ya se haya agregado en el otro clúster
  • La herramienta produce una excepción "401: no autorizado" si el usuario no es el administrador de seguridad o se utiliza una credencial incorrecta.
  1. Prepare la lista de nombres de servidores (IP, nombre de host y FQDN) que se agregarán a la lista de confianza. Consolide la lista en un archivo, cada línea con un nombre de servidor. Si la red de administración está separada, el FQDN de los nodos de administración también se debe agregar a la lista de confianza. Es posible que muchos clientes deban agregar los nombres de los nodos; Corto con svc_exec "hostname -s" y largo con svc_exec nombre de host
Para comprobar la separación de la red para la administración, ejecute lo siguiente y busque "mgmt" resaltado.

Comando:
# getrackinfo -n
Ejemplo:
#getrackinfo -n
Named networks
==============
Node ID       Network          Ip Address        Netmask            Gateway            VLAN               Interface
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
Ejemplo a continuación con la lista de nombres de servidores (reemplácelos por los reales).
# cat trust.server.list
ecs1-n1
ecs1-n1.dell.com
ecs1-n2
ecs1-n2.dell.com
ecs1-n3
ecs1-n3.dell.com
ecs1-n4
ecs1-n4.dell.com 
ecs1-n5
ecs1-n5.dell.com 
Load_balancer1_IP
Load_balancer1_Hostname
Load_balancer1_FQDN
Load_balancer2_IP
Load_balancer2_Hostname
Load_balancer2_FQDN
  1. Revise los registros para verificar el nombre del servidor en busca de errores 403:  

            Comando: 

svc_log -f 'ERROR  HostHeaderAcceptListFilter.java' -sr objcontrolsvc -start '2 hours ago'

            Ejemplo:

# svc_log -f 'ERROR  HostHeaderAcceptListFilter.java' -sr objcontrolsvc -start '2 hours ago'
svc_log v1.0.31 (svc_tools v2.13.1)                 Started 2023-10-10 18:00:11

Running on nodes:              <All nodes>
Time range:                    2023-10-13 17:00:00 - 2023-10-13 18:11:47
Filter string(s):              'ERROR  HostHeaderAcceptListFilter.java'
Show filename(s):              True
Show nodename(s):              True
Search reclaim logs (if any):  False

169.254.1.1 objcontrolsvc.log 2023-10-10T17:00:07,188 [qtp47151359-4412] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.1 objcontrolsvc.log 2023-10-10T17:00:38,609 [qtp47151359-4386] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.1 objcontrolsvc.log 2023-10-10T17:01:07,499 [qtp47151359-4310] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.2 objcontrolsvc.log 2023-10-10T17:05:01,743 [qtp1754883736-3393] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m2
169.254.1.2 objcontrolsvc.log 2023-10-10T17:05:01,756 [qtp1754883736-3397] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m2
169.254.1.3 objcontrolsvc.log 2023-10-10T17:30:01,533 [qtp1289718177-2883] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m3
169.254.1.3 objcontrolsvc.log 2023-10-10T17:30:01,546 [qtp1289718177-2944] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m3
Ejemplo a continuación con la lista de nombres de servidores (reemplácelos por los reales).
# cat trust.server.list
ecs1-n1
ecs1-n1.dell.com
ecs1-n2
ecs1-n2.dell.com
ecs1-n3
ecs1-n3.dell.com
ecs1-n4
ecs1-n4.dell.com 
ecs1-n5
ecs1-n5.dell.com
ecsdev1-m1
ecsdev1-m2
ecsdev1-m3
Load_balancer1_IP
Load_balancer1_Hostname
Load_balancer1_FQDN
Load_balancer2_IP
Load_balancer2_Hostname
Load_balancer2_FQDN

Agregue servidores de confianza con la lista proporcionada que suministra el <mgmt_user>. Se solicita al usuario que ingrese la contraseña para el mgmt_user, ingrese la contraseña y, a continuación, presione Intro para continuar.

Comando: 
svc_param asn add -u <mgmt_user> -p -f <server.list>
Ejemplo:
# svc_param asn add -u root -p -f trust.server.list
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-11-08 19:27:16
 
add trusted servers successfully!
  1. Recupere la lista de servidores de confianza. La lista puede ser a) impresa en una pantalla para una rápida comprobación si es corta, o b) guardada en un archivo para su copia de seguridad o inspección.
  1. Imprime el resultado en la pantalla. Se le solicitará que ingrese la contraseña; presione Intro para continuar.
Comando:
 svc_param asn list -u <mgmt_user> -p
Ejemplo:
# svc_param asn list -u root -p
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2023-10-10 19:32:58
 
Found 19 trusted servers:
 
        Load_balancer1_FQDN
        Load_balancer1_Hostname
        Load_balancer1_IP
        Load_balancer2_FQDN
        Load_balancer2_Hostname
        Load_balancer2_IP
        ecs-n1
        ecs-n1.nas2008.com
        ecs-n2
        ecs-n2.nas2008.com
        ecs-n3
        ecs-n3.nas2008.com
        ecs-n4
        ecs-n4.nas2008.com
        ecs-n5
        ecs-n5.nas2008.com
        ecsdev1-m1
        ecsdev1-m2
        ecsdev1-m3
  1. Guarde el resultado en un archivo. Se le solicitará que ingrese la contraseña; presione Intro para continuar.
Comando: 
svc_param asn list -u <mgmt_user> -p -o <output file>
Ejemplo:
# svc_param asn list -u root -p -o server.list.backup
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-10-10 19:38:05
 
Found 19 trusted servers:
 
Please find the result in /home/admin/server.list.backup
 
# cat /home/admin/server.list.backup
Load_balancer1_FQDN
Load_balancer1_Hostname
Load_balancer1_IP
Load_balancer2_FQDN
Load_balancer2_Hostname
Load_balancer2_IP
ecs-n1
ecs-n1.nas2008.com
ecs-n2
ecs-n2.nas2008.com
ecs-n3
ecs-n3.nas2008.com
ecs-n4
ecs-n4.nas2008.com
ecs-n5
ecs-n5.nas2008.com
ecsdev1-m1
ecsdev1-m2
ecsdev1-m3

Nota: En el caso de que NO se utilice un equilibrador de carga y siga obteniendo lo mismo nginx 403 Forbidden error en la interfaz de usuario de ECS, compruebe si el cliente está utilizandola red VLAN. Separación mediante el método getrackinfo -n por paso 1. Si es así, agregue los nombres DNS de administración y las direcciones IP de administración de la red del cliente a la lista de servidores de confianza para todos sus nodos.

(Como se muestra a continuación)

Ejemplo:

# cat trust.server.list
10.x.x.1
10.x.x.2
10.x.x.3
10.x.x.4
10.x.x.5
10.x.x.6
test-n1.domain.example
test-n2.domain.example
test-n3.domain.example
test-n4.domain.example
test-n5.domain.example
test-n5.domain.example



2-B Elimina la lista de direcciones IP externas.

Si debe eliminar entradas de una lista de confianza, se le solicitará que ingrese la contraseña y presione Intro para continuar. Aparece un banner de server.to.remove.list debe crearse.

Ejemplo: 
# cat server.list.to.remove
Load_balancer1_Hostname
Load_balancer2_IP
Comando para eliminar:
 svc_param asn remove -u <mgmt_user> -p -f <server.to.remove.list>
(Se le solicitará que ingrese la contraseña; presione Intro para continuar).

Ejemplo:
# svc_param asn remove -u root -p -f server.list.to.remove
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-11-08 19:42:00
 
remove trusted servers successfully!

Vuelva a enumerar las entradas para confirmar que se hayan eliminado las entradas. 
Comando: 
svc_param asn list -u root -p
(Se le solicitará que ingrese la contraseña; presione Intro para continuar).

Ejemplo:
# svc_param asn list -u root -p
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-11-08 19:43:19
 
Found 4 trusted servers:
 
        Load_balancer1_FQDN
        Load_balancer1_IP
        Load_balancer2_FQDN
        Load_balancer2_Hostname

Additional Information

Para obtener más detalles y contexto sobre este cambio, consulte los siguientes documentos disponibles en el soporte de Dell:

  • Notas de la versión de ECS 3.8.0 o ECS 3.8.1
  • Guía de administración de ECS 3.8.0 o ECS 3.8.1
  • Guía de seguridad de ECS 3.8.0 o ECS 3.8.1

Affected Products

ECS, ECS Appliance, Elastic Cloud Storage
Article Properties
Article Number: 000205031
Article Type: How To
Last Modified: 14 Nov 2024
Version:  30
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.