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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-38360 — アドバイザリ: dash-uploader (Python/PyPI) における CVE-2026-38360 パストラバーサル (CWE-22) | Kitploit
ツール/GitHubGitHub/a1ohadance/cve-2026-38360
脆弱性分析コード分析エクスプロイトウェブセキュリティペネトレーションテスト学習と教育
GitHuba1ohadance/cve-2026-38360

CVE-2026-38360

アドバイザリ: dash-uploader (Python/PyPI) における CVE-2026-38360 パストラバーサル (CWE-22)

リポジトリを見る
234ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-38360: dash-uploader におけるパストラバーサル

CVE NVD CWE Severity Patch Auth Version PyPI Downloads

Total Downloads
License

認証なしのパストラバーサルが fohrloop/dash-uploader(Python、PyPI)に存在し、任意のファイル書き込みが可能になります。これは、リモートコード実行(RCE)、アプリケーションのソースコード上書き、格納型XSS、永続的なバックドアのインストールなど(これらに限定されません)を引き起こします。

⚠️ パッチは提供されておらず、今後も提供される予定はありません

リポジトリは2025-07-19にアーカイブされ、アクティブなメンテナはいません。公開されている全バージョン(0.1.0 から 0.7.0a2)が影響を受け、今後も影響を受け続けます。このパッケージは現在も毎月約28,000ダウンロードされています。

本番環境で dash-uploader を稼働させている場合は、自ら緩和策を適用する必要があります。推奨される修正方法は、Plotly Dash に組み込まれている dcc.Upload コンポーネントへの移行です。すべての選択肢については緩和策を参照してください。

CVE IDCVE-2026-38360 (NVD)
脆弱性パストラバーサル (CWE-22)
CVSS 3.19.8 / 緊急 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
製品dash-uploader
影響を受けるバージョン0.1.0 から 0.7.0a2(全18リリース)
修正済みバージョンなし(プロジェクトは2025-07-19にアーカイブ)
攻撃ベクトルリモート、認証不要
発見者Muhammad Fitri Bin Mohd Sultan
割り当て元MITRE、2026-05-07
関連CVE-2026-38361(同一ライブラリのDoS)

説明

dash_uploader/httprequesthandler.py 内の request.form.get() から取得された3つのユーザー制御パラメータが、サニタイズや検証なしに os.path.join() と os.makedirs() に直接渡されます:

  1. upload_id(57行目 → 161行目、BaseHttpRequestHandler.get_temp_root):保存先ディレクトリを制御します。攻撃者は upload_id=../../../../usr/local/lib/python3.10/site-packages を送信でき、ファイルがPythonのパッケージディレクトリに書き込まれます。

  2. resumableFilename(51行目 → 108行目、BaseHttpRequestHandler._post):最終的なファイル名を制御します。攻撃者は正規の upload_id を使用した場合でも、ファイル名を通じてアップロードディレクトリの外へトラバーサルできます。

  3. resumableIdentifier(54行目 → 64行目、BaseHttpRequestHandler._post):os.makedirs() とともに一時ディレクトリの作成に使用されます。攻撃者はファイルシステム上の任意の場所に任意のディレクトリを作成できます。

アップロードエンドポイント(デフォルトでは /API/dash-uploader)は認証を必要としません。v0.5.0 で追加された http_request_handler フックは、post_before() によるリクエスト前チェックを可能にしますが、脆弱性のある _post() メソッドはフックの戻り後にすべてのパラメータを request.form から直接読み取ります。フックは、ライブラリがパラメータを処理する前にサニタイズすることはできません。フックを介して認証を追加した開発者であっても、認証済みユーザーによるパストラバーサルの影響を受けます。

脆弱なコード

