Ad

CVE-2026-19349

CRITICAL CVSS 3.1: 9,8 EPSS 0.46%
Обновлено 26 августа 2026
LinkedIn
Параметр Значение
CVSS 9,8 (CRITICAL)
Уязвимые версии до 2.16.9
Тип уязвимости CWE-628, CWE-305
Поставщик LinkedIn
Публичный эксплойт Нет

Версии Lemonldap::NG::Portal с 2.0.0 до 2.16.9, с 2.17.0 до 2.21.5, с 2.22.0 до 2.23.3 для Perl позволяют обходить аутентификацию через параметр состояния OAuth2, хранящийся как сеанс SSO в серверных модулях GitHub и LinkedIn. Перед перенаправлением к поставщику удостоверений ExtractFormInfo() создает сеанс состояния с помощью позиционного вызова getApacheSession(undef, 1, 0, 'GitHubState')`. getApacheSession() принимает идентификатор сеанса, за которым следует хэш именованного аргумента, поэтому конечные аргументы становятся этим хешем, `kind` по умолчанию использует SSO, а состояние записывается в глобальное хранилище сеансов как обычный сеанс SSO. Его идентификатор передается неаутентифицированному посетителю как параметр состояния URL-адреса перенаправления.

Любой посетитель, достигший конечной точки GitHub или LinkedIn, может воспроизвести этот идентификатор в виде файла cookie сеанса и получить действительный сеанс единого входа без аутентификации. Сеанс не содержит ни _user, ни аутентификацииLevel, которые принимает поставляемая конфигурация начальной загрузки, поскольку она предоставляет виртуальным хостам правило доступа «по умолчанию => принять»; развертывания, правила которых проверяют пользователя или требуют уровня аутентификации, менее уязвимы. Это касается только конфигураций с включенным модулем аутентификации GitHub или LinkedIn.

Показать оригинальное описание (EN)

Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends. Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call `getApacheSession( undef, 1, 0, 'GitHubState' )`. getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, `kind` defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL. Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1

Тип уязвимости (CWE)