摘要
- 在固定审阅的公开提交
3c2068477eb38ebbbe70039ee6e1b7b004fc69cd中,新建选举会调用同一个默认函数;无论传入何种选举类型,该函数都返回ALL。管理员仍可明确改成ONLY_BR或NONE。 - 找回表单把邮箱去除首尾空格并转为小写,然后分别检索选民、会员组织联系人和提名支持联系人,最多为每一类处理十个匹配并发送相应令牌链接。
- 统一受理提示和分类上限值得肯定。还需要一张受保护的“权限找回回执”,把选举规则、角色记录、配置来源、令牌周期、送达结果和最终作废连接起来。
如果一封邮件里只有会议日程,重发它属于客服。如果邮件里的长链接能够让收件人投票,重发就已经进入制度控制的范围。邮件没有创造选举权,却可能重新交付行使选举权所需的凭证。
LACNIC 的 elections-open-source 仓库把这条路径公开得相当具体。当前固定版本中,Election 的两个构造函数先把新选举类型设为 BOARD,再调用 ElectionLinkRecoveryMode.defaultForElectionType。这个函数接受选举类型参数,却始终返回 ALL。回归测试也明确要求新建的董事会选举取得 ALL。公开说明则写得更直白:这个公开发行版中的新选举不分类型,初始找回模式都是 ALL;ONLY_BR 和 NONE 仍可由管理员另行配置。
这不是安全事故的证据,也不是错误配置的证明。开放找回可以避免合资格参与者仅仅因为找不到旧邮件而丧失机会。远程选举尤其依赖邮件,垃圾邮件过滤、设备更换和人员交接都可能让最初的链接消失。可找回性本身是参与公平的一部分。
问题在于,方便恢复的并非一种普通“账户访问”,而是三种来源不同的能力。软件把它们分开存放,却用同一个入口重新交付。ALL 说明程序会搜索多广,不说明每种权力为什么应该在某次选举中被找回。
一个输入,三本权限账
表单先将输入邮箱标准化。随后,第一项查询在 UserVoter.mail 中寻找选民;第二项在 Organization.membershipContactEmail 中寻找会员组织联系人;第三项在 SupportNomination.supportingContactEmail 中寻找提名支持联系人。三项查询都限定在同一场选举中。
它们对应三种链接。选民记录可产生 VOTER_VOTE_LINK;组织记录在提名令牌非空时产生 NOMINATION_LINK;支持记录产生 SUPPORT_LINK。这说明代码没有把所有人压成一个用户对象。它保留了角色差异。
但邮箱字符串相同,仍可能让三种权力汇集到同一个收件箱。这样的汇集完全可能合法:同一位工作人员既是组织会员联系人,又代表组织参与投票,还对某项提名作出支持。也可能是共享行政邮箱。无论哪种情况,邮箱只证明消息要发往哪里,不能替代三条权限来源。
每类查询的上限是十个匹配。ALL 路径不设置国家过滤;ONLY_BR 则根据对象类型分别使用选民国家、组织国家,或提出提名的组织国家。上限能防止一个被广泛复用的地址引发无限处理,是可用性控制。它不是“总共十个”,因为三项查询各有自己的十个;它也不是授权上限,因为数量不能说明哪一条记录仍然有效。
系统不会在页面上列出匹配。只要没有操作性故障,无论找到记录还是完全没有匹配,访问者都会看到同样的受理消息。链接只排队发送到记录中保存的邮箱。这种不可区分响应能够降低枚举选民和联系人的风险,是设计中明确而重要的保护。
可是,“页面不泄露匹配”与“邮件正确交付权限”是两件事。前者面对外部查询者,后者面对邮箱当前控制者。统一提示做得再好,也无法单独证明收件人仍是选民代表、组织联系人或支持人。
默认值不能代替授权决定
软件默认值解决的是部署摩擦。创建选举时无需多问一步,功能就可以工作。制度决定则要回答:这场选举的哪些角色可以自助找回?为什么?谁批准?何时复核?
LACNIC 的董事会、财政委员会、选举委员会、PDP 主持人、ASO AC 和 IANA Review Committee 等程序并不必然拥有相同的选民范围与规则。相同的找回设计可能适用于所有类型,但这种适用性需要被记录,而不是从枚举函数的返回值反推。
若审计人员后来只看到 ALL,至少有三种解释。管理员审阅风险后主动选定了它;系统创建时继承它,之后无人再处理;或者它是在替代渠道失效期间临时保留。数据库里的一个值没有携带这段决策历史。
找回的时间边界也不是独立设置。代码只有在选举尚未关闭且模式不为 NONE 时启用面板;公开落地页还必须启用,并已到达 N_1 阶段。说明文档明确称找回没有额外日历。它借用整场选举和公开页面的生命周期。
而三种链接有各自的后续门槛。投票受投票期和是否已投票约束;提名、支持和候选人任务另有时间窗与状态。邮件成功排队不等于链接仍可行动。链接可能在送达前已经过期,也可能指向已经完成的动作。真正的审计链必须从重发继续走到下游门槛。
“已排队”不是“已送达”,更不是“已正确行权”
恢复面板统计匹配数与成功排队数。若某一类存在匹配,却一个邮件都没有成功排队,它会把结果标为操作性故障。这个设计能把“没有记录”与“有记录但发送失败”分开,具有实际价值。
它仍停留在邮件系统入口。企业网关可能退信或隔离邮件;队列可能延迟;组织可能已经更换联系人;一个角色邮箱可能由多人共同管理。反过来,完全合资格的人也可能因为邮件服务故障收不到链接。排队、送达、打开、使用、作废是五个不同事件。
外部指南可以帮助描述这类边界,但不能被冒充为 LACNIC 的规范。OWASP 针对忘记密码流程建议采用统一响应、相近处理时间、按账户限流或 CAPTCHA,并要求 URL 令牌随机、单次使用且适时过期。NIST SP 800-63B 在数字身份语境中要求替代找回方式建立在有记录的风险分析上,并规定账户找回事件应通知订户。投票链接不是密码重置链接,两份文件都不直接管辖 LACNIC 选举。它们的共同启示是:找回是一项独立的权限事件,需要自己的证据。
公开代码已有部分对应控制:统一提示、每类十个的处理上限、选举范围、可选 CAPTCHA,以及把客户端 IP 传给邮件发送操作。CAPTCHA 只有在找回开启、全局开关允许且存在站点密钥时才执行。固定材料无法说明任何真实选举是否启用它。
同样,现有材料没有证明令牌熵、过期、重发后的轮换、使用后的作废、邮件提供商送达或收件箱归属。这些控制可能存在于其他模块或运维系统中。缺少公开证据不能被写成“存在漏洞”。
公开代码让问题可见,却不能证明生产事实
LACNIC 的机构页面把这套远程选举系统描述为开源,允许有兴趣者审计和验证。仓库确实提供了难得的可审阅性:说明文档列出三类查询和链接,Java 路径展示处理顺序,测试固定默认行为。
2026 年 9 月 11 日的兼容性提交升级了多项服务器依赖,并保留新选举默认 ALL 的测试。稍后的当前头提交为磁盘存储的 Excel 与 PDF 上传增加测试。这些事实标明了所审版本,并不证明该版本已经运行在 LACNIC 的某场真实选举中。
这一边界必须写清。本文没有发送找回请求,没有观察真实邮件或令牌,也没有断言 CAPTCHA 的生产配置。它也不重复此前关于认证报告查询把邮箱置于 GET 请求路径的文章。那篇讨论标识符在 URI 层的传播;本文讨论的是一个邮箱如何触发三类权限凭证重新交付。
公开透明还差一个很小的桥:为每场选举公开版本和配置的汇总证明。它可以说明所用软件版本、实际找回模式、启用的链接类别、有效窗口、自动滥用控制,以及批准偏离默认值或接受默认值的角色。无需披露任何选民、邮箱、IP 或令牌。
一张最小的权限找回回执
私有回执首先记录选举标识、软件构建和配置代次。它列出选举类型与适用规则,说明 ALL、ONLY_BR 或 NONE 是继承而来,还是经过明确选择,并保存批准角色和复核日期。
第二部分保留权限类别。选民、组织提名者、提名支持人不能统一写成“用户”。可用受保护的行引用替代明文邮箱,同时记录请求发生时该行是否有效、对应动作处于哪个时间窗,以及哪个状态仍允许行权。
第三部分追踪令牌。系统重发的是已有链接还是生成了替代链接?令牌属于哪一代、何时过期?旧令牌是否同步失效?最终状态是使用、过期、撤销还是被新令牌取代?邮件排队与送达应各自占一栏。
第四部分证明关闭。投票截止、提名截止、支持完成和选举关闭不是天然同一个时间。如果链接在动作完成后仍可查看历史页面,应明确标记只读,而不能让“页面还能打开”看起来像“权限仍存在”。
公开投影只需给出版本、模式、类别、时间窗、控制状态、聚合请求与失败数、作废政策和审核责任人。小规模选民群体应进行抑制,避免统计反向暴露身份。详细事件保留在受保护记录中。
找回不应被取消。真正需要取消的是一种错误等式:收件箱控制者等于权限来源。邮件可以把遗失的链接送回来;只有一条完整的证据链,才能证明这项权力仍应交到这里。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
