Кратко

  • В зафиксированном публичном коммите 3c2068477eb38ebbbe70039ee6e1b7b004fc69cd новая избирательная процедура получает режим восстановления ALL независимо от типа; оператор по-прежнему может явно выбрать ONLY_BR или NONE.
  • Нормализованный адрес отдельно ищется среди избирателей, контактных лиц организаций-членов и контактов поддержки номинаций. Для каждого класса в очередь может попасть до десяти токенизированных ссылок.
  • Единый ответ и ограничения по классам — полезные меры. Их должен дополнить закрытый реестр восстановления полномочий, связывающий правило выборов, роль, происхождение настройки, срок токена, доставку, использование и аннулирование.

Почтовый ящик не наделяет человека правом голоса. Он не даёт организации права выдвигать кандидата и не создаёт поддержку номинации. Ящик лишь получает сообщение. Если это сообщение содержит ссылку, открывающую действие, повторная доставка становится частью управления полномочиями.

Публичный репозиторий LACNIC elections-open-source позволяет проследить эту границу. Оба конструктора Election создают новый объект типа BOARD, а затем вызывают ElectionLinkRecoveryMode.defaultForElectionType. Метод принимает тип выборов, но возвращает ALL для любого значения. Поведенческий тест ожидает именно ALL. Руководство поясняет: в этой публичной сборке новые выборы начинаются с ALL вне зависимости от типа, хотя доступны ONLY_BR и NONE.

Это не доказывает уязвимость. Более того, источники не доказывают, что конкретные действующие выборы LACNIC используют этот коммит и эту настройку. Исследование не отправляло запросов на восстановление, не видело адресов участников и не проверяло реальные токены. Наблюдение относится к закреплённой публичной версии.

Восстановление само по себе защищает участие. Первое письмо может попасть в спам, остаться на старом устройстве или исчезнуть при смене сотрудника. Участник не должен терять возможность действовать из-за сбоя канала. Широкий механизм уменьшает ручную поддержку и может сделать доступ равнее.

Но возвращаемая ссылка — не просто справка. Это предъявительская способность. Она не создаёт первоначального права, а снова делает его осуществимым. Поэтому доказательство должно идти назад к источнику полномочия и вперёд до его завершения.

Три реестра за одним полем

Панель обрезает пробелы в адресе и переводит его в нижний регистр. Затем выполняет три поиска в пределах одной процедуры: UserVoter.mail, Organization.membershipContactEmail и SupportNomination.supportingContactEmail.

Это разные институциональные роли. Избиратель получает возможность из списка избирателей. Организация действует в процедуре выдвижения через зарегистрированное контактное лицо. Контакт поддержки связан с конкретной номинацией. Один и тот же адрес может законно присутствовать во всех трёх наборах, но строковое совпадение не объединяет основания полномочий.

Код сохраняет различие типов. Для избирателя используется VOTER_VOTE_LINK; для организации — NOMINATION_LINK, если токен выдвижения не пуст; для поддерживающего контакта — SUPPORT_LINK. Ссылки не показываются заявителю на экране. Они ставятся в очередь на адрес из соответствующей записи.

Каждый запрос ограничен десятью совпадениями. Это не общий предел в десять: три класса имеют собственные лимиты. В режиме ALL страна не фильтруется. В ONLY_BR проверяется поле страны, соответствующее записи: страна избирателя, организации либо организации, сделавшей номинацию.

Лимит защищает обработку от неограниченного веера, если один адрес многократно переиспользован. Он не подтверждает право. Число не говорит, актуальна ли запись, остаётся ли адрес назначенным контактом и открыто ли соответствующее действие.

Одинаковый экран и разная власть

Интерфейс намеренно не сообщает о совпадении. Пока нет операционного сбоя, он показывает одну и ту же фразу принятия и при найденных записях, и при отсутствии результатов. Это мешает посетителю использовать форму как каталог избирателей и контактов.

Такой контроль заслуживает признания. Он отделяет публичный ответ от внутренних данных. Однако сокрытие результата поиска и правильная передача полномочия — не одно и то же. Запросивший ничего не узнает на экране, но владелец зарегистрированного ящика может получить несколько классов ссылок.

Первая мера препятствует перечислению. Вторая должна гарантировать, что текущий получатель всё ещё соответствует роли. Единый ответ не может заменить это доказательство.

Панель считает совпадения и успешно поставленные письма. Если класс дал записи, но не дал ни одного письма в очереди, результат отмечается как операционный сбой. Это полезное разделение между «ничего не найдено» и «найдено, но отправка не началась».

Очередь всё же не является доставкой. Корпоративный шлюз может отвергнуть письмо, фильтр — изолировать, задержка — пересечь дедлайн. Общим ящиком могут управлять несколько людей. Верно и обратное: уполномоченный участник может не получить письмо по технической причине. Очередь, доставка, открытие, действие и отзыв — разные события.

Значение по умолчанию не является решением органа

Значение по умолчанию сокращает настройку. Оно не записывает, почему диапазон подходит конкретной процедуре. Выборы Совета директоров, Fiscal Commission, Electoral Commission, модератора PDP, ASO AC и IANA Review Committee могут иметь различные электораты, правила, сроки и органы контроля.

