Совмещение %minecraftFormatting и {nolookups}

Overwrite

Активный участник
Пользователь
Баллы
98
Ник в Minecraft
OverwriteMC
В связи со сложившимся адом в виде log4j эксплоита, пейпер выкатил единственный на данный момент нормальный рабочий фикс для версий 1.8-1.15. Заключается он в создании файла log4j.xml и добавлении в скрипт запуска аргуменат, чтобы логирование шло по образцу оттуда.

log4j.xml с фиксом:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <TerminalConsole name="TerminalConsole">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss} %level]: [%logger] %msg{nolookups}%n%xEx}">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="%highlightError{[%d{HH:mm:ss} %level]: %msg{nolookups}%n%xEx}" />
                </LoggerNamePatternSelector>
            </PatternLayout>
        </TerminalConsole>
        <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level]: [%logger] %msg{nolookups}{strip}%n">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}{strip}%n" />
                </LoggerNamePatternSelector>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="1000"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <filters>
                <MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
            </filters>
            <AppenderRef ref="File"/>
            <AppenderRef ref="TerminalConsole" level="info"/>
        </Root>
    </Loggers>
</Configuration>

Однако возникает проблема. В оригинальном log4j, вшитом в ядро присутствует %minecraftFormatting. Он помогает консоли отображать все необходимые цвета. Как можно увидеть, в новом файле такого аргумента нет, что означает, что ни 1 цвет в консоли отображаться не будет.

Оригинал log4j.xml из pathced.jar:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <TerminalConsole name="TerminalConsole">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss} %level]: [%logger] %minecraftFormatting{%msg}%n%xEx}">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="%highlightError{[%d{HH:mm:ss} %level]: %minecraftFormatting{%msg}%n%xEx}" />
                </LoggerNamePatternSelector>
            </PatternLayout>
        </TerminalConsole>
        <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level]: [%logger] %minecraftFormatting{%msg}{strip}%n">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="[%d{HH:mm:ss}] [%t/%level]: %minecraftFormatting{%msg}{strip}%n" />
                </LoggerNamePatternSelector>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="1000"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <filters>
                <MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
            </filters>
            <AppenderRef ref="File"/>
            <AppenderRef ref="TerminalConsole" level="info"/>
        </Root>
    </Loggers>
</Configuration>

Из этого складывается вопрос. Каким образом возможно вписать %minecraftFormatting в новый log4j.xml, не потеряв фикса и чтобы всё отображалось корректно?

Быть может кто то из вас знает другие фиксы?
 
Последнее редактирование:
а просто заменить все %msg на %msg{nolookups} не работает?upload_2021-12-11_23-38-1.png
 
а просто заменить все %msg на %msg{nolookups} не работает?Посмотреть вложение 61196
Если пытаться делать так - получается это:

upload_2021-12-12_1-13-9.png

upload_2021-12-12_1-14-10.png

Код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <TerminalConsole name="TerminalConsole">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss} %level]: [%logger] %minecraftFormatting{%msg{nolookups}}%n%xEx}">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="%highlightError{[%d{HH:mm:ss} %level]: %minecraftFormatting{%msg{nolookups}}%n%xEx}" />
                </LoggerNamePatternSelector>
            </PatternLayout>
        </TerminalConsole>
        <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level]: [%logger] %minecraftFormatting{%msg{nolookups}}{strip}%n">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="[%d{HH:mm:ss}] [%t/%level]: %minecraftFormatting{%msg{nolookups}}{strip}%n" />
                </LoggerNamePatternSelector>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="1000"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <filters>
                <MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
            </filters>
            <AppenderRef ref="File"/>
            <AppenderRef ref="TerminalConsole" level="info"/>
        </Root>
    </Loggers>
</Configuration>
 
В связи со сложившимся адом в виде log4j эксплоита, пейпер выкатил единственный на данный момент нормальный рабочий фикс для версий 1.8-1.15. Заключается он в создании файла log4j.xml и добавлении в скрипт запуска аргуменат, чтобы логирование шло по образцу оттуда.

