补录自身安全邮箱拦截与多分组降级实机验收
Some checks are pending
Security Checks / security (push) Waiting to run

This commit is contained in:
smail 2026-09-26 01:42:04 +08:00
parent 22e30fa771
commit fa71231eff

View File

@ -479,3 +479,55 @@ smail/
- [ ] 使用图形客户端验证 SMTP TLS 登录、实际投递、重置及关闭后旧凭据拒绝、通知地址拒收,以及 IMAP/POP3 隔离。
- [ ] 网页登录负向场景的明确失败反馈仍需补证,不能用停留登录页替代完整结论。
- [ ] 安全码、外部邮箱及报告前述其他剩余门槛继续保留;全项目验收尚未完成。
## 2026-09-26 自身安全邮箱拦截与多分组降级专项复验
### 范围与现场
- 前序安全码与自身邮箱漏洞复现发生于 01:10 至 01:24;本次接续复验为 01:27 至 01:40,均为服务器本地时间(UTC+8)。前序操作按同一线程交接记录补录,本次没有把所有前序步骤重新执行一遍。
- 云端继续运行修复提交 `9762300` 对应的 `review-9762300` 版本。业务操作仅使用助手隔离页面的浏览器点击、键盘及表单输入,没有调用业务 API、执行浏览器脚本、协议脚本或数据库查询。
- 本次保留连续专项现场,未清库、未重新初始化、未重新部署,不能替代用户要求的清库后全量生产流程验收。未刷新、关闭或编辑用户手动页面。
### 前序安全码操作补录
| 状态 | 场景 | 实际结果及边界 |
| --- | --- | --- |
| [✓] | 取消生成 | reviewb 初始未配置安全码;生成确认时取消,重新进入后仍未配置。 |
| [✓] | 生成与明文生命周期 | 确认生成后显示恢复码及已配置状态;同一设置窗口内切换子项后明文仍在,关闭整个设置窗口再重新打开后不再显示明文。未在报告保留恢复码。 |
| [✓] | 撤销确认与取消 | 取消撤销后仍为已配置;再次确认撤销后提示已撤销并回到未配置。本次管理员成员列表再次显示 reviewb 安全码未开启。 |
| [ ] | 实际密码恢复 | 未使用生成或撤销的恢复码执行密码恢复,不能据此判定恢复链路或撤销码使用拒绝通过;前序处于近期认证窗口,不能据此判定二次身份确认已验收。 |
### 自身邮箱漏洞修复与复验
前序旧版本允许 reviewb 将 `reviewb@solit.cn` 提交为外部安全邮箱,并进入验证码步骤;自身收件箱收到验证码邮件。操作已取消,没有输入验证码或确认绑定。这与外部邮箱不能为当前用户 Smail 主邮箱的既有需求不符。
根因是原归属判断只检查独立主邮箱绑定记录,遗漏按账号名与本地邮件域名直接收信的地址。提交 `9762300` 保留原检查,补充账号、本地主域名及接收域名的归属判断,并在三个验证码确认入口重新检查,防止仅在申请阶段校验。
| 状态 | 本次浏览器场景 | 实际结果 |
| --- | --- | --- |
| [✓] | 自助绑定自身地址 | reviewb 输入 `reviewb@solit.cn` 并点击发送验证码,明确显示不能将当前邮箱绑定为外部安全邮箱,仍停留地址输入步骤。 |
| [✓] | 大小写变体 | 改为 `REVIEWB@SOLIT.CN` 后再次提交,得到相同拒绝提示,没有进入验证码步骤。 |
| [✓] | 管理员替成员设置 | reviewadmin 从乙组成员 reviewb 的编辑窗口进入外部邮箱管理,先出现当前密码确认;完成确认后自动进入目标邮箱窗口。输入目标自身地址后明确提示不能将该用户自己的邮箱绑定为外部安全邮箱。随后取消,未确认任何绑定。 |
| [✓] | 关联状态 | reviewb 自助页面显示暂无外部安全邮箱,管理员页面显示未绑定、安全码未开启;本人通知服务显示未开启。 |
| [ ] | 未覆盖路径 | 旧挑战确认阶段拒绝、其他接收域名、已有主邮箱绑定记录、真正外部邮箱的正向绑定及最终入箱尚未在本轮复验。列表未显示绑定不代表已检查数据库中的待验证挑战。 |
### 多分组管理员降级与恢复
初始从超级管理员页面确认 reviewadmin 为管理员,属于验收甲组、验收乙组,安全码已开启。此次未生成、替换或撤销该管理员原有安全码。
| 状态 | 场景 | 实际结果 |
| --- | --- | --- |
| [✓] | 多分组直接降级拦截 | 将角色改为普通用户但保留甲乙两组,点击确认,明确提示普通用户只能属于一个分组,请在分组管理中选择一个分组;窗口未关闭。 |
| [✓] | 明确选择保留分组 | 打开分组管理后为单选,未擅自选定原来的某一组;手动选择乙组,应用到编辑,再确认保存,出现用户信息已保存。 |
| [✓] | 保存后可见归属 | 乙组中 reviewadmin 显示普通用户;展开甲组显示本组暂无成员。之后重新以超级管理员登录并打开编辑窗口,仍为普通用户且只有乙组。 |
| [✓] | 降级后登录权限 | reviewadmin 使用原普通登录密码成功登录,角色为普通用户;设置中没有用户管理和配置管理入口,系统通知页只显示本人只读状态,没有授权管理按钮。此项仅证明新登录界面的权限表现。 |
| [✓] | 恢复原测试角色及分组 | 超级管理员将 reviewadmin 改回管理员,在同一次编辑中选择甲、乙两组并保存;重新打开编辑窗口确认管理员及两个分组。再登录 reviewadmin,显示管理员,用户管理仅列出甲、乙组,不显示默认分组;乙组可编辑 reviewb。 |
| [ ] | 未覆盖边界 | 未保留目标账号旧会话来验证实时踢出,未通过绕过页面或故障注入检验后端拒绝及事务回滚,也未执行选择默认分组的降级保存。源码检查不能替代这些实测。 |
### 部署核对与收尾
- 前序已完成 Linux Go 三程序编译和现有打包流程;没有重建前端。发布包 SHA-256 为 `2a88d3bb451334e321153fc9c9bf57cef9088fa8221ed07eaec058afb6e4e098`,主程序 SHA-256 为 `b3b00f76f26fff27946154c82853f30dfadbc7b18fdd7f04414b8bf09e826f7e`。前序记录本地和云端摘要一致;本轮 01:27 通过已有交互式 SSH 会话再次核对云端主程序摘要一致。
- 前序部署仅替换 `/opt/smail` 内三个程序,未替换数据库、证书和配置;清理的是 `/opt` 下 `smail-release-12cd774.tar.gz`、`smail-release-4d24bf2.tar.gz`、`smail-release-7bcbfe7.tar.gz`、`smail-release-85ccea8.tar.gz`、`smail-release-9a60bd7.tar.gz`、`smail-release-b7fd2cb.tar.gz`、`smail-release-c703b3d.tar.gz` 七个明确旧包,不能扩展为所有历史目录已清理。
- 本轮 01:27、01:32、01:37 检查 Smail 服务均为 active,8001、8002 监听正常;未停止服务或触碰同机其他项目。此项是运行状态检查,不是业务验收。
- 最后已取消所有编辑窗口并注销助手测试账号。reviewadmin 恢复管理员及甲乙两组;reviewb 未绑定外部邮箱、未开启安全码,通知授权仍关闭。旧版产生的测试验证码邮件仍保留在其收件箱,本次未删除邮件或项目文件。
- [!] SMTP 图形客户端真实 TLS 登录、投递及旧凭据撤销,外部邮箱正向完整验证,安全码完整恢复链路,清库生产流程回归及本报告其他未闭环门槛继续保留;全项目验收仍未完成。