ECS : Comment empêcher l’injection d’en-tête d’hôte sur ECS 3.8.0 et versions ultérieures pour éviter les erreurs de l’API de gestion 403 et l’interface utilisateur Grafana inaccessible

Summary: À partir d’ECS 3.8.0.x, un problème de sécurité a été résolu concernant l’injection d’en-tête d’hôte (reportez-vous aux notes de mise à jour 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’est-ce que l’injection d’en-tête d’hôte ?

  • L’application fait confiance à l’en-tête d’hôte HTTP fourni par l’utilisateur et utilise l’en-tête d’hôte fourni par l’utilisateur pour rediriger vers une autre page. 
  • Un attaquant pourrait en tirer parti en modifiant l’en-tête de l’hôte HTTP en un nom d’hôte malveillant et en redirigeant l’utilisateur vers une page Web malveillante. 
Remarque : Cela n’affecte que les appels de l’API de gestion via un proxy ou un équilibreur de charge. Cela n’a aucun impact sur les opérations de données.


Quelles sont les modifications mises en œuvre à partir d’ECS 3.8.0.x ?

Dans le cadre du correctif, un nouvel ensemble d’API est implémenté qui permet de définir ou de désassocier la liste des noms de serveur autorisés. La valeur de l’en-tête hôte des demandes entrantes est vérifiée par rapport à cette liste. La demande est rejetée si la valeur de l’en-tête de l’hôte n’est pas présente dans cette liste.

Vous trouverez ci-dessous le nouvel ensemble d’API REST introduites pour l’enregistrement et la gestion de la liste des serveurs acceptés.
 
Nom de la ressource Description
GET /acceptedservernames/ Obtient la liste des noms de serveur de gestion acceptés
POST /acceptedservernames/ Crée ou remplace la liste des noms de serveur de gestion acceptés
PUT /acceptedservernames/ Mettez à jour la liste des noms de serveur de gestion acceptés.
DELETE /acceptedservernames/ Supprime la liste des noms de serveur de gestion acceptés

 

Dans quelles circonstances êtes-vous concerné ?

Cas d’utilisation pour implémenter la solution de configuration de la liste des serveurs acceptés sur ECS :

Mise à niveau à partir de Mise à niveau vers ou installation sur Correction
ECS 3.7 et versions antérieures ECS 3.8.0.x
  • L’implémentation de la solution est obligatoire si vous utilisez un proxy ou un équilibreur de charge pour envoyer des appels d’API de gestion à ECS.
  • Si vous n’implémentez pas la solution, vous recevez des messages d’erreur Management API 403 et l’interface utilisateur Grafana est inaccessible.
ECS 3.7 et versions antérieures ECS 3.8.1.x ou version ultérieure
  • La mise en œuvre de la solution est facultative si vous utilisez un proxy ou un équilibreur de charge pour envoyer des appels d’API de gestion à ECS.
  • Si vous ne mettez pas en œuvre la solution, vous resterez vulnérable à cette vulnérabilité et ECS accepte tous les appels d’API de gestion. 
ECS 3.8.0.x ECS 3.8.1.x ou version ultérieure
  • Si vous avez déjà implémenté la solution sur ECS 3.8.0, la solution reste en place sur ECS 3.8.1 ou une version plus récente.
  • Vous avez la possibilité de rétablir la solution pour autoriser toutes les adresses IP à effectuer des appels Management API.
  • Si vous choisissez de rétablir la solution, vous restez vulnérable à cette vulnérabilité et ECS accepte tous les appels d’API de gestion. 



Qu’est-ce qui indique que vous avez rencontré un problème ?

  • Toutes les API de connexion de gestion échouent avec le message 403-forbidden après une nouvelle installation ou une mise à niveau vers la version 3.8.0.x à partir de versions 3.8 antérieures.
  • Le tableau de bord Grafana peut également être inaccessible. 


Quelles erreurs les journaux affichent-ils sur 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.

 

Récapitulatif de résolution (après la mise à niveau vers la version 3.8.0.x ou une version ultérieure)

  1. Mettez à niveau le logiciel ECS xDoctor vers la dernière version.
  2. Ajoutez la liste des adresses IP externes.
  3. Il n’est pas nécessaire d’enregistrer des serveurs externes effectuant des appels d’API de gestion directement aux nœuds ECS, ou à l’aide des adresses IP des nœuds ECS, car la connexion est déjà établie. La procédure ci-dessous n’est requise que si la connexion est transmise via un serveur proxy ou un équilibreur de charge. Par conséquent, tous les proxys et/ou équilibreurs de charge doivent être ajoutés à la liste des noms de serveur de gestion acceptés.


Mise à niveau 1 x Doctor

  1. Mettez à niveau votre logiciel ECS xDoctor vers la dernière version disponible.
  1. Vérifiez la version de xDoctor en cours d’exécution sur votre système. Si la version est 4.8-87.0 ou ultérieure, passez à l’étape « Ajouter une liste d’adresses IP externes ». Dans le cas contraire, suivez les étapes ci-dessous.
Commande : 
# sudo xdoctor --version
Exemple :
admin@node1:~> sudo xdoctor --version
4.8-87.0
  1. Connectez-vous au site de support Dell, connectez-vous directement à cet emplacement de téléchargement ECS Download, recherchez xDoctor à l’aide de la barre de recherche par mot-clé, puis cliquez sur le lien xDoctor 4.8-87.0 RPM pour télécharger le fichier. Pour afficher les notes de mise à jour, accédez directement à la page produit d’ECS, sélectionnez Manuels et documents dans la barre latérale, à partir de laquelle ils seront disponibles au téléchargement.
  2. Une fois le RPM téléchargé, utilisez n’importe quel programme SCP distant pour télécharger le fichier dans le répertoire /home/admin sur le premier nœud ECS.
  3. Une fois le téléchargement terminé, envoyez la commande SSH au premier nœud du système ECS à l’aide d’admin.
  4. Mettez à niveau xDoctor sur tous les nœuds avec la nouvelle version distribuée.  
Commande :
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
Exemple :
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 l’environnement est un VDC à plusieurs racks, le nouveau package xDoctor doit être installé sur le premier nœud de chaque rack. Pour identifier ces composants primaires du rack, exécutez la commande ci-dessous. Dans ce cas, quatre racks et quatre principaux racks sont mis en surbrillance
  1. Recherchez les nœuds principaux du rack (surlignés en gras ci-dessous).
Commande :
# svc_exec -m "ip address show private.4 |grep -w inet"
Exemple :
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. Copiez le package à partir du premier nœud du système (R1N1) vers les autres racks primaires ci-dessous :
Exemple :
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. À l'étape 1 ci-dessus, exécutez la même commande d'installation de xDoctor sur chacun des racks primaires ci-dessus identifiés précédemment. 
Commande :
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm


2-A Ajouter une liste d’adresses IP externes.

  • Un utilisateur de gestion doit effectuer cette activité avec un rôle d’administrateur de la sécurité. Dans l’exemple ci-dessous, nous utilisons l’utilisateur root , qui dispose également d’une fonctionnalité d’administration de la sécurité.
  • Elle peut être effectuée sur n’importe quel nœud du VDC ECS.
  • Dans une fédération avec plusieurs VDC, elle doit être exécutée après la mise à niveau de tous les VDC de la fédération. La procédure peut ensuite être appliquée à chaque VDC.
  • Remarque : La liste autorisée étant répliquée sur les VDC fédérés, l’ajout d’entrées dans la liste autorisée d’un cluster réplique ces entrées sur l’autre cluster et écrase tout ce qui a déjà été ajouté sur l’autre cluster
  • L’outil génère une exception « 401 - Non autorisé » si l’utilisateur n’est pas administrateur de la sécurité ou si des informations d’identification incorrectes sont utilisées.
  1. Préparez la liste des noms de serveur (IP, nom d’hôte et FQDN) à ajouter à la liste de confiance. Consolidez la liste dans un fichier, chaque ligne avec un nom de serveur. Si le réseau de gestion est séparé, le FQDN des nœuds de gestion doit également être ajouté à la liste de confiance. De nombreux clients peuvent être amenés à ajouter les noms des nœuds ; court utilisant svc_exec « hostname -s » et long utilisant svc_exec nom d’hôte
Pour vérifier la séparation du réseau pour la gestion, exécutez la commande ci-dessous et recherchez « mgmt » en surbrillance.

Commande :
# getrackinfo -n
Exemple :
#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
Exemple ci-dessous avec la liste des noms de serveurs (remplacez-les par les vrais).
# 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. Vérifiez les logs pour vérifier le nom du serveur pour toute erreur 403 :  

            Commande : 

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

            Exemple :

# 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
Exemple ci-dessous avec la liste des noms de serveurs (remplacez-les par les vrais).
# 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

Ajoutez des serveurs approuvés à l’aide de la liste fournie fournissant le <mgmt_user>. L’utilisateur est invité à saisir le mot de passe du mgmt_user, à le saisir, puis à appuyer sur Entrée pour continuer.

Commande : 
svc_param asn add -u <mgmt_user> -p -f <server.list>
Exemple :
# 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. Récupérez la liste des serveurs approuvés. La liste peut être soit a) imprimée sur un écran pour vérifier rapidement si elle est courte, soit b) enregistrée dans un fichier à des fins de sauvegarde ou d’inspection.
  1. Imprimez le résultat à l’écran. Vous êtes invité à saisir le mot de passe. Appuyez sur Entrée pour continuer.
Commande :
 svc_param asn list -u <mgmt_user> -p
Exemple :
# 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. Enregistrez le résultat dans un fichier. Vous êtes invité à saisir le mot de passe. Appuyez sur Entrée pour continuer.
Commande : 
svc_param asn list -u <mgmt_user> -p -o <output file>
Exemple :
# 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

Remarque : Dans le cas où un répartiteur de charge n’est PAS utilisé et qu’il obtient toujours le même nginx 403 Forbidden erreur dans l’interface utilisateur ECS, vérifiez si le client utilisele réseau VLAN. Séparation à l’aide de l’attribut getrackinfo -n Commande par étape 1. Si c’est le cas, ajoutez les noms DNS de gestion et les adresses IP de gestion du réseau du client dans la liste de serveurs de confiance pour tous leurs nœuds.

(Comme ci-dessous)

Exemple :

# 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 Supprime la liste des adresses IP externes.

Si vous devez supprimer des entrées d’une liste de confiance, vous êtes invité à saisir le mot de passe et appuyez sur Entrée pour continuer. A server.to.remove.list devrait être créée.

Exemple : 
# cat server.list.to.remove
Load_balancer1_Hostname
Load_balancer2_IP
Commande à supprimer :
 svc_param asn remove -u <mgmt_user> -p -f <server.to.remove.list>
(Vous êtes invité à saisir le mot de passe, appuyez sur Entrée pour continuer.)

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

Répertoriez à nouveau les entrées pour confirmer que les entrées ont été supprimées. 
Commande : 
svc_param asn list -u root -p
(Vous êtes invité à saisir le mot de passe, appuyez sur Entrée pour continuer.)

Exemple:
# 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

Pour plus d’informations et de contexte concernant ce changement, consultez les documents suivants disponibles sur le site de support Dell :

  • Notes de mise à jour d’ECS 3.8.0 ou ECS 3.8.1
  • Guide d’administration d’ECS 3.8.0 ou ECS 3.8.1
  • Guide de sécurité d’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.