log4j.xml с фиксом:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <TerminalConsole name="TerminalConsole">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss} %level]: [%logger] %msg{nolookups}%n%xEx}">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="%highlightError{[%d{HH:mm:ss} %level]: %msg{nolookups}%n%xEx}" />
                </LoggerNamePatternSelector>
            </PatternLayout>
        </TerminalConsole>
        <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level]: [%logger] %msg{nolookups}{strip}%n">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}{strip}%n" />
                </LoggerNamePatternSelector>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="1000"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <filters>
                <MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
            </filters>
            <AppenderRef ref="File"/>
            <AppenderRef ref="TerminalConsole" level="info"/>
        </Root>
    </Loggers>
</Configuration>

Однако возникает проблема. В оригинальном log4j, вшитом в ядро присутствует %minecraftFormatting. Он помогает консоли отображать все необходимые цвета. Как можно увидеть, в новом файле такого аргумента нет, что означает, что ни 1 цвет в консоли отображаться не будет.

Оригинал log4j.xml из pathced.jar:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <TerminalConsole name="TerminalConsole">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss} %level]: [%logger] %minecraftFormatting{%msg}%n%xEx}">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="%highlightError{[%d{HH:mm:ss} %level]: %minecraftFormatting{%msg}%n%xEx}" />
                </LoggerNamePatternSelector>
            </PatternLayout>
        </TerminalConsole>
        <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level]: [%logger] %minecraftFormatting{%msg}{strip}%n">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="[%d{HH:mm:ss}] [%t/%level]: %minecraftFormatting{%msg}{strip}%n" />
                </LoggerNamePatternSelector>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="1000"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <filters>
                <MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
            </filters>
            <AppenderRef ref="File"/>
            <AppenderRef ref="TerminalConsole" level="info"/>
        </Root>
    </Loggers>
</Configuration>

Из этого складывается вопрос. Каким образом возможно вписать %minecraftFormatting в новый log4j.xml, не потеряв фикса и чтобы всё отображалось корректно?

Быть может кто то из вас знает другие фиксы?
Мне кажется стоит дождаться пока все ядра исправят эту уязвимость и не изобретать велосипед.
 
В связи со сложившимся адом в виде log4j эксплоита, пейпер выкатил единственный на данный момент нормальный рабочий фикс для версий 1.8-1.15. Заключается он в создании файла log4j.xml и добавлении в скрипт запуска аргуменат, чтобы логирование шло по образцу оттуда.

log4j.xml с фиксом:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <TerminalConsole name="TerminalConsole">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss} %level]: [%logger] %msg{nolookups}%n%xEx}">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="%highlightError{[%d{HH:mm:ss} %level]: %msg{nolookups}%n%xEx}" />
                </LoggerNamePatternSelector>
            </PatternLayout>
        </TerminalConsole>
        <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level]: [%logger] %msg{nolookups}{strip}%n">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}{strip}%n" />
                </LoggerNamePatternSelector>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="1000"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <filters>
                <MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
            </filters>
            <AppenderRef ref="File"/>
            <AppenderRef ref="TerminalConsole" level="info"/>
        </Root>
    </Loggers>
</Configuration>

Однако возникает проблема. В оригинальном log4j, вшитом в ядро присутствует %minecraftFormatting. Он помогает консоли отображать все необходимые цвета. Как можно увидеть, в новом файле такого аргумента нет, что означает, что ни 1 цвет в консоли отображаться не будет.

Оригинал log4j.xml из pathced.jar:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <TerminalConsole name="TerminalConsole">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss} %level]: [%logger] %minecraftFormatting{%msg}%n%xEx}">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="%highlightError{[%d{HH:mm:ss} %level]: %minecraftFormatting{%msg}%n%xEx}" />
                </LoggerNamePatternSelector>
            </PatternLayout>
        </TerminalConsole>
        <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level]: [%logger] %minecraftFormatting{%msg}{strip}%n">
                    <!-- Log root, Minecraft, Mojang and Bukkit loggers without prefix -->
                    <!-- Disable prefix for various plugins that bypass the plugin logger -->
                    <PatternMatch key=",net.minecraft.,Minecraft,com.mojang.,com.sk89q.,ru.tehkode.,Minecraft.AWE"
                                  pattern="[%d{HH:mm:ss}] [%t/%level]: %minecraftFormatting{%msg}{strip}%n" />
                </LoggerNamePatternSelector>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="1000"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <filters>
                <MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
            </filters>
            <AppenderRef ref="File"/>
            <AppenderRef ref="TerminalConsole" level="info"/>
        </Root>
    </Loggers>
