ECS: Como evitar a injeção de cabeçalho do host no ECS 3.8.0 e versões posteriores para evitar erros da API de gerenciamento 403 e a interface do usuário do Grafana inacessível

Summary: A partir do ECS 3.8.0.x, foi resolvido um problema de segurança em relação à injeção de cabeçalho do host (consulte as notas da versão para 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

O que é injeção de cabeçalho do host?

  • O aplicativo confia no cabeçalho de host HTTP fornecido pelo usuário e usa o cabeçalho de host fornecido pelo usuário para redirecionar para outra página. 
  • Um invasor pode tirar proveito disso alterando o cabeçalho do host HTTP para um nome de host mal-intencionado e redirecionando o usuário para uma página da Web mal-intencionada. 
Nota: Isso afeta apenas as chamadas API de gerenciamento por meio de um proxy ou balanceador de carga. Ele não afeta as operações de dados.


Quais alterações estão sendo implementadas a partir do ECS 3.8.0.x?

Como parte da correção, um novo conjunto de APIs é implementado que permite configurar ou desconfigurar a lista de nomes de servidor permitidos. O valor do cabeçalho do host das solicitações recebidas é verificado nessa lista. A solicitação será rejeitada se o valor do cabeçalho do host não estiver presente nessa lista.

Abaixo está o novo conjunto de APIs REST introduzido para registrar e gerenciar a lista de servidores aceitos.
 
Nome do recurso Descrição
GET /acceptedservernames/ Obtém a lista de nomes aceitos do servidor de gerenciamento
POST /acceptedservernames/ Cria ou substitui a lista de nomes aceitos do servidor de gerenciamento
PUT /acceptedservernames/ Atualize a lista de nomes aceitos do servidor de gerenciamento.
DELETE /acceptedservernames/ Exclui a lista de nomes aceitos do servidor de gerenciamento

 

Em que circunstâncias você é afetado?

Casos de uso para implementar a solução de configuração da lista de servidores aceitos no ECS:

Fazendo upgrade a partir do Fazendo upgrade para ou instalando em Remediação
ECS 3.7 e anteriores ECS 3.8.0.x
  • A implementação da solução é obrigatória se você estiver usando um proxy ou um balanceador de carga para enviar chamadas à API de gerenciamento ao ECS.
  • Não implementar a solução significa que você recebe erros 403 da API de gerenciamento e que a interface do usuário do Grafana está inacessível.
ECS 3.7 e anteriores ECS 3.8.1.x ou posterior
  • A implementação da solução será opcional se você estiver usando um proxy ou um balanceador de carga para enviar chamadas à API de gerenciamento ao ECS.
  • Não implementar a solução significa que você permanece vulnerável a essa vulnerabilidade, e o ECS aceita todas as chamadas de API de gerenciamento. 
ECS 3.8.0.x ECS 3.8.1.x ou posterior
  • Se você já tiver implementado a solução no ECS 3.8.0, a solução permanecerá em vigor no ECS 3.8.1 ou posterior.
  • Você tem a opção de reverter a solução para permitir que todos os IPs façam chamadas de API de gerenciamento.
  • Se você optar por reverter a solução, permanecerá vulnerável a essa vulnerabilidade, e o ECS aceitará todas as chamadas de API de gerenciamento. 



O que indica que você encontrou um problema?

  • Todas as APIs de log-in de gerenciamento falharão com o 403-forbidden após a nova instalação ou o upgrade para a versão 3.8.0.x a partir de versões anteriores da 3.8.
  • O painel do Grafana também pode estar inacessível. 


Quais erros os logs mostram no 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.

 

Resumo da resolução (após o upgrade para a versão 3.8.0.x ou posterior)

  1. Faça upgrade do software ECS xDoctor para a versão mais recente.
  2. Adicione a lista de IPs externos.
  3. Não há necessidade de registrar servidores externos que fazem chamadas API de gerenciamento diretamente para os nós do ECS diretamente ou usando os IPs dos nós do ECS, pois a conexão já seria bem-sucedida. O procedimento abaixo só será necessário se a conexão for passada por um servidor proxy ou balanceador de carga. Portanto, todos os proxy e/ou balanceadores de carga devem ser adicionados à lista de aceitação de nomes de servidores de gerenciamento.


Upgrade do 1-xDoctor

  1. Faça upgrade do software ECS xDoctor para a versão mais recente disponível.
  1. Verifique a versão do xDoctor em execução no sistema. Se a versão for 4.8-87.0 ou posterior, vá para a etapa "Adicionar lista de IPs externos". Caso contrário, prossiga com as etapas abaixo.
Comando: 
# sudo xdoctor --version
Exemplo:
admin@node1:~> sudo xdoctor --version
4.8-87.0
  1. Acesse o site do Suporte Dell, conecte-se diretamente a este local de download do ECS, pesquise por xDoctor usando a barra de pesquisa de palavras-chave e clique no link xDoctor 4.8-87.0 RPM para fazer download. Para visualizar as notas da versão, conecte-se diretamente à página do produto do ECS e selecione Manuais e documentos na barra lateral de onde eles devem estar disponíveis para download.
  2. Depois que o RPM for baixado, use qualquer programa SCP remoto para fazer o carregamento do arquivo no diretório /home/admin no primeiro nó do ECS.
  3. Quando o carregamento estiver concluído, ative o SSH para o primeiro nó do sistema ECS usando admin.
  4. Faça upgrade do xDoctor em todos os nós com a versão recém-distribuída.  
Comando:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
Exemplo:
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. Se o ambiente for um VDC de vários racks, o novo pacote do xDoctor deverá ser instalado no primeiro nó de cada rack. Para identificar essas rack primários, execute o comando abaixo. Neste exemplo, há quatro racks e quatro racks primários destacados
  1. Encontre os nós primários do rack (destacados em negrito abaixo).
Comando:
# svc_exec -m "ip address show private.4 |grep -w inet"
Exemplo:
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 o pacote do primeiro nó do sistema (R1N1) para os outros racks primários conforme abaixo:
Exemplo:
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. De acordo com a etapa 1 acima, execute o mesmo comando de instalação do xDoctor em cada um dos racks primários acima identificados anteriormente. 
Comando:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm


2-A Adicionar lista de IPs externos.

  • Um usuário de gerenciamento deve realizar essa atividade com uma função de administrador de segurança. No exemplo abaixo, usamos o usuário root , que também tem um recurso de Administração de segurança.
  • Isso pode ser feito em qualquer nó no VDC do ECS.
  • Em uma federação com vários VDCs, ele deverá ser executado depois que todos os VDCs da federação tiverem recebido upgrade. Em seguida, o procedimento pode ser aplicado a cada VDC.
  • Nota: A lista de permissões é replicada em VDCs federados, portanto, a adição de entradas da lista de permissões em um cluster replica essas entradas para outro cluster e substitui tudo o que já foi adicionado no outro cluster
  • A ferramenta lançará uma exceção "401 - Não autorizado" se o usuário não for administrador de segurança ou se a credencial incorreta for usada.
  1. Prepare a lista de nomes de servidor (IP, nome do host e FQDN) a serem adicionados à lista de confiança. Consolide a lista em um arquivo, cada linha com um nome de servidor. Se a rede de gerenciamento for separada, o FQDN dos nós de gerenciamento também deverá ser adicionado à lista confiável. Muitos clientes podem ter que adicionar os nomes dos nós; Curto usando svc_exec "hostname -s" e longo usando svc_exec hostname
Para verificar a separação de rede para gerenciamento, execute o comando abaixo e procure por "mgmt" realçado.

Comando:
# getrackinfo -n
Exemplo:
#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
Exemplo abaixo com a lista de nomes de servidores (substitua por nomes reais).
# 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. Verifique os logs para verificar o nome do servidor em busca de erros 403:  

            Comando: 

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

            Exemplo:

# 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
Exemplo abaixo com a lista de nomes de servidores (substitua por nomes reais).
# 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

Adicione servidores confiáveis com a lista fornecida que fornece os <mgmt_user>. O usuário é solicitado a digitar a senha do mgmt_user, digitar a senha e, em seguida, pressionar Enter para continuar.

Comando: 
svc_param asn add -u <mgmt_user> -p -f <server.list>
Exemplo:
# 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 a lista de servidores confiáveis. A lista pode ser a) impressa em uma tela para verificação rápida se for curta, ou b) salva em um arquivo para backup ou inspeção.
  1. Imprima o resultado na tela. Você precisará digitar a senha. Pressione Enter para continuar.
Comando:
 svc_param asn list -u <mgmt_user> -p
Exemplo:
# 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. Salve o resultado em um arquivo. Você precisará digitar a senha. Pressione Enter para continuar.
Comando: 
svc_param asn list -u <mgmt_user> -p -o <output file>
Exemplo:
# 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: No caso em que um balanceador de carga NÃO é usado e ainda está recebendo o mesmo nginx 403 Forbidden erro na interface do usuário do ECS, verifique se o cliente está usandoa rede VLAN. Separação usando o getrackinfo -n por etapa 1. Em caso afirmativo, adicione os nomes DNS de gerenciamento e os endereços IP de gerenciamento da rede do cliente à lista de servidores confiáveis de todos os nós.

(Como abaixo)

Exemplo:

# 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 Remover lista de IPs externos.

Se precisar remover entradas de uma lista confiável, será solicitado que você insira a senha e pressione Enter para continuar. A server.to.remove.list deve ser criado.

Exemplo: 
# cat server.list.to.remove
Load_balancer1_Hostname
Load_balancer2_IP
Comando para remover:
 svc_param asn remove -u <mgmt_user> -p -f <server.to.remove.list>
(Você precisará digitar a senha, pressione Enter para continuar.)

Exemplo:
# 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!

Liste as entradas novamente para confirmar se elas foram removidas. 
Comando: 
svc_param asn list -u root -p
(Você precisará digitar a senha, pressione Enter para continuar.)

Exemplo:
# 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 obter mais detalhes e contexto sobre essa alteração, consulte os seguintes documentos disponíveis no Suporte Dell:

  • Notas da versão do ECS 3.8.0 ou ECS 3.8.1
  • Guia de administração do ECS 3.8.0 ou ECS 3.8.1
  • Guia de segurança do ECS 3.8.0 ou 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.