ECS. Как предотвратить внедрение заголовка хоста в ECS 3.8.0 и более поздних версиях, чтобы избежать ошибок Management API 403 и недоступности пользовательского интерфейса Grafana
Summary: Начиная с версии ECS 3.8.0.x, устранена проблема безопасности, связанная с внедрением заголовков хостов (см. примечания к выпуску для 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
Что такое Host Header Injection?
- Приложение доверяет заголовку хоста HTTP, предоставленному пользователем, и использует предоставленный пользователем заголовок хоста для перенаправления на другую страницу.
- Злоумышленник может воспользоваться этим, изменив заголовок HTTP Host на вредоносное имя хоста и перенаправив пользователя на вредоносную веб-страницу.
Примечание. Это влияет только на вызовы API управления через прокси-сервер или подсистему балансировки нагрузки. Это не влияет на операции с данными.
Какие изменения вносятся в ECS 3.8.0.x?
В рамках исправления реализован новый набор API, который позволяет устанавливать или отменять список разрешенных имен серверов. Значение заголовка хоста во входящих запросах сверяется с этим списком. Запрос отклоняется, если значение заголовка хоста отсутствует в этом списке.
Ниже приведен новый набор API-интерфейсов REST, предназначенных для регистрации списка принятых серверов и управления им.
| Имя ресурса | Описание |
|---|---|
GET /acceptedservernames/ |
Возвращает список принятых имен серверов управления |
POST /acceptedservernames/ |
Создает или заменяет список допустимых имен серверов управления |
PUT /acceptedservernames/ |
Обновите список принятых имен серверов управления. |
DELETE /acceptedservernames/ |
Удаляет список допустимых имен серверов управления |
При каких обстоятельствах это влияет на вас?
Примеры использования для реализации решения по настройке списка принимаемых серверов на ECS:
| Модернизация с | Обновление до и установка на | Устранение проблем |
|---|---|---|
| ECS 3.7 и более ранние версии | ECS версии 3.8.0.x |
|
| ECS 3.7 и более ранние версии | ECS 3.8.1.x или более поздней версии |
|
| ECS версии 3.8.0.x | ECS 3.8.1.x или более поздней версии |
|
Что указывает на то, что вы столкнулись с проблемой?
- Все API-интерфейсы для входа в систему управления завершатся сбоем с ошибкой 403-forbidden после новой установки или модернизации до версии 3.8.0.x с более ранних версий 3.8.
- Панель управления Grafana также может быть недоступна.
Какие ошибки отображаются в журналах 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.
Сводка по решению (после модернизации до версии 3.8.0.x или более поздней)
- Обновите программное обеспечение ECS xDoctor до последней версии.
- Добавьте список внешних IP-адресов.
- Нет необходимости регистрировать внешние серверы, которые напрямую обращаются к узлам ECS или используют IP-адреса узлов ECS, так как подключение уже будет успешным. Описанная ниже процедура требуется только в том случае, если подключение осуществляется через прокси-сервер или балансировщик нагрузки. Поэтому все прокси-серверы и/или балансировщики нагрузки должны быть добавлены в список принятия имен серверов управления.
Обновление 1-xDoctor
- Модернизируйте программное обеспечение ECS xDoctor до последней доступной версии.
- Проверьте версию xDoctor, установленную в вашей системе. Если версия 4.8-87.0 или выше, перейдите к шагу «Добавление списка внешних IP-адресов». В противном случае выполните следующие действия.
Команда:
# sudo xdoctor --version
Пример.
admin@node1:~> sudo xdoctor --version 4.8-87.0
- Войдите на сайт поддержки Dell, подключитесь непосредственно к этому местоположению загрузки ECS, выполните поиск xDoctor с помощью панели поиска по ключевым словам и нажмите ссылку xDoctor 4.8-87.0 RPM для скачивания. Для просмотра примечаний к выпуску перейдите непосредственно на страницу продукта ECS и выберите «Руководства и документы» на боковой панели, откуда они должны быть доступны для скачивания.
- После загрузки RPM используйте любую удаленную программу SCP для загрузки файла в каталог /home/admin на первом узле ECS.
- После завершения загрузки подключитесь по SSH к первому узлу системы ECS с помощью учетной записи администратора.
- Модернизируйте xDoctor на всех узлах с помощью новой распределенной версии.
Команда:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpmПример.
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
- Если среда представляет собой многостоечный виртуальный ЦОД, новый пакет xDoctor должен быть установлен на первом узле каждой стойки. Чтобы определить основные узлы стоек, выполните следующую команду. В этом случае выделены четыре стойки и четыре основные стойки
- Найдите основные узлы стойки (выделены полужирным шрифтом ниже).
Команда:
# svc_exec -m "ip address show private.4 |grep -w inet"Пример.
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
- Скопируйте пакет из первого узла системы (R1N1) в другие основные узлы стойки, как описано ниже:
Пример.
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 выше, выполните ту же команду установки xDoctor для каждого из указанных выше первичных узлов стойки.
Команда:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
2-A Добавление списка внешних IP-адресов.
- Пользователь управления должен выполнять это действие с ролью администратора безопасности. В приведенном ниже примере мы используем пользователя root , так как он также имеет возможность администрирования безопасности.
- Это можно сделать на любом узле виртуального ЦОД ECS.
- В федерации с несколькими виртуальными ЦОД этот параметр необходимо выполнить после модернизации всех виртуальных ЦОД в федерации. Затем эту процедуру можно применить к каждому виртуальному ЦОД.
-
ПРИМЕЧАНИЕ. Список разрешений реплицируется между объединенными виртуальными ЦОД, поэтому при добавлении записей в один кластер эти записи реплицируются в другой кластер и перезаписываются все, что уже добавлено в другом кластере
- Инструмент создает исключение «401 — Unauthorized», если пользователь не является администратором безопасности или используются неверные учетные данные.
- Подготовьте список имен серверов (IP-адрес, имя хоста и полное доменное имя), которые будут добавлены в список доверия. Объедините список в файл, каждая строка которого содержит одно имя сервера. Если сеть управления разделена, в список доверия также должны быть добавлены полные доменные имена узлов управления. Многим клиентам, возможно, придется добавить имена узлов; Как короткий, используя svc_exec "hostname -s" , так и длинный с использованием имени хоста svc_exec
Чтобы проверить, поддерживает ли разделение сетей управление, выполните следующие действия и найдите выделенное слово «mgmt».
Команда:
# 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
- Проверьте журналы имени сервера на наличие ошибок 403:
Команда:
svc_log -f 'ERROR HostHeaderAcceptListFilter.java' -sr objcontrolsvc -start '2 hours ago'
Пример.
# 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
Добавьте доверенные серверы с предоставленным списком, содержащим <mgmt_user>. Пользователю будет предложено ввести пароль для mgmt_user, введите пароль и нажмите клавишу Enter, чтобы продолжить.
Команда:
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!
- Извлеките список доверенных серверов. Список может быть либо а) распечатан на экране для быстрой проверки, если он короткий, либо б) сохранен в файл для резервного копирования или проверки.
- Выведите результат на экран. Появится запрос на ввод пароля. Нажмите клавишу Enter, чтобы продолжить.
Команда:
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
- Сохраните результат в файл. Появится запрос на ввод пароля. Нажмите клавишу Enter, чтобы продолжить.
Команда:
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
Примечание. В случае, когда балансировщик нагрузки НЕ используется и по-прежнему получает то же самое
nginx 403 Forbidden в пользовательском интерфейсе ECS, проверьте, используетли заказчик сеть VLAN. Разделение с помощью getrackinfo -n на шаге 1. Если да, добавьте имена DNS управления и IP-адреса управления из сети заказчика в список доверенных серверов для всех его узлов.
(Например, как показано ниже)
Пример.
# 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 Удаление списка внешних IP-адресов.
Если вам необходимо удалить записи из списка доверенных, вам будет предложено ввести пароль и нажать клавишу Enter для продолжения. A server.to.remove.list должны быть созданы.
Пример.
# cat server.list.to.remove Load_balancer1_Hostname Load_balancer2_IPКоманда удаления:
svc_param asn remove -u <mgmt_user> -p -f <server.to.remove.list>(Появится запрос на ввод пароля. Нажмите клавишу Enter, чтобы продолжить.)
Пример:
# 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!
Выведите список записей еще раз, чтобы убедиться, что записи удалены.
svc_param asn list -u root -p(Появится запрос на ввод пароля. Нажмите клавишу Enter, чтобы продолжить.)
Пример:
# 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
Дополнительные сведения об этом изменении см. в следующих документах, доступных на веб-сайте Dell Support:
- Примечания к выпуску ECS 3.8.0 или ECS 3.8.1
- Руководство по администрированию ECS 3.8.0 или ECS 3.8.1
- Руководство по безопасности ECS 3.8.0 или 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.