当前位置: 首页 > 知识库问答 >
问题:

如果未安装Java,您是否可以安全使用log4j CVE-2021-44228?

叶越
2023-03-14

我已经读了很多关于这个问题有多严重的文章,并且了解了在我们公司正在生产的代码中找到它的可用选项,以及更新使用易受攻击版本的服务器

我找不到的是,如果某个特定服务器没有安装Java,即如果我以root用户身份登录并运行Java-version并获取Java:command not found是否该服务器完全安全,因此我可以继续?

我最初的直觉是:没有Java—没有问题。但是,GitHub发布了其企业服务器的更新,声明:

关键:Log4j库中的远程代码执行漏洞,标识为CVE-2021-44228,影响了3.3.1之前的GitHub企业服务器的所有版本。Log4j库用于在GitHub Enterprise Server实例上运行的开源服务。GitHub Enterprise Server版本3.0.22, 3.1.14, 3.2.6和3.3.1修复了此漏洞。有关更多信息,请参阅GitHub博客上的这篇文章。

然而Java并没有安装在他们的企业服务器上。

我猜有问题的服务一定是在docker容器中运行Java。所以我想我需要考虑机器上的java或者在容器中运行的java。

有没有其他我没有考虑过的隐藏方式来运行这个log4j进程?

共有2个答案

邢良才
2023-03-14

我还没有一个完整的答案,但非常肯定的是,即使Java没有安装,Docker没有安装,Java没有在进程列表中运行,Java不在您的yum/apt安装的应用程序列表中。

我没有考虑过的一个明显的例子是,将Java作为JRE添加到应用程序中。

我们拥有的Coverity平台服务器没有安装Java,但Java正在运行,例如ps-ax | grep Java

/home/coverity/cov_platform-2021.9.0/jre/bin/java -Djava.awt.headless=true -Djdk.tls......

确定该JRE中是否包含易受攻击的Log4j版本要困难得多。

此外,仅仅检查流程列表也是不够的。在这种情况下,进程列表包含java,但java只能在由另一个进程触发时运行,例如cronnginx

澹台阳秋
2023-03-14

log4j2是一个库,运行中的java进程必须使用该库才能使用该库。但是您是对的,检查java命令是否安装到命令行是不够的。

这里有两个选项(并不意味着完整),说明在命令行上没有java命令的情况下,您的系统如何仍然容易受到攻击

  • 可以将Java下载到目录中,而无需将Java命令或目录添加到可执行路径。通过使用。bash(或.bat)脚本指向下载的java版本的java进程仍然可以启动。但是当目录未添加到路径时,您将不会发现java命令已启用
  • Java可以在docker容器中运行。java命令只能在docker容器内部使用,但从外部看不到。我不确定是否需要额外的利用漏洞来突破的容器,如果这是很容易不需要额外的努力
 类似资料:
  • 我一直在思考jvm安全的工作方式。原则是,jvm始终信任并运行任何本地代码。因此,从概念上讲,如果您的代码没有显式或隐式调用<code>checkpermission(permission)</code>,这意味着它永远不会失败任何安全验证。当然,所有这些验证调用通常都是在JavaAPI类中完成的,因此我们不需要为内置权限调用它们。 现在,只要您使用内置类(如<code>FileOutputStr

  • 我有一个问题要问这里的JVM内部专家。 在Java虚拟机中,对象内容存储在堆内存中,直到被垃圾回收为止。通常,GC是在没有更多可用内存的情况下发生的,因此如果JVM有大量可用空间,那么GC发生之前可能需要很长时间。 从安全的角度来看,您能想象有人访问JVM内存并获得堆空间的转储,在那里可以找到等待GC的未使用对象吗? 我的意思是:如果我的程序处理敏感数据,并且在执行涉及这些敏感对象的过程后,我的应

  • 相应的 Composer 命令,包括exec、install和update,它们都允许在你的机器上运行第三方代码。这来自 Composer 的「插件」和「脚本」功能。插件和脚本可以完全访问运行 Composer 的用户账号。因此,强烈建议避免使用 root 账号运行 Composer。 在安装或更新包期间,为了只让 Composer 代码、而非第三方代码运行,你可以使用以下语法禁用插件和脚本: c

  • 我使用springdoc openapi for java SpringBoot RESTful应用程序定义了以下: 是否可以将其全局应用于所有路径,而不必在代码中的任何地方添加注释到注释? 如果是,如何添加排除到不安全的路径?

  • 问题内容: 我有一个M5000 Sparc服务器,上面已经安装了solaris Os版本11.3()。可以在这台机器上安装docker- ce吗?我已经测试了一些解决方法,例如使用(开源泊坞窗),但是没有一个可以解决。在sparc系统上进行dockerization的解决方案是什么? 问题答案: 当前在Solaris上不支持Docker。Oracle针对Solaris的容器解决方案一直是Oracl

  • 我们的许多代码是遗留的,但我们正在向“大数据”后端移动,我试图传播更新的API调用,鼓励使用最新的Spring库等。我们的问题之一是应用程序层ID生成。出于我不明白的原因,一个更高的权威想要序列的biginteger。我本可以在失败的插入中使用重新生成和重新尝试使它们随机,但我确实被否决了。 附言。我仍然认为我的随机生成的想法比处理所有这些线程的东西要好。大整数是一个大得离谱的数字,两次生成相同的