Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-46394-haxcms-git-command-injection — PoC وشرح للثغرة CVE-2026-46394: حقن أوامر نظام التشغيل في HAXcms Git.php (CWE-78). لأغراض البحث الأمني المصرح به فقط. | Kitploit
أدوات/GitHubGitHub/shreyas-challa/cve-2026-46394-haxcms-git-command-injection
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليم
GitHubshreyas-challa/cve-2026-46394-haxcms-git-command-injection

CVE-2026-46394-haxcms-git-command-injection

PoC وشرح للثغرة CVE-2026-46394: حقن أوامر نظام التشغيل في HAXcms Git.php (CWE-78). لأغراض البحث الأمني المصرح به فقط.

عرض المستودع
1منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-46394 - حقن أوامر نظام التشغيل في Git.php الخاص بـ HAXcms (CWE-78)

إثبات المفهوم للاختبار الأمني والبحث المصرح به فقط. الثغرة الموضحة هنا تم إصلاحها في أحدث إصدار من HAXcms. نُشر إثبات المفهوم هذا ليتمكن المدافعون والباحثون من التحقق من المشكلة على النسخ غير المُصححة التي يملكونها أو المصرح لهم صراحةً باختبارها.

CVECVE-2026-46394
المكوّنالواجهة الخلفية PHP الخاصة بـ HAXcms - system/backend/php/lib/Git.php
الثغرةحقن أوامر نظام التشغيل (CWE-78)
الخطورةعالية - CVSS 3.1 7.2 منفردة / 8.1 عند دمجها مع اجتياز المسار
الحالةمُصلَحة من المصدر. تؤثر على الإصدارات السابقة للتصحيح.
المشروعelmsln/HAXcms
المُبلِّغShreyas Challa ([email protected])

الملخص

تبني مكتبة Git.php في الواجهة الخلفية PHP الخاصة بـ HAXcms سلاسل أوامر الصدفة عن طريق ربط معاملات غير مُعقّمة وتمررها مباشرة إلى proc_open(). من بين 17 دالة تنفّذ أوامر الصدفة، هناك واحدة فقط (commit()) تستخدم escapeshellarg(). أما الدوال الـ 15 المتبقية فتُدرج مدخلات المتصل مباشرة في سلسلة الأمر.

أي قيمة تحتوي على محارف صدفة خاصة (&, ;, |, $(), backticks) تصل إلى إحدى هذه الدوال تؤدي إلى تنفيذ أوامر نظام تشغيل عشوائية بصلاحيات مستخدم خادم الويب.

الدالة الوحيدة المُهرَّبة بشكل صحيح هي أوضح دليل على أن الهروب كان مفهومًا وتم إهماله ببساطة في كل مكان آخر.

السبب الجذري

تمر جميع الدوال القابلة للاستغلال عبر run() → run_command() → proc_open():

root@kitploit:~
// Git.php:408-411 - builds a raw command string
public function run($command) {
    return $this->run_command(Git::get_bin() . " " . $command);
}

// Git.php:383 - executes it via the system shell
$resource = proc_open($command, $descriptors, $pipes, $this->repo_path, $env);

مثال قابل للاستغلال مقابل الدالة الآمنة الوحيدة:

root@kitploit:~
// Git.php:574 - VULNERABLE (no escaping)
public function create_branch($branch) {
    return $this->run("branch $branch");
}

// Git.php:496 - SAFE (proves the author knew the pattern)
public function commit($message = "") {
    return $this->run("commit -av -m " . escapeshellarg($message));
}

جميع الدوال المتأثرة

الدالةالسطرأمر الصدفةتم الهروب؟
create_branch($branch)574branch $branchلا
delete_branch($branch)588branch -d $branchلا
checkout($branch)663checkout $branchلا
merge($branch)677merge $branch --no-ffلا
push($remote, $branch)785push $remote $branch $flagsلا
pull($remote, $branch)799pull $remote $branchلا
log($format)813log --pretty=format:"$format"لا
show($commit, $format)830show --pretty=format:"$format" $commitلا
list_tags($pattern)763tag -l $patternلا
clone_to($target)512clone --local $repo $targetلا
clone_from($source)527clone --local $source $repoلا
clone_remote($source)543clone $source $repoلا
set_remote($dest, $url)460remote add $dest $urlلا
rm($files)

الاستغلال في السياق

