Security Audit · 安全审计

Nexus 系统安全审计报告

nexus_system.zip 全量解压后逐文件审查。核心结论:提交物为一个近乎空白的 FastAPI 脚手架,而非可运行的管理系统;现有 46 行代码中仍存在 6 项应处理的问题。

FastAPI · SQLAlchemy(async) SQLite / aiosqlite 审计日期 2026-07-11 范围 全仓库

⚠️ 首要结论:包内没有"系统"

30MB 的压缩包里,真正的代码只有 3 个文件、共 46 行,其余 103MB 全是 venvapp/models/app/routes/app/services/ 三个目录全空,没有入口文件、路由、模型、认证、前端或数据库。所谓"漏洞审计"目前无对象可审——疑似打包时漏传了真正的代码。下方列出的是就现有骨架已能确认的问题。

46
有效代码行
2
高危
2
中危
2
优化项

问题清单

点击展开详情与修复建议 · 按严重程度排序
全部 6
高危 2
中危 2
优化 2
高危
硬编码弱密钥并随包分发
.env — SECRET_KEY=nexus-dev-secret-key-change-in-production
问题

签名密钥以明文写死在 .env,而 .env 直接被打进了 zip。任何拿到包的人都知道你的密钥。依赖里已装 python-jose,一旦上线做 JWT,攻击者可自行签发任意用户的合法 token——等于门锁配了把公开的钥匙。config.py 里还有一份默认弱密钥兜底,更易被忽略。

修复

密钥运行时从环境注入,绝不入库/入包;.env 加入 .gitignore 且不进制品;用 secrets.token_urlsafe(48) 生成高熵值;移除代码里的默认密钥,缺失时直接启动失败而非退回弱值。

# 生成
python -c "import secrets;print(secrets.token_urlsafe(48))"
# config.py — 无默认值,缺失即报错
SECRET_KEY: str  # 不给默认;Settings 缺失时抛错
高危
服务以 root 身份运行
config.py / .env — BASE_DIR、DATABASE_URL 均指向 /root/nexus_system
问题

配置、数据库(sqlite:////root/…)、上传目录全部落在 /root 下,表明服务以 root 运行。Web 进程一旦被攻破(尤其后续要加文件上传),攻击者直接拿到 root,危害从"应用沦陷"升级为"整机沦陷"。

修复

建专用低权用户(如 nexus),代码与数据迁到 /opt/nexus/srv/nexus;systemd 单元里设 User=nexusProtectSystem=strictNoNewPrivileges=true;上传目录挂 noexec

中危
DEBUG=True 生产开启
.env: DEBUG=True · config.py: DEBUG bool = True
问题

DEBUG 在 .envconfig.py 默认值双重开启。它会把 create_async_engine(echo=DEBUG) 打开——所有 SQL(含参数)全量写日志,并使框架吐出详细报错堆栈,泄露表结构、路径与内部实现,为进一步攻击提供地图。

修复

默认改为 DEBUG=False,仅本地开发显式开启;echo 与 DEBUG 解耦,生产恒关;错误响应统一走脱敏处理,不外泄堆栈。

中危
Settings 允许任意额外字段(extra=allow)
config.py — class Config: extra = "allow"
问题

extra = "allow" 让任何环境变量都能悄悄注入 Settings 对象。配置面失控:拼写错误不报错、非预期变量被静默吸收,也扩大了通过环境注入影响行为的面。

修复

改为 extra = "forbid",所有配置项显式声明并带类型;需要的字段一个个列出来,让未知项在启动时暴露。

优化
get_db 每请求隐式 commit
database.py — yield 后无条件 await session.commit()
问题

当前 get_db 在每次请求结束都 commit(),即使是只读请求也提交。接入写操作后,容易在未预期的位置产生隐式提交,难以精确控制事务边界。

修复

依赖只负责给 session 与回滚兜底,提交交给业务层显式 await db.commit();只读路径完全不提交。事务边界清晰、可控。

优化
认证 / 上传逻辑缺失(已装依赖但未实现)
requirements: passlib[bcrypt] · python-jose · python-multipart
问题

依赖清单显示计划做密码哈希 + JWT 认证 + 文件上传,但代码里一行都还没有。这三块恰是管理系统最易出安全事故的地方(弱哈希、token 校验绕过、上传越权/RCE)。现在无代码可审,属"待建的高风险区"。

修复

补齐真实代码后重点审:bcrypt work factor、JWT 过期/签名/算法固定(防 alg=none)、上传白名单+改名+落盘 noexec 目录、越权(IDOR)与 RBAC 权限校验。

下一步

1

先确认代码是否漏传

把完整项目重新打包,或告诉我真实代码在哪台机 / 哪个路径。当前包只有骨架,无法做接口级、SQL 级、权限级的真正审计。

2

立即可修的 4 项(H1/H2/M1/M2)

与业务代码无关,现在就能处理:换密钥并移出制品、服务降权、关 DEBUG、锁死 extra。

3

代码补齐后做全面审计

重点覆盖认证、权限(IDOR/RBAC)、SQL 注入、文件上传、CORS、限流、日志脱敏。