跳到主要内容

nofx 上游对照首查

本文是 AI Trading Matrix 第三方参考深研线对 nofx 的首查报告。nofx 是 Trading Matrix 工程仓的参考实现之一。本次只克隆读公开上游仓,不碰 Trading Matrix 工程仓——借用范围的逐行比对由落地审计线(编号 #3)承接。证据分「已确认事实 / 相关方声称 / 本首查独立核验」三类标注;代码位置用仓内相对模块路径,外部事实附来源链接。

首查回答任务书三个必答问题:SlowMist 披露的漏洞落在哪些模块、股权纠纷后两仓的正统性、赛马机制与本项目赛马看板的差异。

摘要

  • 漏洞面(问题一):SlowMist 2025-11-17 披露的核心是认证绕过 + 凭证明文暴露,不是单纯的加密缺失。2025-10-31 引入的「默认管理员模式」中间件放行全部请求,任何人访问公开端点 /api/exchanges 即取回交易所 API key、secret 与钱包私钥;全网千余个公开部署、已发生真实盗币。本首查独立核验:当前活跃仓 dev 分支 HEAD(2026-07-06)已系统性修复——两波整改到位,凭证改为「只报有无、不返回值」,鉴权分层,解密预言机下线。漏洞模块清单见第一节,显式供 #3 审计承接。
  • 正统性(问题二)· 关键纠偏:业界流传「SkywalkerJi 是原始仓、NoFxAiOS 是其 fork」的说法与 GitHub 元数据相反NoFxAiOS/nofx 才是原始仓(由原组织名 tinkle-community 改名而来、同一 repo ID、约 1.25 万星、今日仍活跃、安全修复全部落此仓);SkywalkerJi/nofx 是 2026-01-13 才从它 fork 出的下游、0 星、停更半年、未回流第二波安全修复。Trading Matrix 应跟 NoFxAiOS/nofx 主线。
  • 赛马差异(问题三):nofx 的 "Model competition" 是实盘账户实时盈亏排行榜(多个 AI 模型驱动的自动交易账户比拼 live equity/PnL),属 Alpha Arena 式的开源自建版;与本项目「回测→模拟→实盘→归因四级验证漏斗」的赛马看板形似神不同。nofx 没有前视偏差防护、没有反操纵成交核验,其对外榜单恰是业界点名的「verified PnL 榜被刷量污染」潜在活标本——这一层本项目不能借(反面教材);但其可见性 opt-in、净值时序存储、公开/私有端点分离等工程脚手架可以 ADAPT。

一、SlowMist 漏洞模块清单(供 #3 落地审计承接)

1.1 漏洞面与落点

SlowMist 官方披露(Threat Intelligence: Analysis of the NOFX AI Automated Trading Vulnerability,2025-11-17)+ 本地代码/commit 史交叉核验,凭证暴露不是单点而是一组,重灾区是 api/

漏洞落点模块/文件证据来源
认证绕过:默认管理员模式中间件放行全部请求api/server.go 认证中间件、admin 模式逻辑SlowMist 披露;引入于 commit 517d0caf(2025-10-31,相关方声称)
凭证明文经公开端点直吐(API key/secret/钱包私钥)暴露端点 /api/exchangesapi/handler_exchange.gostore/exchange.goSlowMist 披露:Binance/Hyperliquid/Aster 凭证、Hyperliquid 钱包地址、Aster 私钥
凭证明文存储(数据库)crypto/crypto.go(后补 EncryptedString)、store/exchange.gostore/user.go项目自承 ENCRYPTION_README「Before: Plaintext in DB」;代码注释「never silently persist a plaintext secret」
解密预言机(任意密文可被解回明文)api/crypto_handler.gocommit 1aea7abc「remove decrypt oracle」
密钥明文进日志api/utils.goapi/handler_*.go、logger 层commit 1aea7abc「redact secret logs」;a555cbe4 删 maskSecret
未认证重置/账户恢复端点(远程认证绕过)api/handler_user.go → 迁至 cli.gocommit 577a0918「remove unauthenticated reset endpoints」;api/handler_user.go 注释「exploitable auth-bypass」
SSRF(自定义 AI 模型 URL)api/server.gomcp/config.gomcp/options.gosecurity/url_validator.gocommit 7b9a0740「block SSRF via custom AI model URL」
Telegram bot 工具越权telegram/agent/apicall.gocommit 99361cb0「lock down telegram bot tool」
缺限流 + 20 个 Go 依赖漏洞api/ratelimit.go(新增)、go.mod/go.sumcommit 1aea7abcfcb73cc1(govulncheck 20→0)
传输层重放攻击(时间戳可绕过)crypto/crypto.go DecryptPayload代码注释「missing ts... replayed indefinitely」

1.2 当前修复状态(本首查独立核验)

SlowMist 披露时点(2025-11)称根因未彻底修复(其首轮补丁只把「零认证」换成硬编码默认 secret 的认证,仍可伪造固定 JWT)。但本次核验当前 dev 分支 HEAD(2026-07-06)已系统性修复,分两波:

  • 首波(2025-11):commit 5fec0864「add auth guards to prevent unauthorized API calls」等,堵前端未授权调用;
  • 深波(2026-05-29 ~ 06-05):1aea7abc/577a0918/99361cb0/fcb73cc1 等,移除解密预言机、脱敏日志、下线未认证端点、堵 SSRF、加限流、清依赖漏洞。

当前代码的正确姿态可验证:api/handler_exchange.goSafeExchangeConfig 对外只返回 HasAPIKey/HasSecretKey/HasAsterPrivateKey 等布尔标志(不返回密钥值);api/server.go 把敏感端点收进 protected := api.Group("/", s.authMiddleware())、public 组仅剩只读;api/server.go 明确注释「A public POST /crypto/decrypt would be a decryption oracle... intentionally NOT exposed」。多处「防回归注释」显示团队已把这些当不变量守护。

1.3 给 #3 审计的移交要点

  1. 核查 Trading Matrix 工程仓是否借用了 nofx 的 api 层 handler 结构与凭证存储路径——若借的是修复前形态,即继承整套凭证暴露面;
  2. 确认工程仓当初参考的是 NoFxAiOS/nofx 还是 SkywalkerJi/nofx fork,对应到哪个 commit 时点——**是否早于第二波深度整改(2026-06)**决定它是否停在漏洞态;
  3. 按 1.1 清单逐项对照:认证中间件、/api/exchanges 端点、crypto_handler 解密端点、日志脱敏、recovery 端点、SSRF url 校验、telegram apicall、限流。

二、两仓正统性

2.1 GitHub 元数据(已确认事实,2026-07-06 直查)

事实NoFxAiOS/nofx(原始 + 当前活跃)SkywalkerJi/nofx(下游 fork)
star约 12,5110
最后提交2026-07-06(活跃)2026-01-13(停更约半年)
创建时间2025-10-282026-01-13
fork 关系否(原始仓)是,parent 指向 NoFxAiOS/nofx
安全修复落点两波修复全在此仓未见回流

关键纠偏:tinkle-community/nofxNoFxAiOS/nofx同一个仓(created_at/star/pushed_at 一致,前者 302 重定向到同一 repo ID 1084802670),即组织改名 tinkle-communityNoFxAiOS。所以当前约 1.25 万星的活跃仓就是创始人一方的原始仓延续;SkywalkerJi/nofx 是其下游 fork。业界「SkywalkerJi 原始、NoFxAiOS 是 fork」的说法与元数据相反。

2.2 股权纠纷(相关方声称 / 媒体报道)

创始人 Tinkle(主开发,对应原组织名 tinkle-community)与开源次日加入的 Zack 之争:Zack 参与约两周、代码贡献极少,以引入商业化为条件索要 50% 股权被拒后夺取项目 Twitter,并经香港律所发律师函索赔 50 万 USDT,出示新加坡公司注册文件称双方各 50% 股权;被指关联方 Amber.ac 声明与 nofx 无正式合作。报道未把 SkywalkerJi 列为纠纷当事方。来源:BlockBeats 开源之踵Web3Caff 漏洞守卫战

2.3 Trading Matrix 该跟哪条线

NoFxAiOS/nofx 主线。 它是原始仓、唯一活跃、安全修复所在、且展现出把安全当不变量守护的工程意识。SkywalkerJi/nofx fork 时点(2026-01-13)早于第二波深度整改(2026-06),且停更、0 星、未回流关键安全修复——任何停留在 SkywalkerJi fork 或修复前 NoFxAiOS 的借用都停在漏洞态(并入 #3 移交要点二)。注:两仓 README 对「谁是正统」的明文自我声明本次未逐字比对,但 fork parent + repo ID + star/活跃度元数据已足以定论。

三、赛马/竞技场机制差异

3.1 nofx 的机制

nofx "Model competition"(api/handler_competition.go + manager/trader_manager.go + trader/)是实盘账户实时盈亏排行榜:每个 trader 是「AI 模型 + 策略配置」在真实或模拟账户上运行的自动交易实例(trader/auto_trader*.go),GetCompetitionData()total_equity/total_pnl/total_pnl_pct 排名。对外有一组免鉴权公开端点(handlePublicCompetition/handleTopTraders/handleEquityHistoryBatch),且以 show_in_competition=true 的 opt-in 控制某 trader 是否公开净值曲线。本质是 Alpha Arena 式「谁账户赚得多」的实时竞技,开源自建版。

3.2 与 Trading Matrix 赛马看板的本质差异

维度nofxTrading Matrix
赛马标的AI trader 账户(模型 + 配置)策略/信源候选
评价实盘账户 live equity/PnL 排名回测→模拟→实盘→归因四级验证漏斗
前视偏差防护无(不做历史回测评分,直接上账户)承重设计
反操纵/公平成交无成交核验、无关联账户识别承重设计(真实成交核验、关联账户识别)
赛马定位运营态实时竞技 + 拉新钩子验证态证据漏斗 + 对外信任界面

结论:nofx 赛马是运营态实时 PnL 竞技,本项目赛马是验证态证据漏斗,性质不同。nofx 缺的前视偏差防护与反操纵成交核验,恰是本项目白皮书的承重设计——其对外榜单是「verified PnL 榜被刷量污染」的潜在活标本,本项目不能借(反面教材)

四、借鉴判定(LIFT / ADAPT / HAVE-EXTEND / 反面教材)

  • 反面教材(首要收获):认证绕过 + 凭证明文经公开端点直吐 + 解密预言机 + 未认证 recovery 端点。这组教训直接支撑本生态既有立场——交易工具准入的确认闸、密钥管理的「只报有无不返回值」、public/protected 端点强分层,都是防这类事故的不变量。nofx 无反操纵、无前视防护的 live PnL 榜同属反面。
  • ADAPT(改造后可用)
    1. 凭证脱敏 DTO 模式(SafeExchangeConfig 只报 HasAPIKey 布尔、不返回密钥值)——本项目多交易所隔离执行与密钥管理可移植这一对外投影姿势;
    2. 竞赛的 opt-in 可见性 + 净值快照时序存储(store/equity.go)+ 批量净值曲线端点 + 公开/私有端点分离——是「把榜单做成对外产品」的工程骨架,策略广场可借,但须在其上叠本项目独有的反操纵与前视防护层;
    3. GridTraderAdapter 用条件单模拟限价单以吸收交易所能力差异——与本生态「能力契约 + 优雅降级」的 provider/venue-agnostic 思路同构,多所适配可参考。
  • HAVE-EXTEND(我们已有更强,自扩展):验证引擎四级 + 前视偏差防护 + 反操纵成交核验,nofx 完全没有;本项目已有更强的战略设计,沿自身路线扩展即可,不必借 nofx 的运营态赛马。
  • LIFT(可直接抬入参考):一阶段加密标的的交易所接入面(nofx 覆盖 Binance/Bybit/OKX/Hyperliquid/Bitget/KuCoin/Gate/Aster/Lighter 九所),provider/trader/ 的交易所 client 接口抽象可作接入参考实现——但任何抬入须先过 #3 安全审计,确认取的是修复后形态。

五、来源