LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

LDAP NULL bind匿名绑定导致登录绕过漏洞分析和修复方案

一、背景

1.1LDAP和认证过程

LDAP轻型目录访问协议是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。有优异的读性能,但写性能差。

LDAP作为开放的Internet标准,支持跨平台,在业界中得到广泛认可和使用,只需要通过简单的配置就可以实现与服务器的认证交互,可以很便捷的实现LDAP统一认证服务,如我们日常使用的sso。

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

LDAP bind绑定可以理解为一个登陆认证的过程,通常,在根据LDAP进行身份验证时,判断是否登陆成功会采取以下三种方法之一:

  1. 使用LDAP用户的用户名和密码绑定到LDAP服务器;

最常见的简单代码实现方式,第三方应用也常用;

  1. 在LDAP中检索用户的条目,然后将用户输入的密码和检索到的LDAP记录中的密码属性相比较;

LDAP服务器对于password属性可读的情况,较少见;

  1. “两次绑定”验证方法

支持匿名绑定的LDAP服务器下,进行初次匿名,第二次提交身份信息进行绑定,也比较常见。

1.2 NULL BIND

或者称为Anonymous bind,不同于匿名访问,匿名绑定很多情况下不被认为构成漏洞。匿名绑定指用户无需身份验证,即可直接提交空值,以“NULL BIND”的方式连接到该服务器完成绑定,但不能执行访问/查询。如果存在匿名访问漏洞,则还可以执行查询等操作。

如图为Windows Server 2016的AD,可以对rootDSE匿名绑定,但不能匿名查询支持的DN

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

图1.匿名绑定成功

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

图2.匿名访问/查询不成功LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

图3.通过验证可以查询/访问

在rfc【反和谐】4513的5.1.2和6.3.1小节,有关于该问题的描述

https://datatracker.ietf.org/doc/rfc【反和谐】4513/?include_text=1

重要部分翻译如下

5.1.2

LDAP客户机可以使用简单绑定方法,通过未经验证的身份验证机制来建立匿名授权状态,方法是发送带有名称值(LDAP字符串形式为非零长度的RFC【反和谐】44514的可分辨名称)的绑定请求,并指定包含零长度密码值的简单身份验证选项

打算执行身份验证的用户可能会无意中提供空密码,从而导致执行不佳的客户端请求未经身份验证的访问。客户端应该禁止向名称/密码验证用户界面输入空密码。此外,默认情况下服务器应失败未经身份验证的绑定请求。

6.3.1

使用简单Bind操作的结果来做出授权决策的客户端应主动检测未经身份验证的Bind请求(通过验证提供的密码是否为空)并做出适当的反应。

1.3 服务器的NULL BIND

微软AD(Windows ActiveDirectories)在默认情况下,不支持针对活动目录Active Directory的任何LDAP匿名操作,但支持对rootDSE的匿名搜索和绑定,且无法禁用。

Windows server 2003之前的版本需要手动调整,以禁用对活动目录Active Directory的LDAP匿名操作,包括绑定、搜索和查询。

微软官方说明:“https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled

Active Directory存储了有关对象的信息,能让管理员和用户能够轻松地查找和使用这些信息。

rootDSE是目录信务器目录信息树的根,目的是提供关于directory Server的本身的数据。例如,如果一个客户端知道目录服务器正在监听的主机名和端口,则它应该通过询问rootDSE来了解directory server本身的信息和数据。
通常包含下面的一些信息
厂商/供应商=Vendor
服务器支持的命名上下文=naming contexts
服务器支持的请求控制=request control
支持的SASL机制
支持的功能
Schema位置等等信息

OpenLDAP在simple配置下,现行版本默认情况下支持匿名绑定,可以手动调整禁用。部分早期版本还支持匿名访问。“https://openldap.org/doc/admin24/security.html

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

二、案例

2.1 漏洞描述

(1)某IT系统,由管理员自己分配有权限的账户,维持一个列表,依据LDAP进行密码校验;

(2)登陆时,验证用户名是否在服务器账户列表内,提交到LDAP验证,判断登陆是否成功;

(3)离职用户(即LDAP中不存在,但是在系统自身用户列表内)可以使用任意密码登陆

2.2 漏洞成因分析