root@kitploit:~
# dash_uploader/httprequesthandler.py
def _post(self):
    resumableFilename = request.form.get("resumableFilename", default="error", type=str)
    resumableIdentifier = request.form.get("resumableIdentifier", default="error", type=str)
    upload_id = request.form.get("upload_id", default="", type=str)
    ...
    temp_root = self.get_temp_root(upload_id)                          # upload_id flows in here
    temp_dir = os.path.join(temp_root, resumableIdentifier)            # raw user input -> os.path.join
    if not os.path.isdir(temp_dir):
        os.makedirs(temp_dir)                                          # raw user input -> os.makedirs

def get_temp_root(self, upload_id):
    return os.path.join(self.upload_folder, upload_id)                 # no sanitization: ../../ escapes upload_folder

3つの独立したトラバーサルシンクは同じ根本原因を共有しています:フォーム値が検証なしに os.path.join と os.makedirs に到達します。

攻撃ベクトル

認証されていないリモートの攻撃者は、HTTP POST multipart リクエストをアップロードエンドポイントに送信します。upload_id フォームパラメータにパストラバーサルシーケンス(../)を注入することで、攻撃者はアップロードされたファイルの保存先ディレクトリを制御できます。例えば、upload_id=../../../../usr/local/lib/python3.10/site-packages を送信すると、ファイルがPythonのパッケージディレクトリに書き込まれ、.pth の自動実行により次回のインタープリタ起動時にRCEが可能になります。

認証、セッショントークン、CSRFトークンは一切不要です。さらに2つのパラメータ(resumableFilename と resumableIdentifier)が、同じエンドポイントを通じて独立したトラバーサルベクトルを提供します。公式クイックスタートドキュメントに示されているデフォルトのライブラリ構成は、単一の curl コマンドで悪用可能です。

影響

サーバープロセスが書き込み可能な任意のディレクトリへの任意のファイル書き込みが可能です。これは、いくつかのよく知られたプリミティブを通じて**リモートコード実行(RCE)**につながります:

RCEプリミティブ

  • Pythonの .pth ファイルを site-packages に配置。次回のインタープリタ起動時に攻撃者指定のコードが実行されます。
  • sitecustomize.py または usercustomize.py の注入。Python起動のたびに実行されます。
  • アプリケーションのパッケージディレクトリ内のインポート可能なPythonモジュールを上書き。次回のインポート時またはワーカー再起動時に実行されます。
  • WSGI/ASGIエントリポイント(例:app.wsgi、wsgi.py)を上書き。次回のワーカーリロード時に実行されます。
  • プロセスが必要な権限を持つ場合のCronドロップイン(/etc/cron.d/、/etc/cron.hourly/、ユーザーcrontabスプール)。スケジュール実行されます。
  • systemdユニットまたはユーザーユニットのドロップイン(/etc/systemd/system/、~/.config/systemd/user/)。次回のサービス起動時または再起動時に実行されます。
  • プロセスがrootで実行されている場合の /etc/ld.so.preload 注入。以降のすべてのバイナリ実行に攻撃者コードをプリロードします。
  • シェル起動ファイルの上書き(~/.bashrc、~/.profile、~/.bash_profile)。アプリユーザーの次回の対話ログイン時に実行されます。
  • ~/.ssh/authorized_keys への追記。アプリユーザーとしてホストへの永続的なSSHアクセスを許可します。

Web層への影響

  • 配信されるJavaScript(例:site-packages 内のDashフレームワークJS)を上書きすることによる、ホストドメイン上の格納型クロスサイトスクリプティング。アプリケーションが再起動されるまで、すべてのページロードで全ユーザーに影響します
  • アプリケーションソースコードの上書き(デプロイ機構が影響を受けるパスを完全に上書きしない場合、通常のデプロイ後も残存する、静かで永続的なバックドア)

ファイルシステムへの影響

  • サニタイズされていない resumableIdentifier パラメータを使用した os.makedirs() による、プロセスが到達可能な任意の場所への任意のディレクトリ作成(inode枯渇攻撃や、存在しないディレクトリツリーへの書き込みのステージングに使用可能)
  • 共有アップロードディレクトリ内でのユーザー間ファイル置換。同じアプリケーションのテナント間でのデータポイズニングにつながります

