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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
gdcm-security-poc — حزمة إعادة إنتاج خاصة لمعقم شامل من الطرف إلى الطرف لستة اكتشافات في GDCM | Kitploit
أدوات/GitHubGitHub/abhinavagarwal07/gdcm-security-poc
التحليل الثابتالتحليل الديناميكي (عزل)تحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالاستغلالالاختبار العشوائيتحليل الملفات الثنائيةالأوراق والأبحاثالتعلم والتعليم

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
GitHubabhinavagarwal07/gdcm-security-poc

gdcm-security-poc

حزمة إعادة إنتاج خاصة لمعقم شامل من الطرف إلى الطرف لستة اكتشافات في GDCM

عرض المستودع
3منذ يوم واحدلم تتم المراجعة بعد
مشاركة

نتائج GDCM 1-6: حزمة إعادة الإنتاج

ستة عيوب في المحلّل/المرمّز (parser/codec) في GDCM، أُعيد إنتاجها على الإصدار v3.2.6 كإخفاقات sanitizer أو فحوصات انتشار محدودة. لكل مُشغّل آلي ضابط شبه صالح لا يُنتج الإشارة القابلة للاستغلال. تتضمّن النتيجة 1 أيضًا عنصرًا أوليًا مُجهّزًا لتدفّق التحكّم.

مُوجّه لمراجعة المشرف ومنسّق الثغرات. اقرأ SAFETY.md قبل تشغيل أي شيء.

الأهداف المثبّتة

manifest/targets.env:

الاسمالمراجعةما هو
vulnerable9c71b163وسم v3.2.6
master2cd05d13لقطة master من المنبع روجعت ساكنًا؛ مصفوفة التشغيل معلّقة
fixedغير محدّديُملأ فقط عند وجود commit معالجة مُراجَع

master لقطة مؤرّخة، وليس فرعًا متحرّكًا. كلتا المراجعتين متاحتان من المستودع العام، لذا يمكن لـ bootstrap.sh تجهيز أيٍّ منهما دون أي مصدر خاص.

نطاق النتائج

الأدلة التشغيلية في هذا المستودع تخصّ v3.2.6. النطاقات الأوسع أدناه مستمدّة من فحص تاريخ المصدر؛ كما تبقى الأنماط المتورّطة في لقطة master المثبّتة.

#CWEالنطاق المفحوص في المصدرالمسار المطلوب
1CWE-787v3.0.4 حتى v3.2.7قراءة YBR_FULL_422 متعدّدة الإطارات بـ RLE
2CWE-787v2.0.16 حتى v3.2.7ترميز/تحويل JPEG2000
3CWE-125v2.0.5 حتى v3.2.7تحليل لوحة الألوان المُجزّأة؛ تطبيق LUT يكشف القيم المنتشرة
4CWE-787v2.0.8 حتى v3.2.7ImageRegionReader::ReadIntoBuffer؛ مرتبط بالتحقّق غير المكتمل من الدقة بعد CVE-2024-22373
5CWE-674v2.0.4 أو أقدم حتى v3.2.7تحليل التسلسلات المتداخلة العادية
6CWE-369v2.0.4 أو أقدم حتى v3.2.7تحليل RLE العادي مع NumSegments=0

المحتويات

  • fixtures/ - مدخلات DICOM الخاملة، مثبّتة بـ SHA-256 في manifest/expectations.json ويُتحقّق منها قبل كل تشغيل مُشغّل
  • generators/ - مولّدات مصدرية حتمية بلا اعتماديات لكل fixture
  • harnesses/ - حاضنات قراءة/ترميز/فك ترميز دنيا؛ النتيجة 2 معروضة عبر كلٍّ من واجهة gdcmconv الطرفية وواجهة تحويل الترميز المكتبية التي يستدعيها الخادم
  • manifest/expectations.json - أوامر قابلة للقراءة آليًا، وإشارات حاسمة، ومعايير قبول للهدف fixed
  • scripts/ - تجهيز المصدر المثبّت، وبناء sanitizer، والتنفيذ المحدود، والتنظيف
  • evidence/ - نتائج موجزة لوحظت بالفعل، مع ذكر الأهداف غير المختبَرة صراحةً
  • LICENSE - رخصة MIT