分析代码发现,系统逻辑如下:

  1. 校验输入用户是否是已分配的合法用户;

  2. 对于合法用户,在LDAP服务器中查询用户DN信息;

  3. 提交DN与passwd密码,通过与LDAP绑定是否成功,判定登录状态。

漏洞成因如下,在第2步时,因为离职员工信息在LDAP中已经删除,返回DN为空。而上层域控为windows server DC,允许对rootDSE的NULL绑定,因此提交了空DN与任意密码。php代码认为ldap_bind执行结果为真,判定登陆成功。

等价于如图所示的情况,Base不选择的情况下默认为rootDSE。微软AD的rootDSE允许匿名绑定。

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

有问题的代码块如下,ldap_bind的结果判定为真LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

修改后,增加了判断ldap_user_dn是否为空的判定,若LDAP中不存在用户信息,则直接返回错误不进行提交。LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

三、复现方法

3.1 NESSUS扫描

Nessus可以不稳定的报出这个漏洞,描述如下,定义为中危的信息泄露

描述中明确,“此插件不能证明存在LDAP匿名访问漏洞,且LDAP v3要求支持匿名绑定”

https://www.tenable.com/plugins/nessus/10723

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

3.2手工测试

3.2.1 LdapAdmin

输入host,选择匿名连接LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

支持的情况LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

不支持的情况LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

3.2.2 SofterraLDAP Browser

使用Softerra LDAP Browser 工具验证过程如下

1.选择服务器,并选择Base DN为RootDSE;

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

2.选择“Anonymous user”匿名用户LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

3.选择完成,发现可以匿名绑定,并加载根目录信息LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

如果不支持NULL BIND,则无法加载根目录信息

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

3.2.3 Python脚本

Python代码,ldapconn.simple_bind_s传空参数,则会判定绑定成功

import ldap

ldapconn = ldap.initialize(‘ldap://X.X.X.X:389’)

ldapconn.simple_bind_s(”, ”)

print(“helllo”)

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

官方python_LDAP库文档的说明如下,在who和cred参数,可以接收空值

https://pypi.org/project/python-ldap/LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

LDAP服务端调整

4.1 OPENLDAP

根据官方文档,需要在slapd.conf中指定“ disallow bind_anon ”来禁用匿名绑定机制。

“https://openldap.org/doc/admin24/security.html”

1.vi /etc/openldap/slapd.d/cn=config.ldif

添加:

olcDisallows: bind_anon

olcRequires: authc

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

  1. vi /etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif

添加:

olcRequires: authc

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

2.重启slapd服务

systemctl restart slapd

  1. 验证,不允许匿名绑定

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

Windows-OpenLDAP直接修改此文件即可

4.2 Windows Server AD仅针对Active Directory

Windows Server 2003之后的版本,默认不允许对Active Directory的匿名绑定

但因功能设计,针对rootDSE匿名绑定无法禁用

可以通过以下方式调整对Active Directory匿名访问

https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled

  1. 服务器运行AdsiEdit.msc,连接到配置

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

2.选中LDAP条目,选择【CN=Configuration,CN={GUID}】双击【CN=Services】, 双击【CN=Windows NT】,在【CN=Directory Service)】右键选择属性

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

2.将DsHeuristics 属性值设置为0(0000002表示允许)

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

3.使用任意LDAP工具尝试连接并Fetch DNs,可以看到对Active Directory的匿名访问失败

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

安全编码实现

使用LDAP的服务器,后端验证逻辑避免此问题比较简单,对提交到LDAP的用户输入值,进行空值校验即可。注意在前后端均做控制,并检查提交参数的逻辑。

此外,使用LDAP认证登陆的应用系统,也需要注意避免LDAP注入类的问题。

如图示例,为vmware harbor开源平台的LDAP验证逻辑

LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么

关于LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下亿速云网站!

文章标题:LDAP NULL bind导致登录绕过漏洞分析和修复方案是什么,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/24783

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云亿速云认证作者
上一篇 2022年9月13日 下午11:48
下一篇 2022年9月13日 下午11:49