</Configuration>

Из этого складывается вопрос. Каким образом возможно вписать %minecraftFormatting в новый log4j.xml, не потеряв фикса и чтобы всё отображалось корректно?

Быть может кто то из вас знает другие фиксы?
Thermos 1.7.10:
log4j.jpg
Потереть некоторые функции в log4j ? Обновление до самой последний 8 Java не решает проблему, как некоторые советуют.
 
Обновление до самой последний 8 Java не решает проблему, как некоторые советуют.
Проблема заключается не в java, а в ядре, которое использует устаревшую либу.

Потереть некоторые функции в log4j ?
Патчить бумагу я пока еще не научился, а обновлять тамашние либы тем более 👎
 
По сути самый нормальный фикс это обновить библиотеку в ядре, вот и всё.
 
По сути самый нормальный фикс это обновить библиотеку в ядре, вот и всё.
Говорят что и это не спасает. Разраб Papaya говорил, что после обновы либы хак всё также работал
 
Говорят что и это не спасает. Разраб Papaya говорил, что после обновы либы хак всё также работал
Значит жертвуйте цветами в консоле, всё равно консоль не на публику, а чтобы решать самые важные вещи через неё, не особо уж там и надо красоты
 
Значит жертвуйте цветами в консоле, всё равно консоль не на публику, а чтобы решать самые важные вещи через неё, не особо уж там и надо красоты
Проблема не только в отсутствии цветов, а еще и в назойливых § которые мешают спокойно жить.

Но судя по всему стоит помянуть Paper полностью, т.к. поддержка версий ниже 1.16.5 прекращена
 
Проблема заключается не в java, а в ядре, которое использует устаревшую либу.


Патчить бумагу я пока еще не научился, а обновлять тамашние либы тем более 👎
1) Декомпилировать библиотеку log4J через jd-gui
2) Затереть тело некоторых методов\функций, чтобы библиотека просто игнорировала функционал который используется в уязвимости.
Смотреть в:
org.apache.logging.log4j.core.lookup.JndiLookup.java
org.apache.logging.log4j.core.lookup.Interpolator.java
3) Скомпилировать библиотеку.
 
1) Декомпилировать библиотеку log4J через jd-gui
2) Затереть тело некоторых методов\функций, чтобы библиотека просто игнорировала функционал который используется в уязвимости.
Смотреть в:
org.apache.logging.log4j.core.lookup.JndiLookup.java
org.apache.logging.log4j.core.lookup.Interpolator.java
3) Скомпилировать библиотеку.
Яснее не стало веришь нет
 
Яснее не стало веришь нет
https://disk.yandex.ru/d/qdOYuLIGY7ptdQ
Могу еще несколько версий пофиксить.
На клиенте достаточно заменить библиотеку.
На сервере нужно заменить классы в mojang_1.17.1.jar, server.jar или mojang_1.17.1.jar.
Лучше заменить везде где есть:
org.apache.logging.log4j.core.lookup.JndiLookup.class
 
https://disk.yandex.ru/d/qdOYuLIGY7ptdQ
Могу еще несколько версий пофиксить.
На клиенте достаточно заменить библиотеку.
На сервере нужно заменить классы в mojang_1.17.1.jar, server.jar или mojang_1.17.1.jar.
Лучше заменить везде где есть:
org.apache.logging.log4j.core.lookup.JndiLookup.class
Пейпер заменит заменённые ядра на свои
upload_2021-12-13_19-46-24.png
 
Пейпер заменит заменённые ядра на свои
Посмотреть вложение 61221
до.jpg
после.jpg
1. Качаем например библиотеку версии 2.6, добавил на яндекс диск
2. Берем классы:
org.apache.logging.log4j.core.lookup.JndiLookup.class
org.apache.logging.log4j.core.lookup.Interpolator.class
3. Закидываем в server.jar
4. Костыль, но работает!
 
Назад
Верх Низ