公共互联网安全计划
让互联网更安全。
NullSquare 会找出那些显而易见、从公网就能看到的安全配置错误,并私下通知负责它们的组织。同一个计划也会研究公开的开源代码,寻找我们能够复现、修补并加以证明的问题。
你为什么会收到这条消息
我们的一个代理在贵组织持有的域名上,发现了对公网敞开的东西。我们私下写信给你,好让你的团队去查看并关闭它。我们没有告诉其他任何人,也没有公开它。
这个计划会检查什么
这个计划只看那些从公网就已经能看到的东西:
- 本不该从互联网访问到、却能访问到的服务。
- 任何人只要找到就能进入的管理界面。
- 被公开留在运行状态的开发或调试工具。
- 正在提供本不该被提供的文件的目录列表。
- 仍留在线上主机上的默认部署页面。
- 任何人都能用我们同样的方法找到的类似配置错误。
代理只取足以指明受影响的域名或服务、并说清是哪一类问题的信息。再往里,它不会去。
开源研究
一次通知能缩小暴露的攻击面,却修不好底下的代码。所以这个计划也在源头下功夫——我们一次只挑一个公开的开源仓库,放进一次性沙箱里研究,寻找我们能够证明的安全问题。
一个代理声称某处有漏洞,并不等于风险已确认,扫描器的输出同样不算。除非它能复现、修补站得住脚,而且这两件事都写得足够清楚、别人能照着重跑一遍,否则一概不算。
- 01锁定仓库会在一个确切的提交上,被克隆进一个不含生产凭据的一次性沙箱。
- 02取基线在任何研究开始前,先跑一遍项目自己的构建和测试,好知道原本哪些是通过的。
- 03研究代理在沙箱里阅读并实际运行这份代码,只针对那一个被锁定的版本。
- 04复现一个候选项,只有在从干净的检出里复现出来、且不带任何探索遗留状态时,才算数。
- 05修补在合理范围内最小的修复,外加一条回归测试——只要项目结构让这件事可行。
- 06验证复现步骤在修补前后各跑一次,项目自己的检查也再跑一遍。
- 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