公共互联网安全计划

让互联网更安全。

NullSquare 会找出那些显而易见、从公网就能看到的安全配置错误,并私下通知负责它们的组织。同一个计划也会研究公开的开源代码,寻找我们能够复现、修补并加以证明的问题。

涵盖 NullSquare 的全部工作
11,179
已发现的风险
6,742
已验证
449
严重与高危
152
不同的 CVE

你为什么会收到这条消息

我们的一个代理在贵组织持有的域名上,发现了对公网敞开的东西。我们私下写信给你,好让你的团队去查看并关闭它。我们没有告诉其他任何人,也没有公开它。

这个计划会检查什么

这个计划只看那些从公网就已经能看到的东西:

  • 本不该从互联网访问到、却能访问到的服务。
  • 任何人只要找到就能进入的管理界面。
  • 被公开留在运行状态的开发或调试工具。
  • 正在提供本不该被提供的文件的目录列表。
  • 仍留在线上主机上的默认部署页面。
  • 任何人都能用我们同样的方法找到的类似配置错误。

代理只取足以指明受影响的域名或服务、并说清是哪一类问题的信息。再往里,它不会去。

开源研究

一次通知能缩小暴露的攻击面,却修不好底下的代码。所以这个计划也在源头下功夫——我们一次只挑一个公开的开源仓库,放进一次性沙箱里研究,寻找我们能够证明的安全问题。

一个代理声称某处有漏洞,并不等于风险已确认,扫描器的输出同样不算。除非它能复现、修补站得住脚,而且这两件事都写得足够清楚、别人能照着重跑一遍,否则一概不算。

  1. 01锁定仓库会在一个确切的提交上,被克隆进一个不含生产凭据的一次性沙箱。
  2. 02取基线在任何研究开始前,先跑一遍项目自己的构建和测试,好知道原本哪些是通过的。
  3. 03研究代理在沙箱里阅读并实际运行这份代码,只针对那一个被锁定的版本。
  4. 04复现一个候选项,只有在从干净的检出里复现出来、且不带任何探索遗留状态时,才算数。
  5. 05修补在合理范围内最小的修复,外加一条回归测试——只要项目结构让这件事可行。
  6. 06验证复现步骤在修补前后各跑一次,项目自己的检查也再跑一遍。
  7. 07人工复核结果由人来接受或否决。没有任何东西会自动离开实验室。

我们从不为了宣称通过而删除、跳过或削弱测试。当工作达不到标准时,答案就是:没有确认的风险——并连同尝试过什么、哪些无法核查一并记录。无论哪种结果,这次运行都产出同一份材料:

证据包

仅供内部,由人复核,实验室本身从不公开。

summary.md
尝试了什么、发现了什么、以及哪些无法核查。
risk.md
根因、受影响的代码路径,以及一个诚实的置信度评估。
reproduction/
在未修补版本上的命令,以及观察到的证据。
patch.diff
最小的修复,绑定在那个被锁定的提交上。
tests/
一条回归测试:修补前失败,修补后通过。
verification.md
修补前后的结果,连同构建、测试与 lint 的输出。
run-metadata.json
仓库、确切提交、模型、时长与成本。

这个计划不做什么

  • 不猜密码,不试凭据,不绕过身份认证。
  • 不实施利用,不做破坏性测试,不提权,不串联漏洞。
  • 不收集私有文件、客户记录、源代码或需登录才能看到的内容。
  • 不公开、不出售、不对外索引所发现的问题。
  • 研究期间不测试线上或托管环境。工作只在本地克隆上进行。
  • 不 fork、不建分支、不提交、不推送、不开 PR、不开 issue。实验室没有仓库的写入权限。
  • 实验室自己不联系维护者、不发布公告、不申请 CVE、不提交赏金。
  • 不对公共代码托管平台做批量扫描。仓库是一个一个、有意挑选的。

隐私与数据处理

通知会直接发给该域名合适的公开联系人。消息送达后,检测会话即被丢弃;NullSquare 不保留本计划所得风险的可检索数据库。

研究运行只针对公开的源代码。沙箱在运行结束后销毁,证据包留在内部。若某个结果最终被送到维护者那里,那是由人做出的、单独而有意的决定。

与邮件投递、防滥用和退订相关的最小记录可能会单独保留。这些记录不包含复制来的目标数据或利用输出。

核实或回复一条通知

一封真正的「Secure the internet」消息,绝不会索要凭据、付款、API 密钥或对你系统的访问权限。你可以回复这封消息、要求退订、更正联系人,或直接向 NullSquare 核实它的来源。

null@nullsquare.net