CVE-2019-19781の対処方法

Related Vulnerabilities: CVE-2019-19781  

最新の情報については、CTX267679を参照してください。

現象またはエラー

2019年12月17日、シトリックスは次のセキュリティ情報をリリースしました。CTX269194:Citrix Application Delivery Controller(ADC)(旧称NetScaler ADC)およびCitrix Gateway(旧称NetScaler Gateway)で任意のコードが実行される脆弱性。

さらに調査した結果、この問題によってCitrix SDWANの一部の展開環境(特にCitrix SDWAN WANOP Edition)も影響を受けることが判明しました。 Citrix SD-WAN WANOP Editionは、Citrix ADCをロードバランサーとしてパッケージ化しているため影響を受けることになります。


解決策

Citrix ADCおよびCitrix Gatewayに対する次の構成の変更によって、前述の脆弱性に対応することができます。

関連するWANOPデバイスに関する脆弱性を回避するには、WANOPデバイス上のCitrix ADCロードバランサーインスタンスにも同様の手順を適用する必要があります。 Citrix ADCインスタンスと関連する詳細は、次のWANOP GUIに表示されます。[Configuration (Overview)]>[Maintenance]>[Instances]>[Load Balancer]。 このADCインスタンスの資格情報は、展開時に管理者によって割り当てられます。 対処法を適用するには、管理者がこの資格情報を使用してADCインスタンスにログインする必要があります。 次のスタンドアロンシステムに関する手順は、WANOPデバイス上のCitrix ADCにも適用できます。

いつものように、対処法を適用する前に現在のシステム構成を保存することを忘れないでください。 この手順には再起動が必要であるため、プロセス中に一時データが失われることがあります。


スタンドアロンシステム

ADCまたはGatewayアプライアンスのコマンドラインインターフェイスで次のコマンドを実行して、レスポンダーアクションとポリシーを作成します:
 

enable ns feature responder
add responder action respondwith403 respondwith "\"HTTP/1.1 403 Forbidden\r\n\r\n\""
add responder policy ctx267027 "HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/vpns/\") && (!CLIENT.SSLVPN.IS_SSLVPN || HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/../\"))" respondwith403
bind responder global ctx267027 1 END -type REQ_OVERRIDE
save config


以下のセクションでは、変更が管理インターフェイスにも適用されたことを確認します。 コマンドラインインターフェイスで、次のコマンドを実行してください。

shell nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0
shell "echo 'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0' >> /nsconfig/rc.netscaler"
reboot


HAペア

プライマリ:

enable ns feature responder
add responder action respondwith403 respondwith "\"HTTP/1.1 403 Forbidden\r\n\r\n\""
add responder policy ctx267027 "HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/vpns/\") && (!CLIENT.SSLVPN.IS_SSLVPN || HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/../\"))" respondwith403
bind responder global ctx267027 1 END -type REQ_OVERRIDE
save config
shell nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0
shell "echo 'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0' >> /nsconfig/rc.netscaler"
reboot


セカンダリ(プライマリ起動後):

shell nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0
shell "echo 'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0' >> /nsconfig/rc.netscaler"
reboot

ファイル /nsconfig/rc.netscalerでセカンダリノードに'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0'が存在することを確認してください。

再起動プロセスでは、現在のプライマリが起動後もプライマリとして保持されます。 ただし、HAペアの標準のアップグレードで使用される再起動順を使用することもできます。


クラスター

クラスターIP:

enable ns feature responder
add responder action respondwith403 respondwith "\"HTTP/1.1 403 Forbidden\r\n\r\n\""
add responder policy ctx267027 "HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/vpns/\") && (!CLIENT.SSLVPN.IS_SSLVPN || HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/../\"))" respondwith403
bind responder global ctx267027 1 END -type REQ_OVERRIDE
save config
shell nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0
shell "echo 'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0' >> /nsconfig/rc.netscaler"
shell reboot

 

各クラスターノード:

shell nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0
shell "echo 'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0' >> /nsconfig/rc.netscaler"
shell reboot


すべてのクラスターノードで各ノードの/nsconfig/rc.netscalerファイルに'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0'コマンドが存在することを確認します。

この手順の間、クラスターが動作している必要がある場合、再起動されたノードがクラスターに再度参加している(状態がUnknownからActiveに変化している)ことを確認してから、クラスター内の他のノードを再起動します。


管理パーティション

switch ns partition <partition_name>
enable ns feature responder
add responder action respondwith403 respondwith "\"HTTP/1.1 403 Forbidden\r\n\r\n\""
add responder policy ctx267027 "HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/vpns/\") && (!CLIENT.SSLVPN.IS_SSLVPN || HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/../\"))" respondwith403
bind responder global ctx267027 1 END -type REQ_OVERRIDE
save config


必ず、デフォルトを含むすべての個別パーティションに上記の手順を適用してください。 次に、デフォルトのパーティションで次の手順を実行します。
 

switch ns partition default
shell nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0
shell "echo 'nsapimgr_wr.sh -ys skip_systemaccess_policyeval=0' >> /nsconfig/rc.netscaler"
reboot


変更を元に戻す手順

これらの手順はスタンドアロンシステム、クラスターのCLIP 、HAペアのHAプライマリ、各管理パーティションに適用できます。一連の手順は、修正ビルドが利用可能になり次第アップグレードする場合にも実行できます。

 

unbind responder global ctx267027
rm responder policy ctx267027
rm responder action respondwith403
save config

以下のコマンドは、指定されたパターンをファイル内で検索し、その結果、最初に追加された行を削除するように設計されています。 これにより、nsapimgrコマンドをファイルrc.netscalerから効果的に削除することができます。

shell nsapimgr_wr.sh -ys skip_systemaccess_policyeval=1
shell "sed -i '' '/skip_systemaccess_policyeval=0/d' /nsconfig/rc.netscaler"
reboot

上記の各シナリオではポリシーを適用するために再起動が必要ではありませんが、ポリシーの適用前に脆弱性を介して取得された実行中のセッションがある場合に、これを確実に削除するための措置として推奨されます。


追加情報

優先順位の競合

このレスポンダーポリシーに指定された優先度は1です。 同じ優先度でバインドされた他のレスポンダーポリシーがある場合、ポリシーのバインドに失敗する可能性があります。 ここで推奨されるポリシーに確実に優先度1が適用されるためには、その他のポリシーに適切な優先度が割り当てられるように調整することをお勧めします。

 

‘skip_systemaccess_policyeval’フラグ

このフラグによって、レスポンダーポリシーは管理ポータルトラフィックで確実に評価されます。

管理ポータルIPが保護された環境にある場合このフラグは不要です。 

このフラグを有効にすると、一部の管理ページでエラーが発生する可能性があります。 このような場合は、メンテナンスウィンドウでフラグを切り替えて値を「1」に戻すことができます。

 

クラスターから削除されたノードは脆弱です

クラスターノードが削除されると構成が消去され、 上記のレスポンダーポリシーとそれに伴う保護も削除されます。 結果として、ノードはこれまでの手順によって提供された保護を失います。
 

管理UIでのプラグインのダウンロードリンク

現在の管理UIには、プラグイン(/vpns/scripts/vista/*.exe)をダウンロードするためのリンクがあります。 このリンクのパスには「/vpns/」が含まれているため、この修正を適用後にアクセスできなくなります。
 

正規URLの/vpns/

パスに「/vpns/」が含まれるバックエンドWebサーバーリソースがある場合、そのリソースはブロックされます。