ECS:管理API 403エラーとアクセス不能なGrafana UIを回避するためにECS 3.8.0以降でホスト ヘッダー インジェクションを回避する方法

概要: ECS 3.8.0.x以降では、ホスト ヘッダー インジェクションに関するセキュリティの問題が対処されています(『STORAGE-27164のリリース ノート』を参照)。

この記事は次に適用されます: この記事は次には適用されません: この記事は、特定の製品に関連付けられていません。 すべての製品パージョンがこの記事に記載されているわけではありません。

手順

ホスト ヘッダー インジェクションとは何ですか?

  • アプリケーションは、ユーザーから提供されたHTTPホスト ヘッダーを信頼し、ユーザー提供のホスト ヘッダーを使用して別のページにリダイレクトしています。 
  • 攻撃者はこれを悪用して、HTTP Hostヘッダーを悪意のあるホスト名に変更し、ユーザーを悪意のあるWebページにリダイレクトする可能性があります。 
注:これは、プロキシまたはロード バランサーを介した管理API呼び出しにのみ影響します。データ操作には影響しません。


ECS 3.8.0.x以降ではどのような変更が加えられていますか?

修正の一環として、許可されたサーバー名のリストを設定または設定解除できる新しいAPIセットが実装されています。受信要求のホスト ヘッダー値が、そのリストに対してチェックされます。ホスト ヘッダー値がそのリストに存在しない場合、要求は拒否されます。

以下に、承認済みサーバーのリストを登録および管理するために導入されたREST APIの新しいセットを示します。
 
リソース名 説明
GET /acceptedservernames/ 受け入れられた管理サーバー名の一覧を取得します
POST /acceptedservernames/ 受け入れられた管理サーバー名のリストを作成または置き換えます
PUT /acceptedservernames/ 受け入れ可能な管理サーバー名のリストを更新します。
DELETE /acceptedservernames/ 受け入れられた管理サーバー名のリストを削除します

 

どのような状況で影響を受けますか?

ECSで受け入れ可能なサーバーのリストを構成するソリューションを実装するユース ケース:

アップグレード元 へのアップグレードまたはへのインストール 更新作業
ECS 3.7以前 ECS 3.8.0.x
  • 管理APIコールをECSに送信するためにプロキシまたはロード バランサーを使用している場合は、ソリューションの実装が必須です。
  • ソリューションを実装しないと、Management API 403 エラーが発生し、Grafana UI にアクセスできなくなります。
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コールを受け入れます。 



問題が発生したことを示すものは何ですか?

  • 新規インストール後、または以前の3.8バージョンから3.8.0.xへのアップグレード後、すべての管理ログインAPIが403-forbiddenで失敗します。
  • 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ノードに対して管理API呼び出しを直接実行したり、ECSノードのIPを使用して外部サーバーを登録したりする必要はありません。次の手順は、接続がプロキシ サーバーまたはロード バランサーを通過する場合にのみ必要です。そのため、すべてのプロキシおよび/またはロード バランサーをManagement Server Names Accept Listに追加する必要があります。


1 x Doctorアップグレード

  1. Eお使いのECS xDoctorソフトウェアを使用可能な最新バージョンにアップグレードします。
  1. システムで実行されているxDoctorのバージョンを確認します。バージョンが 4.8-87.0 以降の場合は、「外部 IP の一覧を追加する」の手順に進みます。そうでない場合は、次の手順に進みます。
コマンド: 
# sudo xdoctor --version
Example:
admin@node1:~> sudo xdoctor --version
4.8-87.0
  1. Dellサポート サイトにサインし、このダウンロードECSダウンロード場所に直接接続し、キーワード検索バーを使用してxDoctorを検索し、[xDoctor 4.8-87.0 RPM]リンクをクリックしてダウンロードします。リリース ノートを表示するには、ECS製品ページに直接接続し、サイドバーから[マニュアルおよびドキュメント]を選択します。
  2. RPMがダウンロードされたら、いずれかのリモートSCPプログラムを使用して、最初のECSノードの/home/adminディレクトリにファイルをアップロードします。
  3. アップロードが完了したら、adminを使用してそのECSシステムの最初のノードにSSHで接続します。
  4. 新しく頒布されたバージョンを使用して、すべてのノードでxDoctorをアップグレードします。  
コマンド:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
Example:
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. 環境がマルチラックVDCの場合は、新しいxDoctorパッケージを各ラックの最初のノードにインストールする必要があります。これらのラックのプライマリーを識別するには、次のコマンドを実行します。この例では、4台のラックと4台のラック プライマリーがハイライト表示されています
  1. ラック プライマリー ノード(以下では太字でハイライト表示)を見つけます。
コマンド:
# svc_exec -m "ip address show private.4 |grep -w inet"
Example:
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)から、それ以降の他のラック プライマリーにパッケージをコピーします。
Example:
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 VDC上の任意のノードで実行できます。
  • 複数のVDCを持つフェデレーションでは、フェデレーション内のすべての VDC をアップグレードした後に実行する必要があります。その後、この手順を各VDCに適用できます。
  • メモ: 許可リストは連携VDC間でレプリケートされるため、一方のクラスターに許可リスト エントリーを追加すると、それらのエントリーがもう一方のクラスターにレプリケートされ、もう一方のクラスターにすでに追加されているものが上書きされます
  • ユーザーがセキュリティ管理者でない場合、または間違った認証情報が使用されている場合、ツールは「401 - Unauthorized」例外をスローします。
  1. 信頼リストに追加するサーバー名(IP、ホスト名、FQDN)のリストを準備します。リストをファイルに統合し、各行に1つのサーバー名を指定します。管理ネットワークが分離されている場合は、管理ノードのFQDNも信頼リストに追加する必要があります。多くのお客様は、ノードの名前を追加する必要があるかもしれません。「hostname -s」を使用した短いsvc_execと、hostnameを使用した長いsvc_execの両方
ネットワーク分離が管理対象かどうかを確認するには、以下を実行して、ハイライト表示されている「mgmt」を検索します。

コマンド:
# getrackinfo -n
Example:
#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'

            Example:

# 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>
Example:
# 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. 信頼できるサーバーのリストを取得します。リストは、a)短いかどうかをすばやく確認するために画面に出力するか、b)バックアップまたは検査のためにファイルに保存することができます。
  1. 結果を画面に出力します。パスワードの入力を求めるプロンプトが表示されたら、Enterを押して続行します。
コマンド:
 svc_param asn list -u <mgmt_user> -p
Example:
# 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>
Example:
# 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 エラーが発生した場合は、お客様がVLANネットワークを使用しているかどうかを確認します。を使用した分離 getrackinfo -n 手順1のコマンド。その場合は、お客様ネットワークの管理 DNS名と管理IPアドレス を、すべてのノードのTrust Server Listに追加します。

(下記など)

Example:

# 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 を作成する必要があります。

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

その他の情報

この変更に関する詳細とコンテキストについては、 Dellサポートで入手できる次のドキュメントを参照してください。

  • ECS 3.8.0またはECS 3.8.1リリース ノート
  • ECS 3.8.0またはECS 3.8.1管理ガイド
  • ECS 3.8.0またはECS 3.8.1セキュリティ ガイド

対象製品

ECS, ECS Appliance, Elastic Cloud Storage
文書のプロパティ
文書番号: 000205031
文書の種類: How To
最終更新: 14 11月 2024
バージョン:  30
質問に対する他のDellユーザーからの回答を見つける
サポート サービス
お使いのデバイスがサポート サービスの対象かどうかを確認してください。