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).
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.
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 |
|
| ECS 3.7 und früher | ECS 3.8.1.x oder höher |
|
| ECS 3.8.0.x | ECS 3.8.1.x oder höher |
|
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)
- Aktualisieren Sie Ihre ECS xDoctor-Software auf die neueste Version.
- Fügen Sie die Liste der externen IP-Adressen hinzu.
- 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
- Aktualisieren Sie Ihre ECS xDoctor-Software auf die neueste verfügbare Version.
- Ü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.
# sudo xdoctor --version
admin@node1:~> sudo xdoctor --version 4.8-87.0
- 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.
- 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.
- Sobald der Upload abgeschlossen ist, stellen Sie eine SSH-Verbindung zum ersten Node des ECS-Systems über den Admin her.
- Führen Sie ein Upgrade von xDoctor auf allen Nodes mit der neu veröffentlichten Version durch.
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpmBeispiel:
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
- 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
- Suchen Sie die primären Rack-Nodes (unten fett hervorgehoben).
# 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
- Kopieren Sie das Paket vom ersten Node des Systems (R1N1) in die anderen Primär-Nodes wie unten beschrieben:
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~>
- Führen Sie gemäß Schritt 1 oben denselben xDoctor-Installationsbefehl auf jedem der oben genannten Primär-Nodes aus, die zuvor identifiziert wurden.
# 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.
- 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
Befehl:
# getrackinfo -n
#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
# 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
- Ü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
# 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
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.
svc_param asn add -u <mgmt_user> -p -f <server.list>
# 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!
- 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.
- Drucken Sie das Ergebnis auf dem Bildschirm aus. Sie werden aufgefordert, das Kennwort einzugeben. Drücken Sie die Eingabetaste, um fortzufahren.
svc_param asn list -u <mgmt_user> -p
# 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
- Speichern Sie das Ergebnis in einer Datei. Sie werden aufgefordert, das Kennwort einzugeben. Drücken Sie die Eingabetaste, um fortzufahren.
svc_param asn list -u <mgmt_user> -p -o <output file>
# 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.
# cat server.list.to.remove Load_balancer1_Hostname Load_balancer2_IPBefehl 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.
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