
Доказательство концепции для CVE-2026-25126, демонстрирующее манипуляцию подсчётом голосов в PolarLearn через некорректную проверку параметра направления голосования на этапе выполнения, с деталями исправления.
Исследование: Joshua van Rijswijk
PoC для CVE-2026-25126 — уязвимости бизнес-логики высокой степени серьёзности в API голосования форума PolarLearn.
Конечная точка POST /api/v1/forum/vote не обеспечивает строгую проверку поля direction во время выполнения.
Поскольку типы TypeScript не проверяются во время выполнения, злоумышленник может отправлять произвольные строки, которые некорректно обрабатываются в дальнейшем.
Это позволяет манипулировать подсчётом голосов путём создания так называемых призрачных голосов против.
API доверяет телу JSON без проверки:
const body: VoteRequestBody = await request.json()
const { postId, direction } = body
const result = await VoteServer(postId, direction)
Дальнейшая логика обрабатывает любое неожиданное ненулевое значение как голос против и сохраняет недопустимые значения.
Чередуя недопустимый голос со сбросом в , один пользователь может многократно уменьшать счётчик голосов.
nullfetch)git clone https://github.com/<your-username>/CVE-2026-25126-PoC.git
cd CVE-2026-25126-PoC
Откройте poc.js и замените:
POST_ID на ID целевого поста форумаCOOKIE на ваш файл cookie аутентифицированной сессииnode poc.js
После каждого цикла счётчик голосов должен некорректно уменьшаться. Обновите страницу форума, чтобы подтвердить изменённый результат.
Исправлено путём внедрения строгой проверки во время выполнения:
"up", "down" или null