diff --git a/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java b/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java index acb37dcb9..0b28872c5 100644 --- a/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java +++ b/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java @@ -17,11 +17,7 @@ public class HttpRequest { public static Map getRequest(Object req) { HttpServletRequest request = (HttpServletRequest) req; - try { - request.setCharacterEncoding("UTF-8"); - } catch (Throwable ignored) { - } Map requestMeta = new HashMap(16); requestMeta.put("contextPath", request.getContextPath()); requestMeta.put("servletPath", request.getServletPath()); @@ -44,7 +40,7 @@ public static Map getRequest(Object req) { private static Map getHeaders(HttpServletRequest request) { Enumeration headerNames = request.getHeaderNames(); - Map headers = new HashMap<>(); + Map headers = new HashMap<>(32); while (headerNames.hasMoreElements()) { String name = (String) headerNames.nextElement(); String value = request.getHeader(name); @@ -78,6 +74,8 @@ private static String getPostBody(HttpServletRequest request) { } return postBody.toString(); } else { + // fixme: 此处导致中文乱码 + request.setCharacterEncoding("UTF-8"); Enumeration parameterNames = request.getParameterNames(); String param; boolean first = true; diff --git a/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java b/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java index 8ff04c730..92c4e49ac 100644 --- a/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java +++ b/dongtai-jakarta-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java @@ -18,7 +18,7 @@ public static Map getResponse(Object res) { HttpServletResponse response = (HttpServletResponse) res; Map responseMeta = new HashMap(2); responseMeta.put("headers", getHeaders(response)); - responseMeta.put("body", getBody(response)); + responseMeta.put("body", getResponseData(response)); return responseMeta; } @@ -48,6 +48,25 @@ private static String getHeaders(HttpServletResponse response) { return header.toString(); } + private static byte[] getResponseData(HttpServletResponse response) { + if (response instanceof ResponseWrapper) { + try { + byte[] responseData = ((ResponseWrapper) response).getResponseData(); + if (responseBodyLength == null || responseBodyLength > responseData.length) { + return responseData; + } + + byte[] copiedData = new byte[responseBodyLength]; + System.arraycopy(responseData, 0, copiedData, 0, responseBodyLength); + return copiedData; + } catch (Exception ignored) { + + } + } + return new byte[0]; + } + + /** * 获取响应体 * @@ -70,20 +89,21 @@ private static String getBody(HttpServletResponse response) { } } try { - if (responseBodyLength == null){ + if (responseBodyLength == null) { responseStr = new String(responseData, charSet); - }else { + } else { responseStr = new String(responseData, 0, responseBodyLength, charSet); } } catch (UnsupportedEncodingException e) { - if (responseBodyLength == null){ + if (responseBodyLength == null) { responseStr = new String(responseData); - }else { + } else { responseStr = new String(responseData, 0, responseBodyLength); } } - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } return responseStr; diff --git a/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java b/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java index b003e08db..34628bacd 100644 --- a/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java +++ b/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpRequest.java @@ -17,11 +17,6 @@ public class HttpRequest { public static Map getRequest(Object req) { HttpServletRequest request = (HttpServletRequest) req; - try { - request.setCharacterEncoding("UTF-8"); - } catch (Throwable ignored) { - - } Map requestMeta = new HashMap(16); requestMeta.put("contextPath", request.getContextPath()); requestMeta.put("servletPath", request.getServletPath()); @@ -78,6 +73,7 @@ private static String getPostBody(HttpServletRequest request) { } return postBody.toString(); } else { + request.setCharacterEncoding("UTF-8"); Enumeration parameterNames = request.getParameterNames(); String param; boolean first = true; diff --git a/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java b/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java index 0ed240310..0b8cbfd7a 100644 --- a/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java +++ b/dongtai-servlet-api/src/main/java/cn/huoxian/iast/api/HttpResponse.java @@ -18,7 +18,7 @@ public static Map getResponse(Object res) { HttpServletResponse response = (HttpServletResponse) res; Map responseMeta = new HashMap(2); responseMeta.put("headers", getHeaders(response)); - responseMeta.put("body", getBody(response)); + responseMeta.put("body", getResponseData(response)); return responseMeta; } @@ -48,6 +48,24 @@ private static String getHeaders(HttpServletResponse response) { return header.toString(); } + private static byte[] getResponseData(HttpServletResponse response) { + if (response instanceof ResponseWrapper) { + try { + byte[] responseData = ((ResponseWrapper) response).getResponseData(); + if (responseBodyLength == null || responseBodyLength > responseData.length) { + return responseData; + } + + byte[] copiedData = new byte[responseBodyLength]; + System.arraycopy(responseData, 0, copiedData, 0, responseBodyLength); + return copiedData; + } catch (Exception ignored) { + + } + } + return new byte[0]; + } + /** * 获取响应体 * @@ -70,20 +88,21 @@ private static String getBody(HttpServletResponse response) { } } try { - if (responseBodyLength == null){ + if (responseBodyLength == null) { responseStr = new String(responseData, charSet); - }else { + } else { responseStr = new String(responseData, 0, responseBodyLength, charSet); } } catch (UnsupportedEncodingException e) { - if (responseBodyLength == null){ + if (responseBodyLength == null) { responseStr = new String(responseData); - }else { + } else { responseStr = new String(responseData, 0, responseBodyLength); } } - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } return responseStr; diff --git a/iast-agent/src/main/java/com/secnium/iast/agent/IastProperties.java b/iast-agent/src/main/java/com/secnium/iast/agent/IastProperties.java index 00c937484..602df1247 100644 --- a/iast-agent/src/main/java/com/secnium/iast/agent/IastProperties.java +++ b/iast-agent/src/main/java/com/secnium/iast/agent/IastProperties.java @@ -100,7 +100,7 @@ public String getPropertiesFilePath() { public String getIastServerToken() { if (null == iastServerToken) { - iastServerToken = cfg.getProperty("iast.server.token"); + iastServerToken = System.getProperty("dongtai.server.token", cfg.getProperty("iast.server.token")); } return iastServerToken; } @@ -108,7 +108,7 @@ public String getIastServerToken() { public String getBaseUrl() { if (null == serverUrl) { - serverUrl = System.getProperty("iast.server.url", cfg.getProperty("iast.server.url")); + serverUrl = System.getProperty("dongtai.server.url", cfg.getProperty("iast.server.url")); } return serverUrl; } @@ -123,16 +123,21 @@ public String getEngineName() { public String getProjectName() { if (null == projectName) { projectName = System.getProperty( - "project.name", + "dongtai.app.name", System.getProperty( "mse.appName", System.getProperty( "arms.appName", System.getProperty( "service.name", - cfg.getProperty("project.name", "Demo Project") + System.getProperty("app.name", + System.getProperty("projgect.name", + cfg.getProperty("project.name", "Demo Project")) + ) + ) - )) + ) + ) ); } return projectName; diff --git a/iast-core/src/main/java/com/secnium/iast/core/EngineManager.java b/iast-core/src/main/java/com/secnium/iast/core/EngineManager.java index 6ed72e8a8..93a02a6c2 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/EngineManager.java +++ b/iast-core/src/main/java/com/secnium/iast/core/EngineManager.java @@ -13,7 +13,6 @@ import com.secnium.iast.core.threadlocalpool.RequestContext; import com.secnium.iast.core.util.LogUtils; import java.io.File; -import java.lang.instrument.Instrumentation; import java.lang.reflect.Method; import java.net.URL; import java.util.HashMap; @@ -29,14 +28,12 @@ */ public class EngineManager { - private static final Logger logger = LogUtils.getLogger(EngineManager.class); private static EngineManager instance; private final PropertyUtils cfg; public static Integer AGENT_ID; public static String AGENT_PATH; private static final BooleanThreadLocal AGENT_STATUS = new BooleanThreadLocal(false); - private static final BooleanThreadLocal TRANSFORM_STATE = new BooleanThreadLocal(false); private static final BooleanThreadLocal ENTER_HTTP_ENTRYPOINT = new BooleanThreadLocal(false); public static final RequestContext REQUEST_CONTEXT = new RequestContext(); public static final IastTrackMap TRACK_MAP = new IastTrackMap(); @@ -58,14 +55,6 @@ public static void agentStarted() { AGENT_STATUS.set(true); } - public static void enterTransform() { - TRANSFORM_STATE.set(true); - } - - public static void leaveTransform() { - TRANSFORM_STATE.set(false); - } - public static void turnOnLingzhi() { LINGZHI_RUNNING.set(true); } @@ -88,12 +77,12 @@ public static EngineManager getInstance() { return instance; } - public static EngineManager getInstance(PropertyUtils cfg, Instrumentation inst) { + public static EngineManager getInstance(PropertyUtils cfg) { if (instance == null) { - if (cfg == null || inst == null) { + if (cfg == null) { return null; } - instance = new EngineManager(cfg, inst); + instance = new EngineManager(cfg); } return instance; } @@ -102,8 +91,7 @@ public static void setInstance() { instance = null; } - private EngineManager(final PropertyUtils cfg, - final Instrumentation inst) { + private EngineManager(final PropertyUtils cfg) { this.cfg = cfg; } diff --git a/iast-core/src/main/java/com/secnium/iast/core/PropertyUtils.java b/iast-core/src/main/java/com/secnium/iast/core/PropertyUtils.java index 4dae425fd..d4d737f98 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/PropertyUtils.java +++ b/iast-core/src/main/java/com/secnium/iast/core/PropertyUtils.java @@ -94,7 +94,7 @@ public String getIastResponseFlagValue() { public String getIastServerToken() { if (null == iastServerToken) { - iastServerToken = cfg.getProperty("iast.server.token"); + iastServerToken = System.getProperty("dongtai.server.token", cfg.getProperty("dongtai.server.token")); } return iastServerToken; } @@ -202,7 +202,7 @@ public long getHeartBeatInterval() { */ public String getBaseUrl() { if (null == serverUrl) { - serverUrl = System.getProperty("iast.server.url", cfg.getProperty("iast.server.url")); + serverUrl = System.getProperty("dongtai.server.url", cfg.getProperty("dongtai.server.url")); } return serverUrl; } diff --git a/iast-core/src/main/java/com/secnium/iast/core/engines/impl/SandboxEngine.java b/iast-core/src/main/java/com/secnium/iast/core/engines/impl/SandboxEngine.java index ffca69b18..e6051ebfc 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/engines/impl/SandboxEngine.java +++ b/iast-core/src/main/java/com/secnium/iast/core/engines/impl/SandboxEngine.java @@ -3,23 +3,21 @@ import com.secnium.iast.core.EngineManager; import com.secnium.iast.core.PropertyUtils; import com.secnium.iast.core.engines.IEngine; -import org.slf4j.Logger; import com.secnium.iast.core.util.LogUtils; - import java.lang.instrument.Instrumentation; +import org.slf4j.Logger; /** * @author dongzhiyong@huoxian.cn */ public class SandboxEngine implements IEngine { + private final Logger logger = LogUtils.getLogger(getClass()); - private Instrumentation inst; private PropertyUtils cfg; @Override public void init(PropertyUtils cfg, Instrumentation inst) { this.cfg = cfg; - this.inst = inst; } @Override @@ -27,7 +25,7 @@ public void start() { if (logger.isDebugEnabled()) { logger.debug("initing global control instance"); } - EngineManager.getInstance(cfg, inst); + EngineManager.getInstance(cfg); if (logger.isDebugEnabled()) { logger.debug("inited global control instance"); } diff --git a/iast-core/src/main/java/com/secnium/iast/core/enhance/IastClassFileTransformer.java b/iast-core/src/main/java/com/secnium/iast/core/enhance/IastClassFileTransformer.java index 09b987b0d..c928cab20 100755 --- a/iast-core/src/main/java/com/secnium/iast/core/enhance/IastClassFileTransformer.java +++ b/iast-core/src/main/java/com/secnium/iast/core/enhance/IastClassFileTransformer.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.Instrumentation; +import java.net.URL; import java.security.CodeSource; import java.security.ProtectionDomain; import java.util.HashSet; @@ -67,7 +68,11 @@ public byte[] transform(final ClassLoader loader, final Class classBeingRedefined, final ProtectionDomain protectionDomain, final byte[] srcByteCodeArray) { - EngineManager.enterTransform(); + // if className is null, then, skip + if (internalClassName == null) { + return null; + } + boolean isRunning = EngineManager.isLingzhiRunning(); if (isRunning) { EngineManager.turnOffLingzhi(); @@ -80,10 +85,11 @@ public byte[] transform(final ClassLoader loader, } try { - if (loader != null) { - final CodeSource codeSource = (protectionDomain != null) ? protectionDomain.getCodeSource() : null; - if (codeSource != null && codeSource.getLocation() != null) { - ScaScanner.scanForSCA(codeSource.getLocation().getFile(), internalClassName); + if (loader != null && protectionDomain != null) { + final CodeSource codeSource = protectionDomain.getCodeSource(); + URL location = codeSource.getLocation(); + if (location != null) { + ScaScanner.scanForSCA(location.getFile(), internalClassName); } } @@ -129,10 +135,9 @@ public byte[] transform(final ClassLoader loader, if (isRunning) { EngineManager.turnOnLingzhi(); } - EngineManager.leaveTransform(); } - return srcByteCodeArray; + return null; } /** diff --git a/iast-core/src/main/java/com/secnium/iast/core/enhance/plugins/core/DispatchClassPlugin.java b/iast-core/src/main/java/com/secnium/iast/core/enhance/plugins/core/DispatchClassPlugin.java index 14a2f2fa2..18b04b9e9 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/enhance/plugins/core/DispatchClassPlugin.java +++ b/iast-core/src/main/java/com/secnium/iast/core/enhance/plugins/core/DispatchClassPlugin.java @@ -14,7 +14,6 @@ import com.secnium.iast.core.handler.vulscan.VulnType; import com.secnium.iast.core.util.AsmUtils; import com.secnium.iast.core.util.LogUtils; -import com.secnium.iast.core.util.matcher.ConfigMatcher; import com.secnium.iast.core.util.matcher.Method; import java.lang.reflect.Modifier; import java.util.Arrays; @@ -84,8 +83,9 @@ public class ClassVisit extends AbstractClassVisitor { ClassVisit(ClassVisitor classVisitor, IastContext context) { super(classVisitor, context); - String className = context.getClassName(); - this.isAppClass = ConfigMatcher.isAppClass(className); + this.isAppClass = false; + //String className = context.getClassName(); + //this.isAppClass = ConfigMatcher.isAppClass(className); } @Override diff --git a/iast-core/src/main/java/com/secnium/iast/core/enhance/sca/ScaScanner.java b/iast-core/src/main/java/com/secnium/iast/core/enhance/sca/ScaScanner.java index c644ab902..e5af5da3e 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/enhance/sca/ScaScanner.java +++ b/iast-core/src/main/java/com/secnium/iast/core/enhance/sca/ScaScanner.java @@ -42,8 +42,7 @@ private static boolean isLocalMavenRepo(String packageFile) { * @param internalClassName */ public static void scanForSCA(String packageFile, String internalClassName) { - if (internalClassName == null - || internalClassName.startsWith("com/secnium/iast/") + if (internalClassName.startsWith("com/secnium/iast/") || internalClassName.startsWith("java/lang/iast/") || internalClassName.startsWith("cn/huoxian/iast/") || internalClassName.startsWith("com/sun/") diff --git a/iast-core/src/main/java/com/secnium/iast/core/handler/graphy/GraphBuilder.java b/iast-core/src/main/java/com/secnium/iast/core/handler/graphy/GraphBuilder.java index efa5d9d17..41eaad2e0 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/handler/graphy/GraphBuilder.java +++ b/iast-core/src/main/java/com/secnium/iast/core/handler/graphy/GraphBuilder.java @@ -90,6 +90,7 @@ public static String convertToReport(List nodeList, Object response) JSONArray methodPool = new JSONArray(); report.put(ReportConstant.REPORT_KEY, ReportConstant.REPORT_VULN_SAAS_POOL); + report.put(ReportConstant.REPORT_TYPE, "v2"); report.put(ReportConstant.REPORT_VALUE_KEY, detail); detail.put(ReportConstant.AGENT_ID, EngineManager.getAgentId()); @@ -103,11 +104,13 @@ public static String convertToReport(List nodeList, Object response) detail.put(ReportConstant.QUERY_STRING, requestMeta.get("queryString")); detail.put(ReportConstant.REQ_HEADER, AbstractNormalVulScan.getEncodedHeader((Map) requestMeta.get("headers"))); + // 设置请求体 detail.put(ReportConstant.REQ_BODY, requestMeta.get("body")); detail.put(ReportConstant.RES_HEADER, responseMeta == null ? "" : Base64Encoder.encodeBase64String(responseMeta.get("headers").toString().getBytes()) .replaceAll("\n", "")); - detail.put(ReportConstant.RES_BODY, responseMeta == null ? "" : responseMeta.get("body")); + detail.put(ReportConstant.RES_BODY, responseMeta == null ? "" : Base64Encoder.encodeBase64String( + (byte[]) responseMeta.get("body"))); detail.put(ReportConstant.CONTEXT_PATH, requestMeta.get("contextPath")); detail.put(ReportConstant.REPLAY_REQUEST, requestMeta.get("replay-request")); diff --git a/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/ReportConstant.java b/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/ReportConstant.java index d36348a38..77cd88306 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/ReportConstant.java +++ b/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/ReportConstant.java @@ -8,6 +8,7 @@ public class ReportConstant { public static final String REPORT_KEY = "type"; + public static final String REPORT_TYPE = "version"; public static final int REPORT_HEART_BEAT = 0x01; public static final int REPORT_SCA = 0x11; public static final int REPORT_SCA_BATCH = 0x12; diff --git a/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/normal/AbstractNormalVulScan.java b/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/normal/AbstractNormalVulScan.java index e141af39e..29ba2623c 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/normal/AbstractNormalVulScan.java +++ b/iast-core/src/main/java/com/secnium/iast/core/handler/vulscan/normal/AbstractNormalVulScan.java @@ -17,8 +17,8 @@ public abstract class AbstractNormalVulScan implements IVulScan { /** - * @param stacks - * @param vulType + * @param stacks Method Call Stack + * @param vulType vulnerability */ public void sendReport(StackTraceElement[] stacks, String vulType) { Map requestMeta = EngineManager.REQUEST_CONTEXT.get(); diff --git a/iast-core/src/main/java/com/secnium/iast/core/util/matcher/ConfigMatcher.java b/iast-core/src/main/java/com/secnium/iast/core/util/matcher/ConfigMatcher.java index 75e3717d5..589a0da5c 100644 --- a/iast-core/src/main/java/com/secnium/iast/core/util/matcher/ConfigMatcher.java +++ b/iast-core/src/main/java/com/secnium/iast/core/util/matcher/ConfigMatcher.java @@ -4,13 +4,11 @@ import com.secnium.iast.core.report.ErrorLogReport; import com.secnium.iast.core.util.ConfigUtils; import com.secnium.iast.core.util.LogUtils; - +import com.secnium.iast.core.util.ThrowableUtils; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; - -import com.secnium.iast.core.util.ThrowableUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -72,7 +70,7 @@ public static boolean getBlackUrl(Map request) { continue; } } - }catch (Exception e){ + } catch (Exception e) { logger.info("dongtai getBalckurl error"); ErrorLogReport.sendErrorLog(ThrowableUtils.getStackTrace(e)); } @@ -103,17 +101,8 @@ public static PropagatorType blackFunc(final String signature) { * @return 是否支持hook */ public static boolean isHookPoint(String className, ClassLoader loader) { - if (className == null) { - return false; - } - - // todo: 计算startsWith、contains与正则匹配的时间损耗 - if (className.startsWith("com/secnium/iast/") - || className.startsWith("java/lang/iast/") - || className.startsWith("cn/huoxian/iast/") - ) { - logger.trace("ignore transform {} in loader={}. Reason: classname is startswith com/secnium/iast/", - className, loader); + if (ConfigMatcher.inHookBlacklist(className)) { + logger.trace("ignore transform {} in loader={}. reason: class is in blacklist", className, loader); return false; } @@ -134,10 +123,16 @@ public static boolean isHookPoint(String className, ClassLoader loader) { return false; } - if (ConfigMatcher.inHookBlacklist(className)) { - logger.trace("ignore transform {} in loader={}. reason: class is in blacklist", className, loader); + // todo: 计算startsWith、contains与正则匹配的时间损耗 + if (className.startsWith("com/secnium/iast/") + || className.startsWith("java/lang/iast/") + || className.startsWith("cn/huoxian/iast/") + ) { + logger.trace("ignore transform {} in loader={}. Reason: classname is startswith com/secnium/iast/", + className, loader); return false; } + return true; } @@ -149,7 +144,7 @@ public static boolean isAppClass(String className) { final PropertyUtils cfg = PropertyUtils.getInstance(); String blackListFuncFile = cfg.getBlackFunctionFilePath(); String blackList = cfg.getBlackClassFilePath(); - String blackUrl = cfg.getBlackUrl(); + String blackUrl = cfg.getBlackUrl(); String disableExtList = cfg.getBlackExtFilePath(); HashSet[] items = ConfigUtils.loadConfigFromFile(blackListFuncFile); @@ -157,7 +152,7 @@ public static boolean isAppClass(String className) { END_WITH_BLACKS = items[2].toArray(new String[0]); START_WITH_BLACKS = items[1].toArray(new String[0]); - BLACK_URL=ConfigUtils.loadConfigFromFileByLine(blackUrl); + BLACK_URL = ConfigUtils.loadConfigFromFileByLine(blackUrl); items = ConfigUtils.loadConfigFromFile(blackList); START_ARRAY = items[1].toArray(new String[0]); diff --git a/iast-core/src/main/resources/com.secnium.iast.resources/blacklist.txt b/iast-core/src/main/resources/com.secnium.iast.resources/blacklist.txt index 998f079ae..18c06e88c 100644 --- a/iast-core/src/main/resources/com.secnium.iast.resources/blacklist.txt +++ b/iast-core/src/main/resources/com.secnium.iast.resources/blacklist.txt @@ -23812,7 +23812,6 @@ java/lang/management/* java/lang/ref/* java/lang/reflect/* java/lang/AbstractMethodError -java/lang/AbstractStringBuilder java/lang/annotation/Documented java/lang/ApplicationShutdownHooks java/lang/ApplicationShutdownHooks$1 @@ -34566,6 +34565,7 @@ org/apache/logging/log4j/Marker org/apache/logging/log4j/MarkerManager org/apache/logging/log4j/MarkerManager$Log4jMarker org/apache/logging/log4j/ThreadContext$ContextStack +org/apache/logging/log4j/ThreadContext$EmptyThreadContextStack org/apache/logging/log4j/core/AbstractLifeCycle org/apache/logging/log4j/core/Appender org/apache/logging/log4j/core/ErrorHandler @@ -34751,7 +34751,6 @@ org/apache/logging/log4j/core/lookup/EnvironmentLookup org/apache/logging/log4j/core/lookup/Interpolator org/apache/logging/log4j/core/lookup/JavaLookup org/apache/logging/log4j/core/lookup/JmxRuntimeInputArgumentsLookup -org/apache/logging/log4j/core/lookup/JndiLookup org/apache/logging/log4j/core/lookup/Log4jLookup org/apache/logging/log4j/core/lookup/MainMapLookup org/apache/logging/log4j/core/lookup/MapLookup