相关推荐

  • 知识库的作用

    企业中建立知识库的作用有7点:1、企业知识资产的沉淀;2、企业知识资产有序化规范化;3、加快信息的流动;4、有利于企业知识的复用;5、可以帮助企业实现对员工知识的有效管理;6、有助于员工的学习提升;有助于提升企业的竞争能力。具体我们将在文章中展开介绍。 企业中知识库的建立,可以有效的将信息/知识积累…

    2022年3月18日
    35800
  • APACHE OFBIZ XMLRPC远程代码执行漏洞实例分析

    概述 研究人员报告了一个存在于Apache OFBiz中的反序列化漏洞。这个漏洞是由多个Java反序列化问题所导致的,当代码在处理发送至/webtools/control/xmlrpc的请求时,便有可能触发该漏洞。未经认证的远程攻击者将能够通过发送精心构造的恶意请求来触发并利用该漏洞,并实现任意代码…

    2022年9月13日
    34500
  • css中id选择符的标识是哪个

    在css中,id选择符的标识是“#”,可以为标有特定id属性值的HTML元素指定特定的样式,语法结构“#ID值 {属性 : 属性值;}”。ID属性在整个页面中是少数不可重复的;ID属性值不要以数字开头,数字开头的ID在Mozilla/Firefox浏览器中不起作用。 本教程操作环境:windows7…

    2022年9月22日
    18800
  • 安卓APP逆向分析与保护机制是怎样的

    想知道Android App常见的保护方法及其对应的逆向分析方法吗? 安卓APP安全包含很多内容,本次分享了混淆代码、整体Dex加固、拆分 Dex 加固、虚拟机加固等方面。事实上,这些内容也是国内近几年Android App安全保护的一种主要趋势。 一、混淆代码 Java代码是非常容易反编译的,作为…

    2022年9月13日
    27500
  • windows谷歌浏览器看视频卡顿如何解决

    解决方法: 方法一: 1、在地址栏输入“chrome://plugins”,随后点击右上角的“+详细信息”。 2、选择停用类型为PPAPI的插件,返回视频查看是否有问题。 方法二: 1、点击浏览器右上方的三个带你进入设置界面。 2、进入设置后点击“显示高级设置”, 3、随后取消勾选“关闭Google…

    2022年9月8日
    1.0K00
  • 使用Redis如何实现分布式锁

    1. 什么是分布式锁 当我们在编写多线程代码的时候,不同的线程可能会发生资源的争夺,为了避免资源争夺造成的错误,我们会对资源上锁,只有获得锁的线程才能继续往下执行。 进程中的锁,本质就是内存中一个变量,当一个线程执行某个操作申请加锁时,如果能成功把代表锁的变量值设置为1,则表示获得了锁,其他线程想要…

    2022年9月8日
    21400
  • word字体放大怎么在页面中间

    word字体放大在页面中间的方法 1、首先选中我们需要放大的字体。 在悬浮框的字号中填写或者选择你需要的字号大小。 2、然后点击上方菜单栏中的居中功能。 3、然后点击上方菜单栏中的页面布局,找到页面设置。 4、点开后找到版式页面,在页面的垂直对齐方式中选择居中。 然后点击确定就可以了。 关于“wor…

    2022年9月10日
    23500
  • 项目管理是什么

    为了让大家更好的了解项目管理是什么,本文将围绕:1、什么是项目;2、什么是项目管理;3、项目管理起源;4、项目管理十大知识领域;5、项目管理的5大过程和49个子过程;6、国内外知名的十大项目管理工具;六大模块进行介绍。 一、什么是项目 根据项目管理知识体系指南,它是这样对项目进行定义的:项目是指在既…

    2022年3月19日
    77100
  • mysql如何查询第几条数据

    查询第几条数据的方法:使用SELECT语句配合LIMIT子句来查询,语法“SELECT *|字段名列表 FROM 表名 LIMIT 初始位置,记录数;”或“SELECT *|字段名列表 FROM 表名 LIMIT 记录数 OFFSET 初始位置;”。LIMIT子句可指定查询结果从哪条记录开始显示,显…

    2022年9月22日
    54500
  • 如何进行XXL-JOB API接口未授权访问RCE漏洞复现

    XXL-JOB描述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 一、 漏洞详情 此次漏洞核心问题是 GLUE 模式。XXL-JOB 通过“GLUE模式”支持多语言以及脚本任务,该模式任务特点如下…

    2022年9月8日
    1.9K00
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部