CVE-2026-27135nghttp2是一个用C语言实现的HTTP/2协议库。在1.68.1之前的版本中,当应用程序调用公共API函数nghttp2_session_terminate_session或nghttp2_session_terminate_session2时,nghttp2库会停止读取传入数据。这些API也可能由库内部在检测到连接错误情况时调用。由于缺少内部状态验证,库在调用这些终止API后仍会继续读取剩余数据。当接收到导致FRAME_SIZE_ERROR的畸形帧时,会触发断言失败(assertion failure),从而造成程序崩溃。该漏洞可被远程攻击者利用,通过发送特定的畸形HTTP/2帧来触发受影响应用程序的拒绝服务条件。nghttp2 v1.68.1版本通过添加缺失的状态验证来避免断言失败。目前没有已知的临时缓解措施。
该漏洞的根本原因在于nghttp2库在调用nghttp2_session_terminate_session或nghttp2_session_terminate_session2后,虽然停止了处理新请求,但未正确更新内部状态机。具体问题如下:
1. 当应用调用终止会话API时,库应设置一个内部标志位来阻止进一步处理帧。
2. 缺少的状态验证导致库继续从网络缓冲区读取数据。
3. 攻击者可发送一个合法的会话终止请求后,紧接着发送一个畸形帧(frame),该帧的帧大小字段与实际数据不符,触发FRAME_SIZE_ERROR。
4. 由于状态验证缺失,库尝试处理该畸形帧,在帧解析逻辑中触发断言失败。
5. 断言失败通常发生在debug模式或启用了断言检查的构建版本中,导致进程异常终止。攻击者无需认证即可通过网络触发此漏洞。