← volver
CVE-2019-11043highbajo ataqueransomwareCWE-120

Underflow in PHP-FPM can lead to RCE

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 8.7epss 99%
de la publicación al arma0 días
Publicada en NVD28 oct
1ª PoC23 sept
metasploit22 oct
CISA KEV+879d
probabilidad de explotación
99%top 1% de las CVE
explotación observada
CISA + VulnCheck
50 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-04-15

Apply updates per vendor instructions.

Resumen

Falha de integer underflow no PHP-FPM (sapi/fpm/fpm_main.c) que, em configurações específicas de nginx repassando PATH_INFO ao PHP via FastCGI, permite escrita fora dos limites do buffer reservado para dados do protocolo FastCGI, abrindo caminho para execução remota de código. O CVSS alto (8.7, AC:H) é justificado: a exploração não funciona contra qualquer instalação PHP-FPM — depende de um bloco de configuração nginx específico (muito comum em tutoriais e imagens Docker) que faz split de PATH_INFO via regex antes de passar ao FPM.

Detalle técnico

O bug está na rotina de fpm_main.c que calcula o comprimento de PATH_INFO/PATH_TRANSLATED a partir do request_uri recebido via FastCGI. Em certas combinações de PATH_INFO vazio ou malformado (dependente de como o frontend fez o split do path), a subtração usada para determinar o tamanho do path_info restante resulta em valor negativo que, armazenado em variável sem sinal (size_t), sofre underflow e se transforma num número enorme. Esse valor é então usado para escrever na região de memória reservada para os dados do protocolo FastCGI (o buffer que guarda os registros da requisição FCGI), corrompendo estruturas adjacentes na heap do processo worker do PHP-FPM.

Cómo se explota

Padrão CWE-191 (Integer Underflow) que degenera em CWE-787 (Out-of-Bounds Write). O atacante não controla diretamente um ponteiro ou offset — ele controla o request_uri e a query string enviados via HTTP, que o frontend (tipicamente nginx) reencaminha ao PHP-FPM via FastCGI após aplicar uma regex de split de path_info. Manipulando o formato da URI de forma que o split produza um path_info de tamanho inconsistente com o esperado, o atacante induz o cálculo negativo dentro do FPM.

Pré-requisito central, ignorado por quem só vê o CVSS: a instância precisa estar atrás de um proxy (nginx é o caso documentado) configurado com diretiva de split de PATH_INFO (ex.: `fastcgi_split_path_info`) e repasse do parâmetro `PATH_INFO` para o FastCGI — configuração amplamente copiada de exemplos oficiais de nginx+PHP-FPM e de imagens Docker prontas, mas não universal. Instalações que usam PHP como módulo Apache (mod_php) ou PHP-FPM sem esse split de path_info não são exploráveis por este vetor. Não é necessária autenticação nem interação do usuário (UI:N, PR:N), mas a complexidade de ataque é alta (AC:H) justamente pela dependência de configuração.

O resultado documentado por pesquisadores e replicado em PoC pública e módulo Metasploit é execução remota de código no processo worker do PHP-FPM. A CVE está no catálogo KEV da CISA, confirmando exploração ativa in-the-wild — consistente com o fato de a configuração vulnerável ser comum em stacks nginx+PHP-FPM expostos, tornando o alvo abundante para scanning automatizado assim que a PoC se tornou pública.

Versiones

Afectadas
PHP 7.1.x anterior a 7.1.33; 7.2.x anterior a 7.2.24; 7.3.x anterior a 7.3.11 (conforme descrição oficial). Distribuições com numeração de pacote própria também estavam vulneráveis independentemente dessa faixa: RHEL 6 (php 5.3.3 antes do backport), RHEL 7 (php 5.4.16 antes do backport) e Software Collections rh-php71/rh-php72 antes das respectivas atualizações.
Corregidas en
Upstream: PHP 7.1.33, 7.2.24 e 7.3.11. Backports de distro: php-5.4.16-46.1.el7_7 (RHEL 7, RHSA-2019:3286), php-5.3.3-50.el6_10 (RHEL 6, RHSA-2019:3287), rh-php71-php-7.1.30-2.el7 (RHSA-2019:3300) e rh-php72-php-7.2.24-1.el7 (RHSA-2019:3299) via Red Hat Software Collections. Existe também RHSA-2019:3724 na lista de referências para outro ramo de produto Red Hat, cujo conteúdo específico não foi verificado aqui.

Cómo protegerse

Correção definitiva: atualizar para PHP 7.1.33, 7.2.24 ou 7.3.11 (ou versões posteriores dos respectivos ramos). Distribuições que mantêm numeração própria de pacote backportaram a correção independente da versão upstream 7.x: Red Hat corrigiu em php-5.4.16-46.1.el7_7 (RHEL 7, RHSA-2019:3286), php-5.3.3-50.el6_10 (RHEL 6, RHSA-2019:3287), rh-php71-php-7.1.30-2.el7 (Software Collections, RHSA-2019:3300) e rh-php72-php-7.2.24-1.el7 (Software Collections, RHSA-2019:3299) — ou seja, checar apenas o número de versão upstream do PHP não é suficiente em sistemas RHEL/CentOS baseados em pacotes da distro. Após aplicar o pacote, é necessário reiniciar o daemon httpd/php-fpm para o patch entrar em vigor.