影響を受けるコンポーネント

  • dash_uploader/httprequesthandler.py
  • BaseHttpRequestHandler.get_temp_root()
  • BaseHttpRequestHandler._post()

緩和策

⚠️ パッチは提供されておらず、プロジェクトはアーカイブされています

現在デプロイ中のユーザー向けの選択肢(推奨順):

  1. dcc.Upload への移行:Plotly Dash に同梱されている公式のアップロードコンポーネントです。ファイルはコールバックにbase64文字列として届きます。ファイルシステムへ書き込むハンドラは公開されておらず、クライアントが制御する保存先パスも存在しないため、ここで説明するバグのクラスは該当しません。小〜中サイズのファイルに最適です。非常に大きなアップロードについては項目2を参照してください。

  2. 小さなFlaskアップロードハンドラを自作する:werkzeug.utils.secure_filename() と、ハードコードされたサーバー側の保存先ディレクトリを使用します。クライアントが指定した upload_id、ファイル名、identifier の値をパスコンポーネントとして受け入れてはなりません。

  3. 引き続きdash-uploaderを使用する場合:アップロードエンドポイントを認証の背後に配置し、さらに、ライブラリのハンドラがリクエストを参照する前にリクエストを書き換えるか拒否する層で、upload_id、resumableFilename、resumableIdentifier を厳格な許可リスト(例:UUIDのみ)に対して検証してください。ライブラリの http_request_handler フックは、フックの戻り後にパラメータが request.form から読み取られるため、トラバーサルを防ぎません。サニタイズはライブラリより上位の層で行う必要があります。

  4. リバースプロキシまたはWAF層で、いずれかのフォームフィールドに ..、エンコードされた亜種(%2e%2e、..%2f、%2e%2e%2f)、または絶対パスを含むアップロードエンドポイントへのリクエストをすべて拒否します。

開示タイムライン

日付イベント
2026-03-17本番環境のデプロイに関するセキュリティ調査中に脆弱性を発見。
2026-03-19MITRE に CVE リクエストを提出。
2026-05-07MITRE により CVE-2026-38360 が割り当て。
2026-05-07公開アドバイザリを公開。
2026-05-09CVE レコードが MITRE CVE データベース と NVD に公開。

パッケージの状況

  • PyPIでの月間ダウンロード数は約28,000(2026-05-07以前の30日間で27,756。リポジトリのアーカイブ後も安定した日次ボリュームを維持)。出典:pypistats.org。
  • 最新の公開バージョン:0.6.1(安定版ライン)。プレリリースは 0.7.0a2 まで。
  • 必須依存:dash。オプション依存:pyyaml。ライセンス:MIT。
  • 依存パッケージ11件、依存リポジトリ6件。
  • GitHubスター153。
  • リポジトリは2025-07-19にアーカイブ(Issue #153)。
  • 過去のCVEなし(2026-03-19にNVD、GitHub Advisory Database、Snyk、OSVで確認済み)。

参考情報

  • https://www.cve.org/CVERecord?id=CVE-2026-38360
  • https://nvd.nist.gov/vuln/detail/CVE-2026-38360
  • https://github.com/fohrloop/dash-uploader
  • https://pypi.org/project/dash-uploader/
  • https://pypistats.org/packages/dash-uploader
  • https://github.com/fohrloop/dash-uploader/blob/stable/dash_uploader/httprequesthandler.py
  • https://github.com/fohrloop/dash-uploader/blob/dev/dash_uploader/httprequesthandler.py
  • https://github.com/fohrloop/dash-uploader/issues/153
  • https://cwe.mitre.org/data/definitions/22.html

発見者

Muhammad Fitri Bin Mohd Sultan

ツールをダウンロード