关于nginx:解决-NGINX-LDAP-参考实施中的安全问题

66次阅读

共计 1681 个字符,预计需要花费 5 分钟才能阅读完成。

原文作者:Liam Crilly of F5 和 Timo Stark of F5
原文链接:解决 NGINX LDAP 参考施行中的平安问题
转载起源:NGINX 官方网站


2022 年 4 月 9 日,NGINX LDAP 参考施行中曝出了多个安全漏洞。经确认,只有参考施行受到了影响。NGINX 开源版和 NGINX Plus 自身未受影响,如果您不应用参考施行,则无需采取纠正措施。

NGINX LDAP 参考施行应用轻型目录拜访协定 (LDAP) 来验证由 NGINX 代理的利用的用户。它作为 Python 守护过程(daemon)公布,相干 NGINX 配置位于 https://github.com/nginxinc/n… , 咱们的博文对其目标和配置进行了详细描述。

如果呈现以下任何一种状况,LDAP 参考施行的部署都会受到破绽的影响。下文具体探讨了这些状况及其躲避办法:

   1. 命令行参数用于配置 Python 守护过程
   2. 有未应用的可选配置参数
   3.LDAP 身份验证取决于特定的组的成员身份

注:LDAP 参考施行作为参考施行公布,并且形容了集成的工作机制以及验证集成所需的所有组件。它不是生产级 LDAP 解决方案。举例来说,示例登录页面中应用的用户名和明码没有加密,平安告诉会提醒这一点。

躲避状况 1:命令行参数用于配置 Python 守护过程

配置 LDAP 参考施行的次要办法是应用若干 proxy_set_header 指令(示例配置和文档进行了具体介绍)。不过,配置参数也能够在初始化 Python 守护过程(nginx-ldap-auth-daemon.py) 的命令行上设置。

如果在命令行上设置配置参数,攻击者便能够通过发送精心设计的 HTTP 申请标头笼罩其中局部或所有参数。为了避免这种状况产生,需在 NGINX 配置(Repo 中的 nginx-ldap-auth.conf)中为 location = /auth-proxy 块增加以下配置,以确保在身份验证时疏忽所有无关的申请标头。

location = /auth-proxy {
    # ...
    proxy_pass_request_headers off;
    proxy_set_header Authorization $http_authorization; # If using Basic auth
    # ...
}

躲避状况 2:未应用的可选配置参数

如状况 1 中所述,攻击者能够通过发送精心设计的 HTTP 申请标头来笼罩某些配置参数(如果未在配置中设置)。举例来说,如果未在配置中明确设置 LDAP 搜寻模板,则攻击者可能会将其笼罩。状况 2 的解决办法和状况 1 一样,即在 NGINX 配置中为 location = /auth-proxy 块增加以下配置。

location = /auth-proxy {
    # ...
    proxy_pass_request_headers off;
    proxy_set_header Authorization $http_authorization; # If using Basic auth
    # ...
}

躲避状况 3:须要 LDAP 组的成员身份

Python 守护过程不会查看其输出。因而,攻击者能够应用专门制作的申请标头绕过组成员身份 (memberOf) 查看,即便被认证的用户不属于所需的组,也能够强制 LDAP 身份验证胜利。

为了防备这种状况,务必确保显示登录表单的后端守护过程从用户名字段中删除任何特殊字符,尤其是必须删除左右括号(())和等号(=),这两种字符在 LDAP 服务器中具备非凡含意。LDAP 参考施行中的后端守护过程将在适当的时候以这种形式更新。

致谢

感激 Lucas Verney、valodzka 和 @_Blue_hornet 向咱们指出了这些安全漏洞。


更多资源

想要更及时全面地获取 NGINX 相干的技术干货、互动问答、系列课程、流动资源?

请返回 NGINX 开源社区:

  • 官网:https://www.nginx.org.cn/
  • 微信公众号:https://mp.weixin.qq.com/s/XV…
  • 微信群:https://www.nginx.org.cn/stat…
  • B 站:https://space.bilibili.com/62…

正文完
 0