Se a atualização não for possível de imediato, o paliativo real e amplamente recomendado na época foi alterar a configuração do proxy (nginx) para validar que o SCRIPT_FILENAME resolvido corresponde a um arquivo .php existente antes de repassar a requisição ao FastCGI (por exemplo, adicionando uma verificação de existência do arquivo antes do bloco `fastcgi_pass`), impedindo que requisições com PATH_INFO forjado alcancem o PHP-FPM. O custo é quebrar rotas que dependem legitimamente de PATH_INFO — funcionalidade rara na maioria das aplicações.

Mito a descartar: desabilitar `cgi.fix_pathinfo` no php.ini não corrige a falha, porque o underflow ocorre na rotina de parsing de path_info do fpm_main.c independentemente dessa diretiva. Restringir a exploração exige atacar a configuração do proxy, não uma flag do PHP.

Cómo detectar

Não há uma assinatura única e confiável de exploração, mas indícios úteis em log incluem: crashes ou reinícios repentinos de workers do PHP-FPM no error log (segmentation faults associados ao processo fpm), requisições HTTP para endpoints .php com PATH_INFO anômalo — sufixos, bytes de controle (como quebras de linha codificadas) ou caracteres inesperados após a extensão .php que não correspondem a uso legítimo de path_info da aplicação —, e picos de erros 502/500 em endpoints PHP coincidindo com scanning automatizado.

Como existe PoC pública e módulo Metasploit desde a divulgação, e a CVE está no catálogo KEV da CISA, é razoável assumir tentativas de exploração oportunista contra qualquer stack nginx+PHP-FPM exposta publicamente sem os devidos patches, mesmo sem log específico do fornecedor confirmando esse comportamento.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it is possible to cause FPM module to write past allocated buffers into the space reserved for FCGI protocol data, thus opening the possibility of remote code execution.
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:N
Productos afectados
PHP · PHP
PoCs públicas encontradas50 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/48182exploitdbwww.exploit-db.com/exploits/47553no verificadogithubgithub.com/neex/phuip-fpizdam1833githubgithub.com/theMiddleBlue/CVE-2019-11043146githubgithub.com/jas502n/CVE-2019-11043105githubgithub.com/akamajoris/CVE-2019-11043-Docker27githubgithub.com/k8gege/CVE-2019-1104316githubgithub.com/0th3rs-Security-Team/CVE-2019-1104314githubgithub.com/kriskhub/CVE-2019-1104314githubgithub.com/ypereirareis/docker-CVE-2019-110438githubgithub.com/huowen/CVE-2019-110435githubgithub.com/lindemer/CVE-2019-110434githubgithub.com/AleWong/PHP-FPM-Remote-Code-Execution-Vulnerability-CVE-2019-11043-4githubgithub.com/MRdoulestar/CVE-2019-110433githubgithub.com/CodeHex083/phuip-fpizdam3githubgithub.com/jptr218/php_hack2githubgithub.com/moniik/CVE-2019-11043_env1githubgithub.com/fairyming/CVE-2019-110431githubgithub.com/shadow-horse/cve-2019-110431githubgithub.com/corifeo/CVE-2019-110430githubgithub.com/tinker-li/CVE-2019-110430githubgithub.com/ianxtianxt/CVE-2019-110430githubgithub.com/bayazid-bit/CVE-2019-110430githubgithub.com/a1ex-var1amov/ctf-cve-2019-110430githubgithub.com/jas9reet/CVE-2019-110430githubgithub.com/AndrewMas99/CVE-2019-11043-Vulnerability0githubgithub.com/gon905332-jpg/cve-2019-11043.py0githubgithub.com/B1gd0g/CVE-2019-110430githubgithub.com/alokaranasinghe/cve-2019-110430vulncheckvulncheck.com/xdb/91fc59b00456no verificadovulncheckvulncheck.com/xdb/1de02e031a87no verificadovulncheckvulncheck.com/xdb/71b7cfe27514no verificadovulncheckvulncheck.com/xdb/7661c1eea5eeno verificadovulncheckvulncheck.com/xdb/b77e1a4b74e5no verificadovulncheckvulncheck.com/xdb/5d7564d7c174no verificadovulncheckvulncheck.com/xdb/5fa11c5956d1no verificadovulncheckvulncheck.com/xdb/8ca4fc37944eno verificadovulncheckvulncheck.com/xdb/3430044ed268no verificadovulncheckvulncheck.com/xdb/3b95194461e6no verificadovulncheckvulncheck.com/xdb/9493124c9054no verificadovulncheckvulncheck.com/xdb/20a6f27a3eddno verificadovulncheckvulncheck.com/xdb/ce4ae09a0ce3no verificadovulncheckvulncheck.com/xdb/927a33704d7bno verificadovulncheckvulncheck.com/xdb/37f204247f88no verificadovulncheckvulncheck.com/xdb/17d9321b8fd7no verificadovulncheckvulncheck.com/xdb/83bee4298642no verificadovulncheckvulncheck.com/xdb/095460149708no verificadovulncheckvulncheck.com/xdb/78cf4dd16e8cno verificadovulncheckvulncheck.com/xdb/51adef4c9756no verificadocve_referencepacketstormsecurity.com/files/156642/PHP-FPM-7.x-Remote-Code-Execution.htmlno verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.