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
  • Внедрение решения является обязательным, если вы используете прокси-сервер или балансировщик нагрузки для отправки вызовов API управления в ECS.
  • Если решение не будет реализовано, вы получите ошибки Management API 403 и пользовательский интерфейс Grafana будет недоступен.
ECS 3.7 и более ранние версии ECS 3.8.1.x или более поздней версии
  • Реализация решения необязательна, если для отправки вызовов API управления в ECS используется прокси-сервер или балансировщик нагрузки.
  • Если не внедрить это решение, вы останетесь уязвимы для этой уязвимости, а ECS будет принимать все вызовы API управления. 
ECS версии 3.8.0.x ECS 3.8.1.x или более поздней версии
  • Если вы уже внедрили решение в ECS 3.8.0, то решение остается в силе в ECS 3.8.1 или более поздней версии.
  • Вы можете отменить решение, чтобы разрешить всем IP-адресам выполнять вызовы API управления.
  • Если вы решите отменить решение, вы останетесь уязвимы для этой уязвимости, и ECS будет принимать все вызовы API управления. 



Что указывает на то, что вы столкнулись с проблемой?

  • Все 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 или более поздней)

  1. Обновите программное обеспечение ECS xDoctor до последней версии.
  2. Добавьте список внешних IP-адресов.
  3. Нет необходимости регистрировать внешние серверы, которые напрямую обращаются к узлам ECS или используют IP-адреса узлов ECS, так как подключение уже будет успешным. Описанная ниже процедура требуется только в том случае, если подключение осуществляется через прокси-сервер или балансировщик нагрузки. Поэтому все прокси-серверы и/или балансировщики нагрузки должны быть добавлены в список принятия имен серверов управления.


Обновление 1-xDoctor

  1. Модернизируйте программное обеспечение ECS xDoctor до последней доступной версии.
  1. Проверьте версию xDoctor, установленную в вашей системе. Если версия 4.8-87.0 или выше, перейдите к шагу «Добавление списка внешних IP-адресов». В противном случае выполните следующие действия.
Команда: 
# sudo xdoctor --version
Пример.
admin@node1:~> sudo xdoctor --version
4.8-87.0
  1. Войдите на сайт поддержки Dell, подключитесь непосредственно к этому местоположению загрузки ECS, выполните поиск xDoctor с помощью панели поиска по ключевым словам и нажмите ссылку xDoctor 4.8-87.0 RPM для скачивания. Для просмотра примечаний к выпуску перейдите непосредственно на страницу продукта ECS и выберите «Руководства и документы» на боковой панели, откуда они должны быть доступны для скачивания.
  2. После загрузки RPM используйте любую удаленную программу SCP для загрузки файла в каталог /home/admin на первом узле ECS.
  3. После завершения загрузки подключитесь по SSH к первому узлу системы ECS с помощью учетной записи администратора.
  4. Модернизируйте 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
  1. Если среда представляет собой многостоечный виртуальный ЦОД, новый пакет xDoctor должен быть установлен на первом узле каждой стойки. Чтобы определить основные узлы стоек, выполните следующую команду. В этом случае выделены четыре стойки и четыре основные стойки
  1. Найдите основные узлы стойки (выделены полужирным шрифтом ниже).
Команда:
# 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
  1. Скопируйте пакет из первого узла системы (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. В соответствии с информацией в шаге 1 выше, выполните ту же команду установки xDoctor для каждого из указанных выше первичных узлов стойки. 
Команда:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm


2-A Добавление списка внешних IP-адресов.

  • Пользователь управления должен выполнять это действие с ролью администратора безопасности. В приведенном ниже примере мы используем пользователя root , так как он также имеет возможность администрирования безопасности.
  • Это можно сделать на любом узле виртуального ЦОД ECS.
  • В федерации с несколькими виртуальными ЦОД этот параметр необходимо выполнить после модернизации всех виртуальных ЦОД в федерации. Затем эту процедуру можно применить к каждому виртуальному ЦОД.
  • ПРИМЕЧАНИЕ. Список разрешений реплицируется между объединенными виртуальными ЦОД, поэтому при добавлении записей в один кластер эти записи реплицируются в другой кластер и перезаписываются все, что уже добавлено в другом кластере
  • Инструмент создает исключение «401 — Unauthorized», если пользователь не является администратором безопасности или используются неверные учетные данные.
  1. Подготовьте список имен серверов (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.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. Проверьте журналы имени сервера на наличие ошибок 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.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

Добавьте доверенные серверы с предоставленным списком, содержащим <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!
  1. Извлеките список доверенных серверов. Список может быть либо а) распечатан на экране для быстрой проверки, если он короткий, либо б) сохранен в файл для резервного копирования или проверки.
  1. Выведите результат на экран. Появится запрос на ввод пароля. Нажмите клавишу 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
  1. Сохраните результат в файл. Появится запрос на ввод пароля. Нажмите клавишу 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 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.