المتطلّبات المسبقة

بيئة بناء Linux أو macOS قابلة للتخلّص منها مع Git وPython 3 وCMake 3.20+ وNinja وسلسلة أدوات C++11 (Clang أو GCC). على Ubuntu: git python3 cmake ninja-build clang zlib1g-dev. اضبط CC/CXX لاستخدام GCC بدلًا من ذلك.

تجهيز المصدر يستنسخ عبر HTTPS ما لم يُشِر GDCM_SOURCE_REPO إلى نسخة محلية موجودة. لا يُستخدم أي مضيف SSH.

التجهيز والبناء

هذه الأوامر تجهّز المصدر ومخرجات البناء فقط؛ ولا تفتح أي fixture.

root@kitploit:~
./scripts/build-target.sh vulnerable asan  debug
./scripts/build-target.sh vulnerable ubsan debug
./scripts/build-target.sh master     asan  debug
./scripts/build-target.sh master     ubsan debug

الوسيط الثالث هو الملف التعريفي (profile). debug هو -O0 -g؛ وrelease هو -O2 -g -DNDEBUG، الذي يُلغي gdcm_debug_assert() في GDCM ويطابق كيفية بناء التوزيعات للمكتبة. تشغيل المصفوفة تحت كليهما يجيب على السؤال الأول الذي يطرحه المشرف، وهو ما إذا كانت التقارير ناتجة عن بناء مُفعّل فيه التحقّقات.

GDCM_SUPPORT_BROKEN_IMPLEMENTATION=ON هو الإعداد الافتراضي لـ GDCM نفسه ويُترك كما هو. تجاوز التوازي المتحفّظ بـ JOBS=8.

كل بناء يكتب build-info.json (المراجعة، المترجم، الأعلام، المنصّة) في شجرة بناء GDCM الخاصة به، وكل ملخّص تشغيل يُضمّنه، لذا تكون الأدلة المؤرشفة واصفة لنفسها.

التشغيل

root@kitploit:~
export GDCM_REPRO_ACK=I_UNDERSTAND_THIS_CRASHES_A_LOCAL_PROCESS

./scripts/run-matrix.sh vulnerable master --profile debug   # all automated cases
./scripts/run-one.sh vulnerable f1                          # one trigger
./scripts/run-one.sh vulnerable f1 --control                # its control

يشغّل run-matrix.sh كل حالة آلية لكل هدف، ولا يتوقّف عند أول فشل، ويكتب _runs/matrix-<stamp>.json بالإضافة إلى _runs/matrix-<stamp>.md المُصاغ. تبقى حالة f1-exploit ذات المرحلتين يدوية وتُبلَّغ على هذا النحو بدلًا من تصنيفها خطأً كحالة آلية فاشلة.

كل عملية فرعية لديها core dumps معطّلة ومهلة 15 ثانية؛ كما تحصل النتيجة 5 إضافةً على حدّ مكدّس محدود. تبقى المخرجات تحت _runs/. يطابق المصنّف فئة sanitizer والدالة المتورّطة، وليس العناوين أو PIDs أو أرقام أسطر المصدر.

بالنسبة لـ vulnerable، تنجح الحالة عندما تظهر الإشارة الحاسمة ويبقى ضابطها نظيفًا. بالنسبة لـ master، يسجّل المشغّل ملاحظة بدلًا من حكم مُعلن مسبقًا. بالنسبة لـ fixed، تنجح الحالة فقط عندما تغيب الإشارة، ولا يظهر أي sanitizer آخر أو إشارة قاتلة، وتُعيد الحاضنة نتيجة نظيفة مسموحة. هذه القواعد مؤقتة حتى يُسمّي FIXED_REV تصحيحًا فعليًا؛ ويجب مراجعتها مقابل سلوك الرفض-أو-المعالجة المقصود لذلك التصحيح.

