ECS: So verhindern Sie die Host-Header-Einschleusung auf ECS 3.8.0 und höher, um Management API 403-Fehler und unzugängliche Grafana-Benutzeroberfläche zu vermeiden

Summary: Ab ECS 3.8.0.x gibt es ein Sicherheitsproblem in Bezug auf die Host-Header-Injektion (siehe Versionshinweise für 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

Was ist eine Host-Header-Injektion?

  • Die Anwendung vertraut dem vom Nutzer bereitgestellten HTTP-Hostheader und verwendet den vom Nutzer bereitgestellten Hostheader, um auf eine andere Seite umzuleiten. 
  • Ein Angreifer kann dies ausnutzen, indem er den HTTP-Hostheader in einen bösartigen Hostnamen ändert und den Benutzer auf eine schädliche Webseite umleitet. 
Hinweis: Dies wirkt sich nur auf Management-API-Aufrufe über einen Proxy oder Load Balancer aus. Sie hat keine Auswirkungen auf Datenvorgänge.


Welche Änderungen werden ab ECS 3.8.0.x implementiert?

Als Teil der Korrektur wird ein neuer Satz von APIs implementiert, die das Festlegen oder Aufheben der Liste zulässiger Servernamen ermöglichen. Der Wert des Hostheaders eingehender Anforderungen wird anhand dieser Liste geprüft. Die Anforderung wird abgelehnt, wenn der Wert des Hostheaders nicht in dieser Liste vorhanden ist.

Im Folgenden finden Sie den neuen Satz von REST APIs, die für die Registrierung und Verwaltung der Liste der akzeptierten Server eingeführt wurden.
 
Name der Ressource Beschreibung
GET /acceptedservernames/ Ruft die Liste der akzeptierten Verwaltungsservernamen ab
POST /acceptedservernames/ Erstellt oder ersetzt die Liste der akzeptierten Managementservernamen
PUT /acceptedservernames/ Aktualisieren Sie die Liste der akzeptierten Namen des Managementservers.
DELETE /acceptedservernames/ Löscht die Liste der akzeptierten Managementservernamen

 

Unter welchen Umständen sind Sie betroffen?

Anwendungsfälle für die Implementierung der Lösung zur Konfiguration der Liste der akzeptierten Server auf ECS:

Upgrade von Upgrade auf oder Installation auf Wiederherstellung
ECS 3.7 und früher ECS 3.8.0.x
  • Die Implementierung der Lösung ist obligatorisch, wenn Sie einen Proxy oder einen Load Balancer verwenden, um Management-API-Aufrufe an ECS zu senden.
  • Wenn Sie die Lösung nicht implementieren, erhalten Sie Management API 403-Fehler und auf die Grafana-Benutzeroberfläche kann nicht zugegriffen werden.
ECS 3.7 und früher ECS 3.8.1.x oder höher
  • Die Implementierung der Lösung ist optional, wenn Sie einen Proxy oder Load Balancer verwenden, um Management-API-Aufrufe an ECS zu senden.
  • Wenn Sie die Lösung nicht implementieren, bleiben Sie anfällig für diese Sicherheitslücke und ECS akzeptiert alle Management-API-Aufrufe. 
ECS 3.8.0.x ECS 3.8.1.x oder höher
  • Wenn Sie die Lösung bereits auf ECS 3.8.0 implementiert haben, bleibt die Lösung auf ECS 3.8.1 oder höher bestehen.
  • Sie haben die Möglichkeit, die Lösung zurückzusetzen, damit alle IP-Adressen Management-API-Aufrufe durchführen können.
  • Wenn Sie sich dafür entscheiden, die Lösung zurückzusetzen, bleiben Sie anfällig für diese Sicherheitslücke und ECS akzeptiert alle Management-API-Aufrufe. 



Woran erkennen Sie, dass ein Problem aufgetreten ist?

  • Alle Management-Anmelde-APIs schlagen nach einer Neuinstallation oder einem Upgrade auf 3.8.0.x von früheren 3.8-Versionen mit 403-forbidden fehl.
  • Auf das Grafana-Dashboard kann möglicherweise ebenfalls nicht zugegriffen werden. 


Welche Fehler werden in den Protokollen auf ECS angezeigt?

"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.

 

Lösungsübersicht (nach dem Upgrade auf 3.8.0.x oder höher)

  1. Aktualisieren Sie Ihre ECS xDoctor-Software auf die neueste Version.
  2. Fügen Sie die Liste der externen IP-Adressen hinzu.
  3. Es ist nicht erforderlich , externe Server zu registrieren, die Management-API-Aufrufe direkt an die ECS-Nodes direkt oder über die IP-Adressen der ECS-Nodes durchführen, da die Verbindung bereits erfolgreich wäre. Das folgende Verfahren ist nur erforderlich, wenn die Verbindung über einen Proxyserver oder Load Balancer geleitet wird. Aus diesem Grund müssen alle Proxy- und/oder Load Balancer zur Akzeptanzliste der Managementservernamen hinzugefügt werden.


1-xDoctor-Upgrade

  1. Aktualisieren Sie Ihre ECS xDoctor-Software auf die neueste verfügbare Version.
  1. Überprüfen Sie, welche xDoctor-Version auf Ihrem System ausgeführt wird. Wenn die Version 4.8-87.0 oder höher ist, fahren Sie mit Schritt "Liste externer IPs hinzufügen" fort. Andernfalls fahren Sie mit den folgenden Schritten fort.
Befehl: 
# sudo xdoctor --version
Beispiel:
admin@node1:~> sudo xdoctor --version
4.8-87.0
  1. Melden Sie sich bei der Dell Support-Website an, stellen Sie eine direkte Verbindung zu diesem Download-ECS-Downloadspeicherort her, suchen Sie in der Stichwortsuchleiste nach xDoctor und klicken Sie zum Herunterladen auf den Link "xDoctor 4.8-87.0 RPM". Um die Versionshinweise anzuzeigen, stellen Sie eine direkte Verbindung zur ECS-Produktseite her und wählen Sie Handbücher und Dokumente in der Seitenleiste aus, wo sie zum Download verfügbar sein sollten.
  2. Verwenden Sie nach dem Herunterladen des RPM ein beliebiges Remote-SCP-Programm, um die Datei in das Verzeichnis /home/admin auf dem ersten ECS-Node hochzuladen.
  3. Sobald der Upload abgeschlossen ist, stellen Sie eine SSH-Verbindung zum ersten Node des ECS-Systems über den Admin her.
  4. Führen Sie ein Upgrade von xDoctor auf allen Nodes mit der neu veröffentlichten Version durch.  
Befehl:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
Beispiel:
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. Wenn es sich bei der Umgebung um ein VDC mit mehreren Racks handelt, muss das neue xDoctor-Paket auf dem ersten Node jedes Racks installiert werden. Um diese Primär-Nodes zu identifizieren, führen Sie den folgenden Befehl aus. In diesem Fall sind 4 Racks und 4 Primärracks hervorgehoben
  1. Suchen Sie die primären Rack-Nodes (unten fett hervorgehoben).
Befehl:
# svc_exec -m "ip address show private.4 |grep -w inet"
Beispiel:
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. Kopieren Sie das Paket vom ersten Node des Systems (R1N1) in die anderen Primär-Nodes wie unten beschrieben:
Beispiel:
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. Führen Sie gemäß Schritt 1 oben denselben xDoctor-Installationsbefehl auf jedem der oben genannten Primär-Nodes aus, die zuvor identifiziert wurden. 
Befehl:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm


2-A Liste externer IPs hinzufügen.

  • ManagementnutzerInnen müssen diese Aktivität mit der Rolle "Sicherheitsadministrator" durchführen. Im folgenden Beispiel verwenden wir den Root-Nutzer , da dieser auch über die Berechtigung "Security Administration" verfügt.
  • Dies kann auf jedem Node auf ECS VDC erfolgen.
  • In einem Verbund mit mehreren VDCs muss dies durchgeführt werden, nachdem alle VDCs im Verbund aktualisiert wurden. Das Verfahren kann dann auf jedes VDC angewendet werden.
  • HINWEIS: Die Allowlist wird über Verbund-VDCs repliziert, d. h., durch das Hinzufügen von Allowlist-Einträgen auf einem Cluster werden diese Einträge auf dem anderen Cluster repliziert und alle bereits auf dem anderen Cluster hinzugefügten überschrieben
  • Das Tool löst eine "401 – Unauthorized"-Ausnahme aus, wenn der Nutzer kein Sicherheitsadministrator ist oder die falschen Anmeldeinformationen verwendet werden.
  1. Bereiten Sie die Liste der Servernamen (IP, Hostname und FQDN) vor, die der Vertrauensliste hinzugefügt werden sollen. Konsolidieren Sie die Liste in einer Datei, wobei jede Zeile einen Servernamen enthält. Wenn das Managementnetzwerk getrennt ist, sollte auch der FQDN der Management-Nodes in die Vertrauensliste aufgenommen werden. Viele Kunden müssen möglicherweise die Namen der Nodes hinzufügen. Sowohl kurz mit svc_exec "hostname -s" als auch lange mit svc_exec Hostnamen
Um zu überprüfen, ob eine Netzwerktrennung für das Management erforderlich ist, führen Sie den folgenden Befehl aus und suchen Sie nach hervorgehobenem "mgmt".

Befehl:
# getrackinfo -n
Beispiel:
#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
Beispiel unten mit Liste der Servernamen (durch die echten ersetzen).
# 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. Überprüfen Sie die Protokolle, um den Servernamen auf 403-Fehler zu überprüfen:  

            Befehl: 

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

            Beispiel:

# 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
Beispiel unten mit Liste der Servernamen (durch die echten ersetzen).
# 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

Fügen Sie vertrauenswürdige Server mit der bereitgestellten Liste der <mgmt_user> hinzu. Der Nutzer wird aufgefordert, das Kennwort für den mgmt_user einzugeben. Geben Sie das Kennwort ein und drücken Sie dann die Eingabetaste, um fortzufahren.

Befehl: 
svc_param asn add -u <mgmt_user> -p -f <server.list>
Beispiel:
# 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. Rufen Sie die Liste der vertrauenswürdigen Server ab. Die Liste kann entweder a) auf einem Bildschirm ausgedruckt werden, um schnell zu überprüfen, ob sie kurz ist, oder b) in einer Datei gespeichert werden, um sie zu sichern oder zu überprüfen.
  1. Drucken Sie das Ergebnis auf dem Bildschirm aus. Sie werden aufgefordert, das Kennwort einzugeben. Drücken Sie die Eingabetaste, um fortzufahren.
Befehl:
 svc_param asn list -u <mgmt_user> -p
Beispiel:
# 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. Speichern Sie das Ergebnis in einer Datei. Sie werden aufgefordert, das Kennwort einzugeben. Drücken Sie die Eingabetaste, um fortzufahren.
Befehl: 
svc_param asn list -u <mgmt_user> -p -o <output file>
Beispiel:
# 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

Hinweis: Für den Fall, dass ein Load Balancer NICHT verwendet wird und dieser dennoch nginx 403 Forbidden Fehler in der ECS-Benutzeroberfläche, überprüfen Sie, ob der Kunde das VLAN-Netzwerk verwendet. Trennung über die getrackinfo -n Befehl in Schritt 1. Wenn dies der Fall ist, fügen Sie die Management-DNS-Namen und Management-IP-Adressen aus dem Kundennetzwerk für alle zugehörigen Nodes in die Trust Server-Liste ein.

(z. B. unten)

Beispiel:

# 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 Liste der externen IPs entfernen.

Wenn Sie Einträge aus einer vertrauenswürdigen Liste entfernen müssen, werden Sie aufgefordert, das Kennwort einzugeben. Drücken Sie die Eingabetaste, um fortzufahren. A server.to.remove.list erstellt werden.

Beispiel: 
# cat server.list.to.remove
Load_balancer1_Hostname
Load_balancer2_IP
Befehl zum Entfernen:
 svc_param asn remove -u <mgmt_user> -p -f <server.to.remove.list>
(Sie werden aufgefordert, das Kennwort einzugeben. Drücken Sie die Eingabetaste, um fortzufahren.)

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

Listen Sie die Einträge erneut auf, um zu bestätigen, dass die Einträge entfernt wurden. 
Befehl: 
svc_param asn list -u root -p
(Sie werden aufgefordert, das Kennwort einzugeben. Drücken Sie die Eingabetaste, um fortzufahren.)

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

Weitere Details und Kontext zu dieser Änderung finden Sie in den folgenden Dokumenten, die auf der Dell Support-Website verfügbar sind:

  • ECS 3.8.0 oder ECS 3.8.1 – Versionshinweise
  • ECS 3.8.0 oder ECS 3.8.1 – Administrationshandbuch
  • ECS 3.8.0 oder ECS 3.8.1 – Sicherheitshandbuch

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.