Версии 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