الحالات

الحالةالنتيجةما تُظهره
f11كتابة ASan على الكومة في RLECodec::DecodeFragment
f1-exploit1كتابة فوق كائن مجاور مُجهّزة وتحكّم فرع غير مباشر (Linux x86-64)
f22كتابة ASan على الكومة في opj_write_from_memory عبر gdcmconv --j2k
f2-lib2الكتابة نفسها عبر ImageChangeTransferSyntax::Change
f33قراءة ASan على الكومة في توسيع لوحة الألوان المُجزّأة
f3-propagation3بايتات خارج الحدود تصل إلى البكسلات المفكوكة، وتُبلَّغ كعدد
f3-sentinel3كلمة حرس معروفة محدودة تعبر حدّ LUT المنطقي
f44كتابة ASan على الكومة في فك ترميز منطقة JPEG2000
f55استنفاد مكدّس ASan على عناصر تسلسل متداخلة
f66قسمة على صفر UBSan في فك ترميز RLE؛ SIGFPE على x86

هناك حاضنتان إضافيتان تُعدّان بحثًا في قابلية الاستغلال بدلًا من حالات إعادة إنتاج، وتبنيان فقط في الملف التعريفي غير المُعالَج بـ sanitizer على Linux x86-64:

الحاضنةالنتيجةما تُثبته
finding01_groom1التجاور المُختبر في glibc، ملاحظًا عبر خطافات تسجيل التخصيص
finding03_leak3قراءة زائدة بمقدار 131070 بايت يمكن أن تكشف مؤشّر مكتبة خاص بالبناء

الأدلة المحتفظ بها

يسجّل evidence/v3.2.6-macos-arm64-debug.md مصفوفة debug المكتملة لـ v3.2.6، بما في ذلك كل ضابط وفحصَي انتشار النتيجة 3 المحدودين.

يسجّل evidence/v3.2.6-linux-x86_64-finding01-groom.md و evidence/v3.2.6-linux-x86_64-finding03-leak.md نتيجتَي قابلية الاستغلال أدناه. لا يُدّعى الحصول على نتائج master الحالي، ولا مصفوفة الملف التعريفي الكامل للإصدار، ولا نتائج f1-exploit حتى يُحتفظ بنصوصها.

التنظيف

root@kitploit:~
./scripts/clean.sh

يرفض التنظيف العمل دون علامة الحزمة ويزيل فقط _work و_build و_generated و_runs وذاكرات bytecode الخاصة بـ Python تحت هذا المستودع. لا تُزال الأدلة المحتفظ بها تحت evidence/.

العنصر الأولي للاستغلال (النتيجة 1)

f1-exploit خاص بـ Linux-x86_64 فقط ويُشغَّل يدويًا؛ ويحمل manifest/expectations.json تسلسل الأوامر الدقيق. تحت تخطيط التخصيص الحتمي للحاضنة، يختبر ثلاث حقائق منفصلة، لكلٍّ منها حالة سلبية مقابلة:

  • الفيض يصل إلى ذاكرة منحها المخصّص بعد المخزن الهدف؛
  • البايتات التي تحلّ هناك هي بالضبط البايتات التي طلبها ملف DICOM المُصمَّم. زرع قيمة مختلفة، أو استخدام fixture f1 العادي، يُبلّغ عن تلف لكن صراحةً ليس تحكّمًا في المحتوى، لذا يكون الفحص قابلًا للتكذيب؛
  • مؤشّر دالة الضحية الاصطناعية ينتهي به الأمر حاملًا عنوانًا يوفّره الملف، واستدعاؤه ينقل التحكّم إلى دالة داخل الحاضنة.