Единый способ восстановления может быть правильным для всех. Но равенство должно быть результатом документированного анализа, а не побочным эффектом функции, которая не различает входные типы.

Увидев позднее ALL, аудитор не знает, что произошло. Настройку могли явно одобрить после оценки риска. Она могла остаться унаследованной. Или её могли сохранить временно из-за отсутствия другого канала. Итоговое поле не содержит происхождения решения.

Срок восстановления тоже заимствован. Панель работает только пока выборы не закрыты и режим не NONE. Публичная страница должна быть включена и достичь этапа N_1. Руководство прямо говорит, что отдельного календаря у восстановления нет.

У самих ссылок есть последующие ограничения. Голосование зависит от своего периода и статуса голоса. Выдвижение и поддержка следуют иным окнам. Пришедшая ссылка может быть уже бесполезна или ещё давать возможность действовать. Поэтому запись восстановления должна быть состыкована с итоговым шлюзом, а не заканчиваться на почтовой очереди.

CAPTCHA — условие конфигурации

Панель проверяет reCAPTCHA, только если восстановление разрешено, глобальная настройка включает CAPTCHA и присутствует ключ сайта. При отсутствии любого условия эта ветка не выполняется. Публичный исходник не показывает фактическую конфигурацию действующих выборов.

Нельзя утверждать ни что LACNIC не использует CAPTCHA, ни что защита присутствует всегда. Установлено лишь, что она условна и не включается автоматически значением ALL. В версионном документе следует фиксировать её реальное состояние.

Внешние руководства дают полезную архитектурную аналогию, но не устанавливают правила LACNIC. OWASP для восстановления пароля рекомендует одинаковые ответы, сопоставимое время, ограничение запросов на учётную запись или CAPTCHA, случайные одноразовые URL-токены с разумным сроком. NIST SP 800-63B в области цифровой идентичности требует обосновывать альтернативные методы восстановления документированным анализом риска и связывает восстановление с уведомлениями.

Ссылка для голосования не является сбросом пароля. Эти документы не регулируют выборы LACNIC. Общий принцип уже: восстановление — самостоятельное событие передачи способности, и ему нужна собственная доказательная цепочка.

Зафиксированный код содержит несколько таких мер: единый ответ, ограничение по классу, область одной процедуры, условную CAPTCHA и передачу клиентского IP операции отправки. Но проверенные материалы не устанавливают энтропию, срок действия, ротацию после восстановления, инвалидирование после использования, подтверждение доставки или текущий контроль ящика. Всё это может находиться в других модулях или операциях. Неопределённость не является доказанной дырой.

Открытый код не равен работающему экземпляру

LACNIC описывает дистанционную систему выборов как открытую и доступную для аудита и проверки. Репозиторий действительно делает механизм читаемым: документация называет три поиска и три ссылки, реализация показывает последовательность, тест фиксирует ALL.

Коммит совместимости 11 сентября 2026 года обновил серверные и Maven-библиотеки и сохранил проверку значения. Следующий головной коммит добавил тестирование чтения Excel- и PDF-файлов, сохранённых на диске. Хеши и даты точно ограничивают исследованный объект.

Они не доказывают идентичность развёртывания. Публичный репозиторий не раскрывает сам по себе активный билд, параметры, почтовую инфраструктуру или связь с определёнными выборами. Статья остаётся внутри этой границы.

Она также не повторяет прежний материал о том, что email попадал в путь GET-запроса при аутентифицированном поиске отчёта. Там речь шла о распространении идентификатора по слоям URI. Здесь адрес запускает повторную доставку трёх классов полномочий.

Для публичной прозрачности достаточно краткой проекции по каждой процедуре: проверенная версия, фактический режим, доступные классы, окно, состояние автоматических защит и роль, утвердившая настройку. Имена, адреса, IP, токены и единичные события остаются закрытыми.

Минимальная квитанция восстановления полномочий

Закрытая квитанция начинается с идентификатора выборов, билда и поколения конфигурации. Она называет тип и правило, указывает ALL, ONLY_BR или NONE, а также отличает унаследованное значение от явного выбора. Нужны роль утверждающего и дата пересмотра.

Следующий раздел сохраняет класс полномочия. Слова «пользователь» недостаточно. Избиратель, номинирующая организация и контакт поддержки должны иметь отдельные защищённые ссылки на исходные записи. Квитанция фиксирует их актуальность и окно действия во время запроса.

Затем следует происхождение токена. Был повторно отправлен существующий секрет или создана замена? Каковы поколение и срок? Аннулирован ли предыдущий? Чем завершился новый: использованием, истечением, отзывом или заменой? Состояния очереди и доставки хранятся отдельно.

Наконец, доказывается закрытие. Конец голосования, выдвижения, поддержки и всей процедуры не обязан совпадать. Если URL остаётся доступным для истории, его режим чтения должен быть отделён от возможности принять решение.

Публичная версия квитанции может содержать только агрегаты: версию, режим, классы, даты, статус защит, числа с подавлением малых групп, политику инвалидирования и владельца проверки. Чувствительные связи остаются внутри.

Восстановление не нужно делать враждебным. Нужно лишь вернуть ему происхождение и конец. Email может восстановить потерянный путь; он не должен выглядеть органом, который даровал голос.

Источники