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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-67185-Unauthenticated-Path-Traversal-Allows-Arbitrary-File-Read-TinyWeb- — セキュリティアドバイザリ: 未認証のパストラバーサルにより任意のファイル読み取りが可能 (TinyWeb) | Kitploit
ツール/GitHubGitHub/theopaid/cve-2026-67185-unauthenticated-path-traversal-allows-arbitrary-file-read-tinyweb-
脆弱性分析コード分析エクスプロイトウェブセキュリティ学習と教育
GitHubtheopaid/cve-2026-67185-unauthenticated-path-traversal-allows-arbitrary-file-read-tinyweb-

CVE-2026-67185-Unauthenticated-Path-Traversal-Allows-Arbitrary-File-Read-TinyWeb-

セキュリティアドバイザリ: 未認証のパストラバーサルにより任意のファイル読み取りが可能 (TinyWeb)

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
23日前未レビュー

セキュリティアドバイザリ: 認証不要のパストラバーサルにより任意のファイルが読み取り可能 (TinyWeb)

割り当てられたCVE ID: CVE-2026-67185

概要

TinyWebは、配信するファイルのパスを、WebルートとリクエストURLをそのまま結合して構築しており、正規化は行われません。認証を行っていないリモートクライアントは、リクエストラインに../シーケンスを挿入することで、サーバープロセスがオープンできる任意のファイル(Webルート外のファイルを含む)を読み取ることができます。

影響を受けるソフトウェア

  • プロジェクト: TinyWeb (https://github.com/GeneralSandman/TinyWeb)
  • ビルドによって報告されたバージョン: TnyWeb/0.0.8
  • 影響を受けるコミット: 0b3b5fd (2019-01-09、この方法でパスが最初に組み立てられたコミット) から a381da2 (2023-11-22、master上の最新) まで。
  • 修正済みバージョン: なし。このプロジェクトにはタグ付きリリースがありません。その範囲内の公開されたすべてのリビジョンが影響を受けます。

分類

  • CWE-22: 限定ディレクトリへのパス名の制限の不適切("パストラバーサル")
  • CVSS 4.0 基本値: 8.7(高)
  • ベクター: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

脅威モデル

認証されておらず、サーバーの待ち受けTCPポート(同梱設定では9090)に到達できるリモート攻撃者。認証情報、ユーザー操作、事前のアクセスは一切不要です。単一のリクエストで十分です。

技術詳細

HttpBuilder::buildResponse()は、設定されたWebルートから始まり、解析されたリクエストのURLパスフィールドをそのまま追加します:

root@kitploit:~
// src/tiny_http/http_responser.cc:80
sdsncat(&file_path, server.www.c_str(), server.www.size());

// src/tiny_http/http_responser.cc:83-87
if (url->field_set & (1 << HTTP_UF_PATH)) {
    unsigned int off = url->fields[HTTP_UF_PATH].offset;
    unsigned int len = url->fields[HTTP_UF_PATH].len;
    sdsncat(&file_path, url->data + off, len);
}

// src/tiny_http/http_responser.cc:90-94
std::string f(file_path.data, file_path.len);
file_type = isRegularFile(f);
if (0 == file_type) {
    return_val = file->setFile(f);   // stat() + open() on the joined path
}

86行目の結合から94行目のファイルシステム呼び出しまでの間に、ドットセグメントの除去(RFC 3986 セクション5.2.4)はなく、realpath()による正規化もなく、結果がserver.www内に留まるかどうかのチェックもありません。

URLパーサーも..をフィルタリングしません。HttpParser::parseUrlChar()では、パス状態はisUrlChar()を通過する任意の文字を受け入れ、.は有効なURL文字であるため、../は変更されずにbuildResponse()に到達します:

root@kitploit:~
// src/tiny_http/http_parser.cc:653-654
case s_requ_path: //finished
    if (isUrlChar(ch))
        return s_requ_path;

HttpFile::setFile()は、生成されたパスをサーバープロセスの権限でオープンし、配信します:

root@kitploit:~
// src/tiny_http/http_model_file.cc:43
return_val = open(name.c_str(), O_RDONLY);

注: TinyWebはURLパスをパーセントデコードしないため、%2e%2e%2fは機能しません。リテラルの../形式は機能します。

概念実証

  1. 同梱の設定でサーバーを起動します(ポート9090で待ち受け、設定されたWebルートから配信)。

  2. パスがWebルートの上に登るリクエストを送信します。--path-as-isフラグは、curlが../を送信前に折りたたむのを防ぎます:

root@kitploit:~
curl --path-as-is 'http://TARGET:9090/../../../../etc/passwd'
  1. サーバーは200 OKで/etc/passwdの内容を応答します:
root@kitploit:~
HTTP/1.1 200 OK
Server: TinyWeb/0.0.8
Transfer-Encoding: chunked

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...

必要な../セグメントの数は、Webルートがどの深さにあるかによって異なります。Webルートの深さ以上の数であれば機能します。カーネルはファイルシステムルートで..を無視するためです。

影響

任意のリモートクライアントは、サーバープロセスがオープンを許可されている任意のファイルを読み取ることができます。デフォルト設定ではワーカーはrootとして実行されるため、これには/etc/shadow、TLS秘密鍵、資格情報を含む設定ファイル、Webルート配下のアプリケーション自身のソースが含まれます。

修復策

realpath()で結合されたパスを正規化し、結果が設定されたWebルート内にない場合はリクエストを拒否します。多層防御として、RFC 3986 セクション5.2.4に従ってURL解析中にドットセグメントを除去し、その正規化の実行前にパスをパーセントデコードします。

ツールをダウンロード