可核实的主张。
这不是一个“我们很安全”的营销页面,而是一组可核实的主张(SR-N),其中每一条你都可以在我们的漏洞悬赏计划中提出挑战以获得奖励。
对你服务器的访问
SR-1root 密码只使用一次,且不保存在我们这一侧。已核实+
该密码仅用于打开第一个 SSH 连接并安装一个服务用户。它作为我们连接的 SSH 认证凭据传递——而不是作为脚本参数或环境变量。我们的数据库中没有存放它的字段;它不会进入脚本运行环境,也不会写入日志(连接错误只包含地址和端口,绝不包含密码)。在内存中,它在使用后会被清除(尽力而为)——这是纵深防御,而非保证:Go 可能会在堆上保留该值的副本,直到垃圾回收为止。
坦诚的保留说明:它仍然是你服务器上的 root 密码。安装完成后,我们会禁用 SSH 的密码登录和 root 登录,但我们不会更改密码本身——如果你愿意,可以自行更改。“我们不存储它”是真的;“它不再是一个秘密”则不然。
SR-2安装后,密码登录和 root 的 SSH 登录都会被禁用。已核实+
PasswordAuthentication no、PermitRootLogin no,SSH 被移到非标准端口(默认 12011),启用 fail2ban(5 次失败后封禁一小时),仅允许密钥登录。公钥在使用前会被严格校验:包含换行符的(防止把额外的密钥塞进 authorized_keys)以及语法无效的密钥都会被拒绝。
防锁死机制:在内核(通过 ss)确认新的 SSH 端口确实处于监听状态之前,端口 22 不会被关闭;配置会用 sshd -t 检查,sudo 规则会用 visudo -cf 检查,两者出错时都会回滚。
SR-3管理密钥仅以加密形式存储。已核实+
面板使用的不是你的密码,而是它自己生成的一把独立密钥(ed25519)。私钥部分以 AES-256-GCM 加密后存放在数据库中。加密密钥(KEK)与数据库分开存储——存放在服务器环境变量中——并且在生产环境中是强制性的(不存在不安全的默认值:没有 KEK,加密子系统根本不会启动)。同一套加密还保护着数据库中的重要机密——Marzban 管理员密码/令牌/JWT、Reality 密钥、支付提供商密钥、代理凭据缓存、备份配置。
加密不仅隐藏数据,还对数据进行认证(GCM 认证标签):对加密字段的篡改会在解密时被检测到并拒绝。每个字段都用一个全新的随机 nonce 加密;KEK 的值从不进入日志——只有它的短 id。
关于能力令牌:/sub 订阅令牌是一个 bearer 密钥。为便于查找,我们只存储它的 SHA-256,而重新显示一个已签发链接所需的副本则以 AES-GCM 密文形式保存。较早的明文记录会在 HTTP 服务器启动之前,以 fail-closed 的方式迁移到新格式。支付 webhook 的 URL 标识符以明文存储,但它本身并不能对事件进行认证:真实性由一个单独的 HMAC 签名来验证。
合作伙伴 API 密钥的机密以不可逆的形式保存:完整密钥只在签发时显示一次,数据库中留下的是其机密部分的 SHA-256。已连接的 AI 的访问令牌和刷新令牌同样不以明文存储;连接受所选访问级别的限制,并可由账户所有者撤销。
SR-4私钥不会出现在普通响应中,只在明确导出时提供。已核实+
密钥只在服务器上、于内存中解密;普通 API 从不返回它。获取它的唯一途径是一个刻意设计的导出功能(“取走你的密钥”),并受登录加一次性邮箱验证码保护(验证码只以 HMAC 哈希形式存储,以恒定时间比较,TTL 为 10 分钟,5 次尝试机会)。所以密钥可以被有意取回,但不会通过普通请求“泄露”出去。
SR-5删除服务器时,密钥会同步从其记录中清除。已核实+
在服务器状态发生变化之前、以及在任何后台网络操作之前,存放管理密钥的字段会被同步清零。如果数据库没有确认清除,该操作会返回错误并可重试。删除仍然是“软删除”:数据行和非机密的服务数据会被保留。这并不意味着对已创建的备份进行物理擦除——它们的生命周期由备份保留策略管理。
SR-16经过审计的合作伙伴 API 会将访问范围限定在资源所有者。已核实+
在面板路由中,partner_id 由已签名的会话推导得出;在合作伙伴 API 中,则由经过验证的 API 密钥或 AI 的 OAuth 连接推导得出。所有者标识符不会取自路径、查询参数或请求体。API 密钥还额外受权限范围(scope)、有效期和套餐的限制;对于已连接的 AI,权限集合会在每次请求时根据所有者选择的级别计算。
在返回或更改任何内容之前,系统会重新检查服务器、集群、inbound、路由、VPN 用户或支付是否属于该账户。数据库查询按 partner_id 限定范围,而复合唯一键和复合外键会拒绝无效的跨合作伙伴关联。测试中的授权矩阵要求每个带有资源标识符的接口都具备明确的 IDOR 场景。
坦诚的保留说明:这是通过对请求路径的代码审计来验证的,而不是通过公开的渗透测试——所以 SR-16 和其余各条一样,都可以在漏洞悬赏中被反驳。
坦诚说说面板的访问权限——它是完整的管理员权限,而非“受限”权限。坦诚说明+
为了自动配置一切(安装 Xray+Reality、应用配置、读取指标),面板在服务器上拥有完整的管理权限(等同 root,通过一个具备免密码 sudo 的服务用户实现)。这对管理是必要的,我们绝不会把它称作“受限”。
有哪些因素降低了风险:机密只通过进程的 stdin 传给服务器(而不是作为命令参数——它们不会出现在进程列表中);在首次安装之后,每一次管理连接都会校验服务器已固定的主机密钥(host key)——“中途”替换服务器会被拒绝。你能掌控的:访问权建立在一把你随时可以吊销的密钥之上——通过删除服务器(密钥会被清零),或者干脆在你的主机商处删除该 VPS(那样一切都会消失)。
你的数据与隐私
SR-6VPN 用户存在于你的服务器上;我们只持有最少量的服务性元数据。已核实+
VPN 账户本身(VLESS/Reality)在你主服务器上的 Marzban 中创建并存在。我们在中心侧只存储签发订阅链接所必需的内容:一个随机订阅令牌,以及一份代理凭据的加密快照(一份缓存;真实来源是你的 Marzban)。我们没有任何流量、IP 或用户访问历史记录。
终端用户的邮箱地址不会存放在我们这里:其账户名以不可逆方式推导,不含任何地址。登录验证码邮件由我们发送,因此地址会经过我们的发送队列,并在发送后立即从中删除;为了认出回访的用户,只留下不可逆的指纹,无法据此还原地址。地址确实会留存的唯一情形,我们直说:支付时它随支付 Webhook 到达,并以有限的保留期进入支付记录。
这些服务数据我们只保留必要的时长,并会自动清除:邮件在发送后即从发送队列中移除,支付事件正文在处理后移除,等待重试的事件则在 90 天窗口内移除。您可以在“高级设置”中自行删除账户及其全部数据,只需用邮件中的验证码确认(详见风险 7)。我们如实公开这一点,而非用含糊的措辞加以掩饰。
SR-7我们不收集你的流量或访问日志,而且服务器也不保留任何访问日志。已核实+
CreateYourVPN 平台不接收也不存储关于你或你的用户访问了哪些网站的信息。指标采集的数据结构是封闭的:它在物理上就没有存放 IP、域名或访问记录的字段——只有聚合数据(唯一在线数、总字节数、CPU/RAM/负载)。每个节点用一个与自身 id 绑定的 HMAC 令牌进行认证,并且只能为自己写入指标。节点上的负载均衡器(HAProxy)作为按 SNI 分流的 TCP 路由器工作,并不解密流量。在服务器本身上,系统日志(journal)的保留时间不超过大约一小时,且不会转发到 syslog。
除了平台层面之外,服务器同样不保留访问日志:每次推送配置时都会强制关闭 Xray 的访问日志(平台会将 log.access 设为 none),因此边缘代理不会记录用户连接到哪些地址。这一点在代码中被强制执行,并已推送到整个服务器群。
SR-8Web 分析用的是 Google Analytics;没有其他跟踪器。已核实+
为了了解网站和面板的使用情况,我们使用 Google Analytics(cookie 横幅会就 cookie 和统计数据的收集作出提示;详情见隐私政策)。在 OAuth 同意页面上,分析工具被强制禁止加载:其 URL 包含 AI 连接请求的短期有效标识符,该标识符不得传给第三方。没有其他第三方跟踪器:没有 Sentry、PostHog、Mixpanel,也没有广告像素。后端没有第三方遥测,面向最终用户的门店也不受分析工具覆盖。
保留说明:GA 会收到你的 IP(在 Google 一侧)以及所浏览面板页面的地址;面板 URL 只包含一个集群标识符,而不包含邮箱。
SR-9支付由外部处理——我们不会收到完整的卡号。已核实+
支付及所有卡片数据都在所接入的提供商一侧处理(lava.top)。我们只接收经过验证的 webhook 事件:在余额或访问权限发生变更之前,会以相应提供商所支持的方式确认其真实性。我们不会收到完整的卡号(PAN)或 CVV。同一事件的重复投递不会导致重复发放权益:事件会被去重。
保留说明:提供商可能会在 webhook 请求体中包含卡片元数据(卡组织品牌和后 4 位)以及付款人的姓名和邮箱。工作进程在处理完成之前需要用到原始请求体;处理成功后,它会连同邮箱提示一起被删除。等待重试或人工审核的事件只会将原始请求体保留到留存期结束(90 天无活动),之后卡片元数据和付款人的邮箱会被自动清除。“没有完整卡号”是真的,但那是提供商的特性(我们自己并不过滤请求体);“我们对卡片一无所知”则不然。
坦诚说明我们存储了关于你(合作伙伴)的哪些信息。坦诚说明+
账户方面,我们存储邮箱、上次登录时间、界面模式和设置;计费方面,存储余额,以及为充值而填写的 Telegram(如有)。为保护账户,活跃会话包含创建时间、最后活跃时间、IP 地址和 user-agent。成功和失败的登录尝试历史连同同样的技术特征保存 90 天。
面板没有整体的点击历史。另外存在若干专用日志:合作伙伴 API 请求——最多保留最近 500 条,时长约 25 小时;基础设施事件和诊断结果——最多 7 天;已连接的 AI 的操作——随账户一同保存。在记录 AI 操作之前,会删除其中的密码、令牌、密钥和订阅链接,并对用户邮箱做脱敏处理。
服务器加固
SR-10防火墙拒绝一切,除了必需的部分。已核实+
防火墙默认拒绝入站连接。对外开放的有:443(VPN,Xray+Reality)、位于非标准端口的 SSH(默认 12011),以及——在主服务器上——Marzban 管理面板端口,且仅对控制平面的 IP 开放。端口 80 只在 Let's Encrypt 模式下为了 HTTP-01 才单独开放。SSH 迁移之后,端口 22 会被关闭。
节点的管理端口只对主服务器的 IP 开放,而不对外开放(该绑定若失败,会中止安装)。如果防火墙没有生效,安装就会失败。ICMP echo 仅对 IPv4 做了限制;我们不承诺服务器是“隐形的”,而且 IPv6 的 ICMP 会被保留,以便 IPv6 正常工作。
SR-11自动安全更新。已核实+
无人值守升级(unattended upgrades)会自动安装安全软件包更新。保留说明:自动重启被有意禁用(这样未经验证的内核就不会自行重启)——这意味着需要重启才能生效的修复(内核,有时是 OpenSSH)只有在手动或计划重启之后才会应用。“自动打补丁”对用户态(userland)而言是真的,但对需要重启的部分则不然。
坦诚谈谈“隐形”——我们并不这样宣称。坦诚说明+
我们绝不宣称服务器是“隐形的”或“无法被扫描”。端口 443 是开放的,会像任何 Web 服务器一样响应 TCP 连接。“在不正确的连接下它看起来像一个普通的、无关的网站”这一特性,是由 Xray 内部的 Reality 协议提供的——那是一个我们不会将其绝对化的独立组件。
平台(控制面板)
SR-12无需密码即可登录你的 CreateYourVPN 账户。已核实+
合作伙伴登录使用发送到邮箱的一次性 6 位验证码。账户没有密码。这不适用于被管理组件的内部凭据,例如自动生成的服务器管理员密码。验证码由密码学生成器生成;只存储其 HMAC 哈希,且比较采用恒定时间。验证码在成功后会被立即删除,5 次错误尝试之后会被提前作废。签发的速率限制同时按完整地址和实际邮箱计数:更换 IP、在 Gmail 地址中加点或使用加号标签,都不会获得单独的限额。
SR-13会话可以查看并立即撤销。已核实+
会话令牌存放在一个 HttpOnly 且 Secure 的 cookie 中(JS 无法读取它),并在后端验证(不只是在边缘)。空闲超时和无操作时的自动登出是在客户端实现的,而不是在服务器上。令牌用 HS256 签名;验证时我们会严格拒绝任何其他算法(包括 “none”)——经典的算法替换攻击无法通过。门店令牌与合作伙伴面板令牌按受众(audience)区分:一个最终用户令牌在技术上无法到达合作伙伴 API(反之亦然)。即便持有一个仍然有效的令牌,已被删除的合作伙伴也会被拒绝。
每个合作伙伴会话都有一个稳定的服务器端标识符,在令牌续期时保持不变。普通退出登录会撤销整个当前会话,而不只是某一次签发的令牌。在“账户会话”页面中可以看到设备、IP 地址、登录时间和最后活跃时间;任何会话都可以单独结束。“在所有设备退出”操作会结束所有会话,并断开已连接的 AI。
登录历史保存 90 天,显示成功的登录、错误和过期的验证码,以及超出尝试次数的情况。一旦出现已完成换发的令牌被再次使用的迹象,系统会认定会话已被复制,结束所有会话和 AI 连接,并向所有者发送通知。
SR-14会话令牌和内部机密无法被客户端 JavaScript 访问。已核实+
浏览器的本地存储中没有会话令牌,只有界面设置。把令牌放进 HttpOnly cookie 的是 Next.js 的服务器层;浏览器拿不到后端的内部地址,而是通过 Server Actions 访问后端。CORS 不允许其他来源读取包含授权数据的 API 响应。
存在由所有者本人掌控的有意例外:凭邮件验证码导出 SSH 私钥(SR-4),以及新建的合作伙伴 API 密钥——其完整机密只在创建时于浏览器中显示一次。此后无法从数据库中恢复它:那里只保留哈希。公开的 API 域名按设计可从互联网访问,但如果没有有效的会话、API 密钥或 OAuth 令牌,它不会返回受保护的数据。
SR-15平台的公开域名使用 HTTPS,并配有严格的安全响应头。已核实+
CreateYourVPN 的公开主机通过 HTTPS 提供服务,并启用 HSTS(max-age 两年,includeSubDomains)。我们托管的每一个 Web 前端——平台站点、合作伙伴面板,以及合作伙伴的店面(无论位于我们的子域名还是合作伙伴自有域名)——以及 API 域名,都会发送同一套安全响应头:Content-Security-Policy(API 上为 default-src 'none';前端上禁止被 iframe 嵌入,并锁定 base-uri 与 form-action)、X-Content-Type-Options: nosniff、X-Frame-Options,以及严格收紧的 Referrer-Policy(API 上为 no-referrer;前端上为 strict-origin-when-cross-origin,并同时发送限制性的 Permissions-Policy)。
这些在上述所有主机的生产环境中均已生效,并且可独立验证——使用任意 HTTP 响应头检查工具或 SSL Labs 之类的服务即可。
连接 AI 是一项独立、可撤销的访问权限,而不是交出账户会话。坦诚说明+
AI 应用通过 OAuth 连接,不会获得你面板的 cookie。在同意页面上,你从三个级别中选择一个:仅查看;查看和配置;删除和授予访问权限。服务器会在每次调用时检查权限。关键的删除操作还需要邮件中的一次性验证码,而整个连接可以在“已连接的 AI”页面中撤销。
每一次工具调用都会连同结果和参数的安全副本,写入所有者可查看的日志。密码、令牌、API 密钥、私钥和订阅链接会在写入前被删去;用户邮箱会做脱敏处理。同时,你所选择的 AI 应用仍然是第三方服务:你有意交给它读取或修改的数据,也会按照其提供方的规则进行处理。
坦诚谈谈风险(我们不承诺的部分)
以下列出了当前架构中仍然存在、并应在评估安全性时加以考虑的限制。
控制面板存储着通往整个服务器机群的加密访问密钥。它自然是系统中最敏感的组件——我们也据此对其加以保护。
何以为护:重要机密在数据库中仅以密文形式存在;加密密钥(KEK)与数据库分开存放;管理密钥不会出现在发给浏览器的普通响应中,并在删除服务器时被清零。订阅令牌还有额外一层防护——哈希查找(hash lookup)加上 AES-GCM——因此即便是一份没有 KEK 的数据库转储,也不含任何可用的 /sub 链接。
诚实的上限:加密能够可靠地抵御对数据库本身的窃取——无论是备份、副本还是转储。但它并不能消除应用主机被完全攻陷的风险,在那里进程可以同时访问 KEK 和数据库。我们目前没有使用专用的 KMS/HSM;因此,我们防御的主要着力点在于主机隔离、自动更新,以及尽可能小的公开暴露面。
首次添加 VPS 时,平台尚不知道它的 SSH 主机密钥(host key),也不会通过独立的可信渠道获取其指纹。因此,使用您输入的 root 密码建立的首次连接采用 trust on first use(首次使用即信任)模型:此时位于网络路径上的主动攻击者在理论上可以冒充该服务器。我们不会称这一风险为零。
安装成功后,指纹会被固定,此后每一次管理连接都必须与之匹配。密码不会在任何地方保存,也不再使用;密码登录和 root 登录会被禁用,管理改为使用一把独立的密钥。
要彻底消除这一限制,只能对首个指纹进行独立验证,例如通过 VPS 提供商的 API 或由所有者确认。目前尚无此类验证,因此这一项仍是未解决的风险。
这是任何租用服务器的固有特性,并非只有我们如此:快照、救援(rescue)模式之类的功能对服务商是可用的,没有任何软件能加以防护。另一方面,选择一家值得信赖的服务商掌握在您手中,而服务器完全属于您——您可以随时更换主机商或删除这台机器。
没有人能承诺绝对的防护——所有软件都会出现新漏洞。我们的做法:安全更新会自动安装,而需要重启才能生效的修复(内核,有时是 OpenSSH)会在重启之后应用——无论是手动还是计划重启(见 SR-11)。
您的地址用于登录,并在账户存在期间保存。终端用户的地址不会作为个人资料数据保存;例外是尚未处理或等待审核的支付事件中所含的付款人地址,已在 SR-6 和 SR-9 中说明。在 AI 操作日志中,用户邮箱仅以脱敏形式保存。
由于登录依赖邮件中的一次性验证码,您的邮箱实际上就是账户的钥匙——值得好好保护。第二因素暂时还没有:在当前阶段这是合理的,但值得了解。
终端用户的邮箱在邮件发送后即从队列中移除,而成功支付事件的原始正文则在处理后移除。合作伙伴 API 日志限制为最近 500 行、约 25 小时;基础设施事件和诊断结果最多保存 7 天。
合作伙伴账户的登录历史保存 90 天。等待重试或人工审核的支付事件正文同样适用这一期限:无活动最长 90 天,期满后个人数据会被清零。
一个单独的例外是已连接的 AI 的操作日志:它用于核查以所有者名义执行的操作,并随账户一同保存。写入之前会删除机密并对邮箱做脱敏处理,但该日志目前没有单独的短期 TTL。
您可以在“高级设置”中自行删除账户:一次性彻底删除,连同上述所有日志,包括 AI 操作日志。已删除的数据会保留在数据库备份中,直到备份被覆盖,最长不超过 30 天。与支持团队的往来信件独立于账户存储,可应您的要求删除。
如果您启用了向 Google Drive 或 S3 导出备份,用户数据便会离开您的服务器,此后对它的保护就取决于您的云——本报告不对其单独涵盖。这是您有意识的选择:该功能由您自己开启。
如何核实这一切。
上面每一条主张都是一次公开的下注。我们邀请你找出我们哪里说错了或有所美化:
赛道 A——经典漏洞(RCE、授权绕过、IDOR、信息泄露等等)。
赛道 B——反驳这份报告:证明任何一条 SR-N 是错误的,即可获得奖励,我们也会公开发布更正。
有所发现?
带上可复现的概念验证写信给我们。我们会在 72 小时内回复,并在内部分级评估。