漏洞描述
Apache Solr 是一款开源的搜索引擎。
在 Apache Solr 受影响版本中,由于 Solr Metrics API 默认输出所有未单独配置保护策略的环境变量。在默认无认证或具有 metrics-read 权限的情况下,攻击者可以通过向 /solr/admin/metrics 端点发送恶意请求,从而获取到运行 Solr 实例的主机上的所有系统环境变量,包括敏感信息的配置、密钥等
项目地址:https://github.com/apache/solr
涉及漏洞的函数如下所示,这段代码是用于设置和注册 JVM(Java Virtual Machine)性能指标(metrics)的功能,主要目的系使用 metricManager 的 registerAll 方法注册了多个不同类型的度量指标,如缓冲池、类加载、垃圾收集器、内存使用等相关信息,实现监测 Solr 服务器的性能。
private void setupJvmMetrics(CoreContainer coresInit,MetricsConfig config){ metricManager= coresInit.getMetricManager();
registryName= SolrMetricManager.getRegistryName(Group.jvm); final NodeConfig nodeConfig=coresInit.getConfig();
try{
metricManager.registerAll(
registryName,new AltBufferPoolMetricSet(), ResolutionStrategy.IGNORE, "buffers"); metricManager.registerAll(
registryName,new ClassLoadingGaugeSet(), ResolutionStrategy.IGNORE, "classes"); metricManager.registerAll(
registryName,new OperatingSystemMetricSet(),ResolutionStrategy.IGNORE,"os"); metricManager.registerAll(
registryName, new GarbageCollectorMetricSet(),ResolutionStrategy.IGNORE,"gc"); metricManager.registerAll(
registryName,new MemoryUsageGaugeSet(),ResolutionStrategy.IGNORE,"memory"); if (config.getCacheConfig()!=null
&&config.getCacheConfig().threadsIntervalSeconds != null) { if (log.isInfoEnabled()) {
log.info(
"Threads metrics will be cached for {} seconds",
config.getCacheConfig().threadsIntervalSeconds);
metricManager.registerAll( registryName,
new CachedThreadStatesGaugeSet(
config.getCacheConfig().threadsIntervalSeconds,TimeUnit.SECONDS), SolrMetricManager.ResolutionStrategy.IGNORE,
"threads"); }else {
metricManager.registerAllI registryName,
new ThreadStatesGaugeSet(),
SolrMetricManager.ResolutionStrategy.IGNORE, "threads");
}
MetricsMap sysprops= new MetricsMap( map->
System.getProperties() .forEach(
(k,v) →> {
if (!nodeConfig.isSysPropHidden(String.value0f(k))){ map.putNoEx(String.value0f(k),v);
漏洞利用:
POC
https://IP:PORT/solr/admin/metrics
修复代码如下:
public class CoreContainerProvider implements ServletContextListener {
ResolutionStrategy.IGNORE,
"properties",
"system");
- MetricsMap sysenv =
- new MetricsMap(
- map ->
- System.getenv()
- .forEach(
- (k, v) -> {
- if (!hiddenSysProps.contains(k)) {
- map.putNoEx(String.valueOf(k), v);
- }
- }));
- metricManager.registerGauge(
- null, registryName, sysenv, metricTag, ResolutionStrategy.IGNORE, "env", "system");
} catch (Exception e) {
log.warn("Error registering JVM metrics", e);
}
代码逻辑中不难看出,开发者将 envVars 相关数据从 metrics API 删除;补丁的主要目的是移除了注册系统环境变量的代码块,具体来说:代码使用 MetricsMap 对象 sysenv 来获取系统环境变量,并将其添加到度量指标中。补丁将上述代码段删除,避免敏感信息泄露。
修复方案
1. 将 org.apache.solr:solr-core 升级至 9.3.0 及以上版本
2. 将组件 solr 升级至 9.3.0 及以上版本
原文始发于微信公众号(jacky安全):Apache Solr 环境变量信息泄漏漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论