ASA-2019-00595 – PHP: underflow em env_path_info em fpm_main.c pode conduzir a Execução de Código Remota


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00595

Identificador(es)

ASA-2019-00595, CVE-2019-11043

Título

underflow em env_path_info em fpm_main.c pode conduzir a Execução de Código Remota

Fabricante(s)

The PHP Development Team

Produto(s)

PHP

Versão(ões) afetada(s)

PHP versões anteriores à 7.3.11
PHP versões anteriores à 7.2.24
PHP versões anteriores à 7.1.33

Versão(ões) corrigida(s)

PHP versão 7.3.11
PHP versão 7.2.24
PHP versão 7.1.33

Prova de conceito

Sim

Descrição

No PHP em certas configurações do FPM, é possível fazer com que o módulo FPM escreva dados além dos limites do buffer alocado no espaço reservado para o protocolo FCGI, permitindo assim  execução de código remota.

Detalhes técnicos

A linha 1140 no arquivo sapi/fpm/fpm/fpm_main.c contém aritmética de ponteiro que pressupõe que env_path_info tem um prefixo igual ao caminho para o script php. No entanto, o código não verifica se essa suposição foi satisfeita. A ausência da verificação pode permitir a existência de um ponteiro inválido na variável “path_info”.

Tais condições podem ser alcançadas em uma configuração bastante padrão do Nginx. Se Nginx for configurado da seguinte forma:

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

O expressão regular na diretiva `fastcgi_split_path_info` pode ser quebrado usando o caractere newline (na forma codificada, %0a). O expressão regular quebrada implica PATH_INFO vazio, o que aciona o bug.

Essa falha leva à execução do código. Posteriormente no código, o valor de path_info[0] é definido como zero; então FCGI_PUTENV é executado. Usando um comprimento determinado do caminho da URL e da string de consulta, um usuário pode fazer com que path_info aponte precisamente para o primeiro byte da estrutura _fcgi_data_seg. Colocar zero nele move o campo `char * pos` para trás e FCGI_PUTENV sobrescreve alguns dados (incluindo outras variáveis do cgi). Usando essa técnica, é possível criar uma variável PHP_VALUE fcgi falsa e usar uma cadeia de valores de configuração cuidadosamente escolhidos para obter a execução do código.

Créditos

neex, beched e d90pwn

Referência(s)

Sec Bug #78599 env_path_info underflow in fpm_main.c can lead to RCE
https://bugs.php.net/bug.php?id=78599

Fix bug #78599 (env_path_info underflow can lead to RCE) (CVE-2019-11043)
https://github.com/php/php-src/commit/ab061f95ca966731b1c84cf5b7b20155c0a1c06a

php-src/fpm_main.c
https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1140

php-src/fpm_main.c
https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1150

PHP-FPM Remote Code Execution Vulnerability (CVE-2019-11043) Analysis
https://paper.seebug.org/1064/

Testing CVE-2019-11043 (php-fpm security vulnerability) with LXD system containers
https://blog.simos.info/testing-cve-2019-11043-php-fpm-security-vulnerability-with-lxd-system-containers/

Addressing the PHP-FPM Vulnerability (CVE-2019-11043) with NGINX
https://www.nginx.com/blog/php-fpm-cve-2019-11043-vulnerability-nginx/

Exploit for CVE-2019-11043
https://github.com/neex/phuip-fpizdam

PHP 7.3.11 Released
https://www.php.net/archive/2019.php#2019-10-24-3

Version 7.3.11 – Changelog
https://www.php.net/ChangeLog-7.php#7.3.11

PHP 7.1.33 Released
https://www.php.net/archive/2019.php#2019-10-24-2

Version 7.3.11 – Changelog
https://www.php.net/ChangeLog-7.php#7.1.33

PHP 7.2.24 Released
https://www.php.net/archive/2019.php#2019-10-24-1

Version 7.2.24 – Changelog
https://www.php.net/ChangeLog-7.php#7.2.24

CVE-2019-11043
https://access.redhat.com/security/cve/CVE-2019-11043

CVE-2019-11043
https://security-tracker.debian.org/tracker/CVE-2019-11043

CVE-2019-11043 | SUSE
https://www.suse.com/security/cve/CVE-2019-11043

CVE-2019-11043 in Ubuntu
https://people.canonical.com/~ubuntu-security/cve/CVE-2019-11043.html

CVE-2019-11043
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11043

CVE-2019-11043
https://nvd.nist.gov/vuln/detail/CVE-2019-11043

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 5 novembro 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.