حوالي نصف نوافذ الـ 8 بايت ضمن الفيض البالغ 12288 بايت تقبل قيمة عشوائية. الباقي مقترن، لأن DoYBRFull422 يكرّر بايت مصدر واحد في موضعَي إخراج؛ والإزاحة 6144 هي إحدى النوافذ الحرّة. فك ترميز الإطار 1 يجري أخيرًا، لذا فإن محتوى الإطار 1 هو الذي يستمر بعد التخصيص.

تسجّل الحاضنة ما إذا كان ImageReader::Read() يُعيد true بينما الكائن المجاور مُعدَّل. يجب الاحتفاظ بنص Linux x86-64 ناجح قبل وصف تلك النتيجة كدليل ملاحَظ.

ما يحدث دون التجهيز

يوفّر f1-exploit تخطيط ضحيته الخاص، لذا لا يمكنه الإجابة عمّا إذا كانت عملية غير معدّلة تمتلك ذلك التخطيط. يستخدم finding01_groom glibc القياسي، وPIE الافتراضي، وASLR، مع خطافات تخصيص عامة تسجّل التخصيصات لكن لا تنقلها. في الاختبارات المحتفظ بها:

  • كان التخصيص التالي للمخزن البالغ 24576 بايت قطعة GDCM مؤقتة محرّرة بحجم 2049 بايت في جميع التجارب العشرين المسجّلة. لم يُلاحَظ أي كائن حيّ أو vtable؛
  • إتلاف بيانات القائمة الحرّة لتلك القطعة يُفعّل فحص الاتساق الخاص بـ glibc، الذي يُجهض. تموت حاضنة finding01 العادية بالطريقة نفسها دون أي تجهيز على الإطلاق.

على بناء glibc المُختبر، تسبّبت النتيجة 1 بشكل موثوق في حجب الخدمة؛ ولم يُعثر على مسار لتنفيذ الكود. كانت الهندسة المُختبرة ثابتة، وقد تُخطّط مخصّصات أو منصّات أخرى الكومة بشكل مختلف.

finding03_leak هي النتيجة الأقوى. في البناء المُختبر، تصل القراءة خارج الحدود إلى 131070 بايت، ويدخل مؤشّر vtable من gdcm::ByteValue إلى البكسلات المفكوكة، وتستنتج الحاضنة قاعدة تحميل المكتبة باستخدام إزاحة vtable المعروفة لذلك البناء. هذه نتيجة كشف على مستوى API محلي: تتطلّب تطبيق LUT والوصول إلى مخزن البكسلات المفكوك. ولا تُظهر أن خدمة شبكية تُعيد تلك البكسلات.

لا يمكن ربط الاثنتين لتنفيذ كود هنا، وليس فقط لعدم العثور على ضحية: فهما يحتاجان قيمتَي PhotometricInterpretation مختلفتين، لذا يحتاجان ملفّين، والقاعدة المُسرَّبة مفيدة فقط ما دامت العملية المُسرِّبة حيّة.

حدود الأدلة

يُثبت تقرير sanitizer حدث أمان الذاكرة أو السلوك غير المعرّف المذكور في العملية والمراجعة المُختبرتين. يختبر f1-exploit التحكّم في البايتات وكتابة فوق مؤشّر دالة مجاور تحت مخصّص مُجهّز يوفّر التخطيط الهدف عمدًا. ولا يُثبت ذلك التخطيط في مستهلك غير معدّل. لم تلاحظ تجارب finding01_groom المحتفظ بها ذلك التخطيط للهندسة وبناء glibc المُختبرين.

لا شيء من هذا يُثبت قابلية الوصول عن بُعد في أي منتج بعينه، أو الاستمرارية، أو القابلية للتطبيق في المصبّ. حجّة قابلية الوصول لنشر معيّن ادّعاء منفصل، يُقدَّم في نصّ الإفصاح وليس بواسطة هذه الحزمة.

تنزيل الأداة