网页应用程式安全自动扫描服务 Detectify 安全研究员近日 Frans Rosén 发现,TLS-SNI-01 以及 TLS-SNI-02 在特定的情况下,允许黑客取得他人网站的 HTTPS 认证。
证书颁发认证机构 Let's Encrypt 表示,由于太多共享托管以及基础设施服务违反 TLS-SNI 验证,即日起停止通过 TLS-SNI 验证取得认证,并对通过的验证进行更新,Let's Encrypt 鼓励使用者,尽量更换成 HTTP 或是 DNS 验证。
Frans Rosén 发现后,1 月 9 日已向 Let's Encrypt 报告的 TLS-SNI-01 验证存在风险,同时被视为其继任机制的 TLS-SNI-02 验证也具有同样问题,Let's Encrypt 也随即停用 TLS-SNI 验证。
TLS-SN I 是 Let's Encrypt 3 个自动化认证管理环境(Automatic Certificate Management Environment,ACME)请求 TLS 认证协定的方法之一。而 Frans Rosén 发现,TLS-SNI-01 和 TLS-SNI-02 在特定的情况下,允许黑客取得他人的网站 HTTPS 认证。
黑客可以找到指向托管服务的独立网域名称,为该域名添加未授权的认证,以假乱真。例如一间拥有fakecert.com 网域的公司,将其位置指向一个位置非 fakecert.com 的云端服务,而黑客就有机会在该云端服务启用一个全新的帐号,并用新帐号为 fakecert.com 添加 HTTPS 伺服器,再使用 Let's Encrypt 的 TLS-SNI-01 验证服务认证 HTTPS,让假网站看起来跟真的一样。
而这个风险发生的原因并非是 TLS-SNI 验证程式上的漏洞,而是流程控制问题。不少托管服务不验证网域的所有权,尤其是托管服务提供多个使用者共用同一 IP 时,更可能让有心人士利用 Let's Encrypt,并通过TLS-SNI-01 验证机制取得他人的网站认证,无论是 AWS 的 CloudFront 或是 Heroku 都存在这样的风险。
Frans Rosén 建议 3 个方法减少相关的风险,首先便是停用 TLS-SNI-01,再来是设置 .acme.invalid 入黑名单,最后为使用取得其他验证的方法。Let's Encrypt 目前也停止通过 TLS-SNI-01 机制发放认证,要求使用者转而使用 HTTP-01 或是 DNS-01。