في قاعدة الكود الموزعة، تُستدعى هذه الدوال بقيم مأخوذة من إعدادات الخادم/الموقع وليس مباشرة من أجسام الطلبات، لذلك يتحقق الاستغلال عن طريق التسلسل:

  • اجتياز المسار → تسميم الإعدادات → تنفيذ الأكواد (RCE): استخدم اجتياز المسار في saveOutline لاستبدال ملف site.json الخاص بموقع ما، وحقن محارف خاصة في metadata.site.git.branch. الاستدعاء التالي لـ gitCommit() يستدعي push('origin', $branch) عند HAXCMSSite.php:584، لتنفيذ الحمولة.
  • أي آلية أخرى تكتب إعدادات فرع/remote الخاصة بـ git في ملف manifest تصل إلى create_branch() (Operations.php:2762) أو set_remote() (HAXCMSSite.php:625).

تشغيل إثبات المفهوم

يُشغّل إثبات المفهوم مكتبة Git.php الفعلية مباشرة: فهو يُنشئ مستودع git مؤقتًا يُتخلص منه، ويستدعي create_branch() بحمولة تستخدم فاصل أوامر الصدفة، ويؤكد التنفيذ بفحص وجود ملف إثبات مكتوب على القرص. وينظف آثاره بعد ذلك بنفسه.

المتطلبات الأساسية

  • PHP CLI (7.x أو 8.x)
  • git على PATH
  • نسخة من الواجهة الخلفية PHP الخاصة بـ HAXcms
root@kitploit:~
git clone https://github.com/elmsln/HAXcms.git
git clone https://github.com/shreyas-challa/CVE-2026-46394-haxcms-git-command-injection.git
cd CVE-2026-46394-haxcms-git-command-injection

التشغيل

وجّه إثبات المفهوم إلى Git.php من نسختك المستنسخة من HAXcms (عبر متغير البيئة أو الوسيطة الأولى)؛ كما يكتشف تلقائيًا مجلد haxcms-php/ الموضوع بجانبه:

root@kitploit:~
# Option A - environment variable
HAXCMS_PHP=../HAXcms/haxcms-php/system/backend/php/lib/Git.php php poc_git_cmdi.php

# Option B - CLI argument
php poc_git_cmdi.php ../HAXcms/haxcms-php/system/backend/php/lib/Git.php

يعمل على كل من Unix (الفاصل ;) وWindows (الفاصل &)؛ يختار إثبات المفهوم الحمولة الصحيحة تلقائيًا حسب نظام التشغيل المضيف.

مخرجات نموذجية

root@kitploit:~
================================================================
  HAXcms Git.php - OS Command Injection (CWE-78)
================================================================

STEP 3: Inject OS command via create_branch()
  Payload: test & echo COMMAND_INJECTION_PROOF > "...\PWNED.txt"

STEP 4: Verify injected command executed
  FILE FOUND!
    Content: COMMAND_INJECTION_PROOF
  COMMAND INJECTION CONFIRMED.

المعالجة

طبّق escapeshellarg() على كل معامل في جميع الدوال الـ 15:

root@kitploit:~
// BEFORE
public function create_branch($branch) {
    return $this->run("branch " . $branch);
}
// AFTER
public function create_branch($branch) {
    return $this->run("branch " . escapeshellarg($branch));
}

الدفاع في العمق - تحقق من صحة القيم قبل وصولها إلى طبقة git:

root@kitploit:~
function validateBranchName($branch) {
    return preg_match('/^[a-zA-Z0-9._\/-]+$/', $branch) && strpos($branch, '..') === false;
}

قم بالتحديث إلى أحدث إصدار من HAXcms، والذي يحتوي على الإصلاح من المصدر.

الإفصاح المسؤول

تم الإبلاغ عن هذه الثغرة إلى القائمين على صيانة HAXcms وتم إصلاحها قبل النشر. تم إصدار إثبات المفهوم فقط بعد توفر التصحيح. استخدمه حصريًا ضد الأنظمة التي تملكها أو المصرح لك صراحةً باختبارها.

إشعار قانوني / الاستخدام المصرح به

هذه المادة مقدمة لـ البحث الدفاعي والتعليم والاختبار الأمني المصرح به. قد يكون تشغيلها ضد أنظمة دون إذن صريح غير قانوني. أنت وحدك المسؤول عن الامتثال لجميع القوانين المعمول بها وعن الحصول على التفويض قبل الاختبار. مقدمة «كما هي» بدون أي ضمان (انظر LICENSE).

تنزيل الأداة
479
rm $files
لا
add_tag($tag, $msg)749tag -a $tag -m $msg$tag: لا, $msg: نعم
commit($message)496commit -av -m $messageنعم (الوحيدة الآمنة)