Atualizando o nginx 1.10.3 no Debian 9 (stretch) para evitar a vulnerabilidade CVE-2017-7529

2

A partir de agora, o Debian 9 (stretch) instala o nginx versão 1.10.3, que é vulnerável a CVE-2017-7529 :

Nginx versions since 0.5.6 up to and including 1.13.2 are vulnerable to integer overflow vulnerability in nginx range filter module resulting into leak of potentially sensitive information triggered by specially crafted request.

Estou preocupado com a segurança dos dados dos meus usuários, por isso gostaria de atualizar para a versão mais recente que não é mais afetada por esse problema.

    
por SeinopSys 21.09.2017 / 22:22

1 resposta

2

Existem várias maneiras de obter o nginx 1.13.3 e superior. Você mesmo pode compilar, use o repositório stretch-backports , ou você pode adicionar o próprio repositório apt do nginx. Nessa resposta, estarei andando com você até o último, pois é provavelmente o mais fácil de fazer entre os três.

O site do nginx tem uma página dedicada sobre como configurar seu repositório, mas há mais, especialmente se você quer evitar essa vulnerabilidade específica a partir de agora. A ramificação stable instalará 1.12.0, que ainda está vulnerável (foi corrigido em 1.12.1+ e 1.13.3+), portanto, você precisará usar mainline , que instalará 1.13.5.

Na melhor das hipóteses, alternar a versão nginx deve ser tão simples quanto executar alguns comandos e você concluirá em 2 a 3 minutos com o mínimo de tempo de inatividade. Para poder voltar a funcionar assim que possível, vamos começar a preparar a instalação. Primeiro, você precisa adicionar o repositório à sua configuração apt, adicionar a chave de assinatura e atualizar a lista de pacotes: ( apt e apt-get funcionam aqui, apt é apenas menor)

$ 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 - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
$ sudo apt update

Em seguida, execute o seguinte comando:

$ sudo apt remove nginx-common

Isto irá efetivamente desinstalar o nginx do sistema, mas preservará seus arquivos de configuração, exceto por um arquivo de serviço systemd que é fácil de restaurar.

Em seguida, instale o nginx no novo repositório:

$ sudo apt install nginx

Esteja ciente de que isso perguntará se você deseja substituir determinados arquivos de configuração, como este:

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] ?

Certifique-se de que não insira Y , apenas pressione Enter ou digite N sempre que for solicitado a evitar a perda da configuração atual.

Se você acidentalmente substituir seu nginx.conf , precisará - no mínimo - alterar a última linha do arquivo de include /etc/nginx/conf.d/*.conf; para include /etc/nginx/sites-enabled/*; para restaurar o comportamento de inclusão anterior.

Você pode verificar a versão recém-instalada:

$ nginx -v
nginx version: nginx/1.13.5

Por fim, você notará que a tentativa de executar service nginx start falha com a seguinte mensagem:

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

Isso ocorre porque a remoção de nginx-common também limpou /lib/systemd/system/nginx.service que foi usado anteriormente pelo systemd para gerenciar o nginx. Para restaurar este arquivo, basta criá-lo usando o comando abaixo:

$ 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

Por fim, execute systemctl unmask nginx seguido de systemctl enable nginx e, agora, você poderá gerenciar o serviço como antes, com todas as configurações anteriores intactas.

$ service nginx start
    
por 21.09.2017 / 22:22