Análise de vulnerabilidade de execução remota de código PHP (CVE2019-11043)

Análise de vulnerabilidade de execução remota de código PHP (CVE2019-11043)

Recentemente, o Mechuang Security Lab monitorou que o PHP divulgou oficialmente uma vulnerabilidade de alto risco à execução remota de código (CVE2019-11043) sob algumas configurações de Nginx + php-fpm.Um invasor pode usar essa vulnerabilidade para realizar um ataque de execução remota de código em um site de destino. Embora o impacto desta vulnerabilidade seja limitado, devido à abertura do arquivo de configuração, use a equipe de operação e manutenção do niginx + php-fpm para fazer a verificação automática e a verificação automática no tempo.

Linha do tempo da vulnerabilidade 0x00

De 14 a 18 de setembro , o pesquisador de segurança estrangeira Andrew Danau descobriu que, ao participar do CTF do mundo real, ao enviar o símbolo% 0a para a URL do servidor de destino, o serviço retornou uma exceção, suspeitando de uma vulnerabilidade.
Em 26 de setembro , o PHP publicou oficialmente um aviso de vulnerabilidade, indicando que: usando o servidor Nginx + php-fpm, em algumas configurações, há uma vulnerabilidade de execução remota de código, e a configuração tem sido amplamente usada para causar maiores danos.
De 21 a 22 de outubro , o PHP lançou oficialmente a atualização de vulnerabilidade, e o POC de vulnerabilidade foi tornado público.
Em 24 de outubro, o Laboratório No. 59 emitiu um aviso de vulnerabilidade.

Descrição da vulnerabilidade 0x01

Ao processar uma solicitação com% 0a em fastcgi_split_path_info no Nginx, PATH_INFO está vazio devido a uma quebra de linha \ n. E o php-fpm tem uma falha lógica ao lidar com o PATH_INFO estar vazio. Os invasores podem causar execução remota de código por meio de PAYLOAD cuidadosamente construído e utilizado. Mas a configuração fastcgi usada pelo Nginx não é a configuração padrão do Nginx.

0x02 versão afetada

Ao usar o servidor configurado com Nginx + php-fpm, e a seguinte configuração é adotada no arquivo de configuração nginx / conf / nginx.confg, haverá vulnerabilidades do RCE

Location ~[^/]\.php(/|$){
  ...
  fastcgi_split_path_info  ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
}

Quando o campo fastcgi_split_path_info é configurado como ^ (. +?. Php) (/.*) $ ;, um invasor pode disparar uma vulnerabilidade de execução remota de código por meio de uma carga útil cuidadosamente construída.O código POC publicado pelo GitHub é gravado em um Webshell no diretório do site Para abrir a criação de backdoor. Embora após o PHP> = 5.3.3, o php-fpm esteja integrado ao núcleo do php, o servidor com a configuração acima ainda corre o risco de ser atacado.

Princípio de vulnerabilidade 0x03

A configuração do lado do servidor é a seguinte:
Insira a descrição da imagem aqui
O POC enviado ao servidor é fpm_main.c A conexão é a seguinte:
https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c

A vulnerabilidade foi causada principalmente pelo fluxo insuficiente de env_path_info no arquivo sapi / fpm / fpm / fpm_main.c no PHP-FPM, causado pela introdução de \ n (% 0a) na linha 1150 do arquivo "fpm_main.c" O PATH_INFO passado pelo nginx para o php-fpm está vazio. Por sua vez, a combinação de FCGI_PUTENV e PHP_VALUE pode ser usada para modificar a configuração do php no processo atual do php-fpm. A execução de código arbitrário pode ser acionada quando a configuração especialmente construída entrar em vigor.
Insira a descrição da imagem aqui

Recorrência da vulnerabilidade 0x04

Usando o ambiente vulhub, reproduza a vulnerabilidade CVE2019-11043.
Execute o docker-compose up -d no caminho do vulub / php / CVE-2019-11043 para gerar o ambiente de vulnerabilidade.Veja
Insira a descrição da imagem aqui
as informações de configuração do servidor no diretório vulhub / php / CVE-2019-11043 do diretório.default.conf
Insira a descrição da imagem aqui
Use a ferramenta phuip-fpizdam para explorar a vulnerabilidade .
Visite wget https://github.com/neex/phuip-fpizdam, descompacte e digite o diretório e execute go build para gerar phuip-fpizdam (esta ferramenta gerará automaticamente a versão correspondente do sistema operacional de acordo com o sistema operacional)
Insira a descrição da imagem aqui
Use a ferramenta phuip-fpizdam que acabou de gerar para enviar dados O pacote
Insira a descrição da imagem aqui
pode ser visto, aqui foi executado com êxito e, em seguida, visite http: // localhost: 8080 / index.php e traga o parâmetro a, onde a é o ponto de injeção onde a injeção de comando pode ser executada, usando / bin / sh ± c 'PAYLOAD' & , Injete códigos de comando, como id ou whoami, para descobrir que há um resultado de retorno para provar o uso bem-sucedido.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Há um lugar a ser observado aqui, porque o php-fpm iniciará vários subprocessos, portanto, ele precisa ser acessado várias vezes durante a injeção de comando até que o processo poluído seja acessado

Medidas de mitigação de emergência 0x05

Alto risco: os detalhes da vulnerabilidade e do código de teste foram divulgados.Recomenda-se atualizar o patch de atualização de segurança ou habilitar o exemplo de configuração oficialmente recomendado, ou implantar o WAF e outros equipamentos de proteção de segurança para monitorar a utilização da vulnerabilidade.

Dedução de ameaças: esta vulnerabilidade é uma vulnerabilidade de execução remota de código.Com base no número de usuários que usam o produto em todo o mundo, um invasor mal-intencionado pode desenvolver um programa de ataque automatizado que atinja a vulnerabilidade, implementa a implantação automática de programas de backdoor após a exploração da vulnerabilidade e libera o programa mineiro Ou programas maliciosos, como zumbis DDOS e cavalos de Troia, podem espalhar o worm, o que afeta o fornecimento normal de serviços da Web.

Sugestões de desenvolvimento de segurança: Os produtos da família PHP relataram várias vulnerabilidades de segurança no histórico.Recomenda-se que as empresas que usam este produto fortaleçam a filtragem de entrada do usuário por meio de códigos de desenvolvimento de segurança e prestem atenção aos anúncios de atualização de segurança a qualquer momento.

Método de defesa de reparo 0x06

  1. Modifique a expressão regular de fastcgi_split_path_info no arquivo de configuração do Nginx para não permitir caracteres não exibidos após .php
  2. Se as circunstâncias permitirem, suspenda o uso do serviço Nginx + php-fpm
  3. De acordo com os requisitos de negócios do seu ambiente de produção real, exclua a seguinte configuração
    fastcgi_split_path_info ^ (. +?. Php) (/.*) $;
    fastcgi_param PATH_INFO $ fastcgi_path_info;
Publicado 21 artigos originais · ganhou 14 · visitado 4075

Acho que você gosta

Origin blog.csdn.net/m0_38103658/article/details/102783914
Recomendado
Clasificación