web-dev-qa-db-ja.com

CVE-2017-7529の脆弱性を回避するためのDebian 9(stretch)でのnginx 1.10.3のアップグレード

現在、Debian 9(stretch)は CVE-2017-7529 に対して脆弱なnginxバージョン1.10.3をインストールしています:

0.5.6以降から1.13.2までのNginxバージョンは、nginx範囲フィルターモジュールの整数オーバーフローの脆弱性に対して脆弱であり、特別に細工されたリクエストによってトリガーされる可能性のある機密情報の漏洩を引き起こします。

ユーザーのデータの安全性が心配なので、この問題の影響を受けなくなった最新バージョンにアップグレードしたいと思います。

4
SeinopSys

Nginx 1.13.3以降を入手するには複数の方法があります。自分でコンパイルするか、 stretch-backports リポジトリを使用するか、nginx独自のaptリポジトリを追加できます。この答えでは、おそらく最後の1つを順を追って説明します。これは、3つのうち最も簡単な方法です。

nginxのWebサイトには、リポジトリの設定方法に関する 専用ページ がありますが、特に現時点でこの特定の脆弱性を回避したい場合は、それだけではありません。 stableブランチはまだ脆弱である1.12.0をインストールします(1.12.1+および1.13.3+でパッチが適用されました)。したがって、1.13をインストールするmainlineを使用する必要があります。 .5。

最良の場合のシナリオでは、nginxバージョンの切り替えは、いくつかのコマンドを実行するのと同じくらい簡単で、最小限のダウンタイムで2〜3分で完了します。できるだけ早く復旧して実行できるようにするために、インストールの準備から始めましょう。まず、リポジトリをapt設定に追加し、署名キーを追加して、パッケージリストを更新する必要があります。

$ Sudo echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx
deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
$ wget -qO - https://nginx.org/keys/nginx_signing.key | Sudo apt-key add -
$ Sudo apt update

次に、次のコマンドを実行します。

$ Sudo apt remove nginx-common

これにより、システムからnginxが効果的にアンインストールされますが、構成ファイルは保持され、復元が簡単なsystemdサービスファイルのために保存されます。

次に、新しいリポジトリからnginxをインストールします。

$ Sudo apt install nginx

これにより、次のような特定の構成ファイルを置き換えるかどうかを尋ねられることに注意してください。

Configuration file '/etc/nginx/nginx.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a Shell to examine the situation
 The default action is to keep your current version.
*** nginx.conf (Y/I/N/O/D/Z) [default=N] ?

あなたが入力しないことを確認してくださいYを入力し、単に押します Enter または、現在の構成が失われないように求められるたびにNを入力します。

誤ってnginx.confを上書きした場合は、少なくとも、ファイルの最後の行をinclude /etc/nginx/conf.d/*.conf;からinclude /etc/nginx/sites-enabled/*;に変更して、以前のインクルード動作を復元する必要があります。

新しくインストールされたバージョンを確認できます。

$ nginx -v
nginx version: nginx/1.13.5

最後に、service nginx startを実行しようとすると、次のメッセージで失敗することがわかります。

Failed to start nginx.service: Unit nginx.service is masked.

これは、以前にsystemdがnginxを管理するために使用していたnginx-commonを削除すると/lib/systemd/system/nginx.serviceもワイプされたためです。このファイルを復元するには、次のコマンドを使用して作成します。

$ echo "[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target
" > /lib/systemd/system/nginx.service

最後に、systemctl unmask nginxに続けてsystemctl enable nginxを実行すると、以前の設定をすべて変更せずに、以前と同じようにサービスを管理できるようになります。

$ service nginx start
5
SeinopSys