← voltar
CVE-2019-11043highsob ataqueransomwareCWE-120

Underflow in PHP-FPM can lead to RCE

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 8.7epss 99%
da publicação à arma0 dias
Publicada no NVD28 de out.
1ª PoC23 de set.
metasploit22 de out.
CISA KEV+879d
probabilidade de exploração
99%top 1% das CVEs
exploração observada
simCISA + VulnCheck
50 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-04-15

Apply updates per vendor instructions.

Resumo

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.

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

Como é explorada

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.

Versões

Afetadas
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.
Corrigidas em
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.

Como se proteger

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.

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

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
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
Produtos afetados
PHP · PHP
PoCs públicas encontradas50 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/48182exploitdbwww.exploit-db.com/exploits/47553não 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/91fc59b00456não verificadovulncheckvulncheck.com/xdb/1de02e031a87não verificadovulncheckvulncheck.com/xdb/71b7cfe27514não verificadovulncheckvulncheck.com/xdb/7661c1eea5eenão verificadovulncheckvulncheck.com/xdb/b77e1a4b74e5não verificadovulncheckvulncheck.com/xdb/5d7564d7c174não verificadovulncheckvulncheck.com/xdb/5fa11c5956d1não verificadovulncheckvulncheck.com/xdb/8ca4fc37944enão verificadovulncheckvulncheck.com/xdb/3430044ed268não verificadovulncheckvulncheck.com/xdb/3b95194461e6não verificadovulncheckvulncheck.com/xdb/9493124c9054não verificadovulncheckvulncheck.com/xdb/20a6f27a3eddnão verificadovulncheckvulncheck.com/xdb/ce4ae09a0ce3não verificadovulncheckvulncheck.com/xdb/927a33704d7bnão verificadovulncheckvulncheck.com/xdb/37f204247f88não verificadovulncheckvulncheck.com/xdb/17d9321b8fd7não verificadovulncheckvulncheck.com/xdb/83bee4298642não verificadovulncheckvulncheck.com/xdb/095460149708não verificadovulncheckvulncheck.com/xdb/78cf4dd16e8cnão verificadovulncheckvulncheck.com/xdb/51adef4c9756não verificadocve_referencepacketstormsecurity.com/files/156642/PHP-FPM-7.x-Remote-Code-Execution.htmlnão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.