
استغلال إثبات المفهوم لـ CVE-2025-53367، وهي ثغرة في مكتبة DjVuLibre. يوضح استغلال خطأ تلف الذاكرة في معالجة مستندات DjVu.
DjVu (تُنطق "ديجا فو") هي مجموعة من تقنيات الضغط، وتنسيق ملفات، ومنصة برمجية لتقديم المستندات الرقمية والمستندات الممسوحة ضوئيًا والصور عالية الدقة عبر الويب.
تنزّل مستندات DjVu وتُعرَض بسرعة فائقة، وتبدو متطابقة تمامًا على جميع المنصات. يمكن اعتبار DjVu بديلاً متفوقًا على PDF و Postscript للمستندات الرقمية، وعلى TIFF (وPDF) للمستندات الممسوحة ضوئيًا، وعلى JPEG للصور الفوتوغرافية والصور، وعلى GIF للصور الكبيرة ذات اللوحات اللونية. DjVu هو تنسيق الويب الوحيد العملي لتوزيع المستندات الممسوحة ضوئيًا عالية الدقة بالألوان. لا يوجد تنسيق آخر يقاربه.
أحجام ملفات DjVu النموذجية هي كما يلي:
المستندات الممسوحة ضوئيًا ثنائية اللون: 5 إلى 30 كيلوبايت لكل صفحة بدقة 300dpi، أصغر بمقدار 3 إلى 10 مرات من PDF أو TIFF.
المستندات الممسوحة ضوئيًا الملونة: 30 إلى 100 كيلوبايت لكل صفحة بدقة 300dpi، أصغر بمقدار 5 إلى 10 مرات من JPEG.
الصور الفوتوغرافية: أصغر مرتين من JPEG، وتقريبًا بنفس حجم JPEG-2000.
الصور ذات اللوحات اللونية: أصغر مرتين من GIF، وحتى 10 مرات إذا كان هناك نص.
يُستخدم DjVu من قِبل مئات المواقع التجارية والحكومية وغير التجارية حول العالم لتوزيع المستندات الممسوحة ضوئيًا والمستندات الرقمية والصور عالية الدقة.
يمكن العثور على العروض التوضيحية والمعلومات العامة حول DjVu على http://www.djvuzone.org، أو على http://www.lizardtech.com.
طُوّر DjVu في الأصل في AT&T Labs-Research. باعت AT&T تقنية DjVu إلى شركة LizardTech Inc. في مارس 2000.
في إطار الجهود الرامية إلى الترويج لـ DjVu كمعيار ويب، كان لدى إدارة LizardTech من البصيرة ما يكفي لإصدار التطبيق المرجعي لـ DjVu بموجب رخصة GNU GPL في أكتوبر 2000. DjVuLibre (تُنطق مثل الفرنسية "ديجا فو ليبري") هي نسخة محسّنة من ذلك الكود يديرها المخترعون الأصليون لـ DjVu. وهي متوافقة مع برنامج DjVu من LizardTech الإصدار 3.5.
تتضمن هذه الحزمة:
عارض ملفات DjVu الكامل والمكوّن الإضافي للمتصفح DjView4 متاح كحزمة منفصلة.
يعتمد DjVuLibre-3.5 على مكونات مختلفة متاحة عبر الويب.
معظم توزيعات Linux الحديثة تأتي مع هذه المكونات بالفعل.
يمكنك أيضًا تنزيلها وترجمتها إذا رغبت.
تأكد من قراءة الملاحظات الخاصة بالأنظمة
في نهاية هذا الملف.
المترجم -- يتم التطوير باستخدام مترجم GCC g++، ولذلك يُنصح به لجميع المنصات. تمت تجربة مترجم CLANG ويبدو أنه يعمل، لكن مخرجاته لم تُختبر بشكل جاد.
LIBJPEG/LIBTIFF --
عدد صغير من ملفات DjVu يستخدم داخليًا ترميز JPEG بدلاً
من ترميز الموجات IW44. تتم معالجة هذه الملفات باستخدام
الإصدار 6a أو 6b من مكتبة IJG libjpeg http://www.ijg.org.
بعض البرامج المساعدة قادرة على قراءة ملفات TIFF. تعتمد
هذه البرامج على مكتبة LIBTIFF http://libtiff.org.
يمكنك أيضًا ترجمة DjVuLibre بدون دعم JPEG أو TIFF معًا.
وقد لا تلاحظ الفرق أبدًا.
من المرجح أن يعمل كل شيء بمجرد تشغيل الأوامر "./configure" و"make" و"make install".
لاحظ أنه لن يكون هناك ملف configure إذا حصلت على مصدر djvulibre باستخدام git clone. بدلاً من ذلك، يوجد سكربت 'autogen.sh' يستخدم automake لتوليد واستدعاء سكربت configure الفعلي. نظرًا لأن جميع وسائط autogen.sh ستُمرَّر إلى configure، يمكنك ببساطة التعامل مع autogen.sh كبديل لـ configure.
تؤثر خيارات ومتغيرات بيئة مختلفة على تنفيذ سكربت الإعداد. يمكن الحصول على قائمة كاملة بكتابة "configure --help". راجع أيضًا ملف INSTALL لمزيد من التفاصيل. فيما يلي أهمها.
الخيار "--prefix=PREFIXDIR" يحدد هذا الخيار المكان الذي سيتم تثبيت برنامج DjVuLibre فيه. البادئة الافتراضية هي /usr/local.
الخيار "--enable-desktopfiles[=(yes|no)]" يثبّت ملفات الأيقونات وملفات أنواع MIME في أدلة xdg المعتادة. الافتراضي هو "yes".
الخيار "--with-jpeg=JPEGDIR" يحدد هذا الخيار دليلاً تم فيه تجميع مكتبة JPEG. يحتوي هذا الدليل على ملفات التضمين والمكتبة معًا. بدون هذا الخيار، سيبحث سكربت الإعداد عن مكتبة JPEG في الأماكن القياسية. وعندما تفشل كل المحاولات الأخرى، يمكنك ببساطة تعريف متغيري البيئة JPEG_CFLAGS و JPEG_LIBS.
الخيار "--with-tiff=TIFFDIR" يحدد هذا الخيار دليلاً تم فيه تجميع مكتبة LIBTIFF. يحتوي هذا الدليل على ملفات التضمين والمكتبة معًا. بدون هذا الخيار، سيبحث سكربت الإعداد عن مكتبة LIBTIFF في الأماكن القياسية. وعندما تفشل كل المحاولات الأخرى، يمكنك ببساطة تعريف متغيري البيئة TIFF_CFLAGS و TIFF_LIBS.
تحقق دائمًا من مخرجات سكربت الإعداد بحثًا عن التحذيرات والأخطاء. على وجه الخصوص، قد يعطّل سكربت الإعداد ترجمة djview إذا تعذر عليه تحديد موقع المكتبات والأدوات المطلوبة. رسائل التحذير هي الطريقة الوحيدة لمعرفة ذلك.
يمكنك بعد ذلك تنفيذ الترجمة بكتابة
$ make
قد تستغرق الترجمة بضع دقائق. تحقق مرة أخرى من المخرجات بحثًا عن التحذيرات والأخطاء. أخيرًا، رسالة قصيرة تخبرك بأن الترجمة كانت ناجحة. يمكنك بعد ذلك المتابعة إلى التثبيت.
بكتابة:
$ make install
أو إذا لزم الأمر:
$ sudo make install
يجب أن:
حيث يشير ${prefix} إلى الدليل المحدد بواسطة خيار prefix في سكربت الإعداد، والذي يكون افتراضيًا "/usr/local"، ويمكن ضبط المسارات أعلاه بدقة باستخدام الوسائط المناسبة لأوامر ./configure و make.
ننصحك أولاً بتثبيت homebrew واستخدام الأمر "brew install" للحصول على الحزم التالية: $ brew install autoconf automake libtool pkg-config $ brew install jpeg libtiff
لاحظ أن homebrew يأتي مع حزمة djvulibre بالفعل. توضح التعليمات التالية كيفية ترجمة djvulibre بشكل مستقل. قد ترغب في القيام بذلك إذا كنت تريد أحدث إصدار من djvulibre. وإلا، فمن المرجح أن تكتفي بتثبيت حزمة djvulibre من homebrew. $ brew install djvulibre
لكن معظم المستخدمين سيجدون أن مجرد تثبيت حزمة homebrew كافٍ.
ثم يمكنك تشغيل configure $ ./configure --disable-desktopfiles
ثم يمكنك الترجمة باستخدام $ make
سيؤدي تشغيل "make install" إلى تثبيت djvulibre في الدليل /usr/local. قد لا تكون هذه فكرة جيدة لأنها ستتعارض مع homebrew. يمكنك بدلاً من ذلك تحديد دليل بديل باستخدام DESTDIR=... $ make install DESTDIR=/usr/local/djvulibre-install
انظر إلى الدليل win32. املأ أدلة zlib و jpeg و tiff بالكود مفتوح المصدر المقترح في ملفات README. تحقق من win32/djvulibre/dirs.props لمعرفة كيفية تسمية الأدلة. ثم افتح win32/djvulibre/djvulibre.sln وقم بالترجمة.
الخطوة التالية هي اتباع التعليمات في حزمة djview لإنشاء مشروع djview وإضافته إلى هذا الحل. أخيرًا، يمكنك استخدام السكربت djvulibre-install.sh و djvulibre.nsi لتجهيز مثبّت djvulibre+djview.
يجب عليك أولاً تثبيت مترجم mingw وبيئة msys. راجع www.mingw.org لمزيد من المعلومات. من صدفة msys، شغّل الأوامر المعتادة $ configure $ make ثم اجمع ملف الـ dll الخاص بـ djvulibre من الدليل libdjvu/.libs والملفات القابلة للتنفيذ من الدليل tools/.libs يُرجى الرجوع إلى ملف INSTALL للحصول على معلومات حول وسائط السكربت 'configure'.
ببساطة شغّل الأوامر المعتادة $ configure $ make $ make install يُرجى الرجوع إلى ملف INSTALL للحصول على معلومات حول وسائط السكربت 'configure'.