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 |
|
| ECS 3.7 e anteriores | ECS 3.8.1.x ou posterior |
|
| ECS 3.8.0.x | ECS 3.8.1.x ou posterior |
|
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)
- Faça upgrade do software ECS xDoctor para a versão mais recente.
- Adicione a lista de IPs externos.
- 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
- Faça upgrade do software ECS xDoctor para a versão mais recente disponível.
- 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
- 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.
- 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.
- Quando o carregamento estiver concluído, ative o SSH para o primeiro nó do sistema ECS usando admin.
- 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.rpmExemplo:
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
- 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
- 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
- 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~>
- 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.
- 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.comecs1-n4 ecs1-n4.dell.comecs1-n5 ecs1-n5.dell.comLoad_balancer1_IPLoad_balancer1_HostnameLoad_balancer1_FQDNLoad_balancer2_IPLoad_balancer2_HostnameLoad_balancer2_FQDN
- 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.comecs1-n4 ecs1-n4.dell.comecs1-n5 ecs1-n5.dell.com ecsdev1-m1 ecsdev1-m2 ecsdev1-m3Load_balancer1_IP Load_balancer1_HostnameLoad_balancer1_FQDNLoad_balancer2_IPLoad_balancer2_HostnameLoad_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!
- 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.
- 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
- 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_IPComando 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.
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 StorageArticle 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.