Apache Solr 环境变量信息泄漏漏洞

admin 2024年1月16日17:57:31评论21 views字数 2511阅读8分22秒阅读模式

漏洞描述
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);

漏洞利用:

Apache Solr 环境变量信息泄漏漏洞

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 环境变量信息泄漏漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月16日17:57:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache Solr 环境变量信息泄漏漏洞https://cn-sec.com/archives/2399071.html

发表评论

匿名网友 填写信息