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