Cloudanix VulnDB

CVE-2024-12798

None

CVSS

—

EPSS

0.5%

Published

Dec 19, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A weakness in a Java logging component can let someone who can change the logging setup run commands as the application.

Chainable
Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
Moderate
Impact
Remote Code Execution
Component
Library
Class
Command Injection
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The vulnerability allows arbitrary code execution through malicious Logback configuration when JaninoEventEvaluator is enabled or referenced. An attacker who can modify an existing Logback configuration file, or influence application startup so that Logback loads an attacker-controlled configuration file, can place Janino expressions that execute code in the context of the Java process. Because exploitation requires prior local or configuration-level influence, this is not typically a direct unauthenticated remote exploit, but successful exploitation can let the attacker run commands with the privileges of the affected application. The described vulnerable Logback ranges are 0.1 through 1.3.14 and 1.4.0 through 1.5.12; upgrade to a corrected Logback release where JaninoEventEvaluator behavior is removed or constrained. The supplied package metadata also references Ubuntu 14.04 LTS flashplugin-nonfree fixed in 11.2.202.569ubuntu0.14.04.1, but the vulnerability description is specific to QOS.CH Logback/JaninoEventEvaluator in Java applications, so software composition and package validation should confirm the actual affected component in use.

Why it matters to the business

If exploited, this flaw can turn a logging configuration change into code execution inside a production Java application, potentially causing service disruption, data exposure, credential theft, or lateral movement from the application runtime. The risk is highest where configuration files are writable by non-administrative users, deployment pipelines accept untrusted configuration, environment variables can be influenced before application startup, or containers mount Logback configuration from writable locations. It is not listed in CISA KEV, is not identified as ransomware-used, has no known exploit maturity in the provided data, and has a low EPSS score, which lowers immediate internet-scale exploitation urgency; however, it has been public for 598 days, so affected systems should still be remediated as part of dependency hygiene and configuration hardening.

How an attack unfolds

An attacker first obtains a foothold or limited privilege that allows them to influence the Java application's Logback configuration, such as write access to logback.xml, access to a mounted configuration directory, control of a deployment artifact, or the ability to set a startup variable or JVM property that redirects Logback to an attacker-controlled configuration file. The attacker then adds or references JaninoEventEvaluator content containing a malicious expression that invokes Java runtime functionality such as Runtime.exec or ProcessBuilder. When the application starts, reloads logging configuration, or evaluates the malicious logging rule, Logback processes the evaluator expression and executes code in the Java process. The resulting commands inherit the permissions, network access, secrets, and filesystem visibility of the application account, enabling persistence, credential collection, further payload staging, or operational disruption.

How to fix it

Upgrade vulnerable Logback components to fixed versions newer than the affected ranges: avoid logback-core/logback-classic versions 0.1 through 1.3.14 and 1.4.0 through 1.5.12, and move to a vendor-fixed release such as 1.3.15 or later in the 1.3 line, or 1.5.13 or later in the 1.5 line, according to the application’s supported dependency path. If the package metadata is applicable to the asset being assessed, update Ubuntu 14.04 LTS flashplugin-nonfree to 11.2.202.569ubuntu0.14.04.1 or later. Remove use of JaninoEventEvaluator from Logback configurations where possible. Lock down Logback configuration file permissions so only trusted deployment or administrative identities can write them. Prevent untrusted users from setting application startup environment variables, JVM properties, or container arguments that control logging configuration. In containerized and orchestrated deployments, mount logging configuration read-only and restrict ConfigMap/Secret update rights. As interim mitigation, search for and remove Janino evaluator expressions from Logback configuration, disable dynamic configuration reload where not required, and enforce code review for logging configuration changes.

How to confirm the fix worked

Confirm dependency versions through software composition analysis, build manifests, Maven/Gradle dependency trees, SBOMs, container image scans, and runtime classpath inspection. Validate that no vulnerable logback-core or logback-classic versions in the affected ranges remain packaged in application artifacts, fat JARs, application servers, or container images. Review active Logback configuration files for JaninoEventEvaluator, evaluator expressions, or suspicious Java execution constructs. Verify file permissions on logback.xml, logback-test.xml, and external logging configuration paths are not writable by application users, service accounts, web users, or non-administrative operators. Confirm startup scripts, service units, container specs, and deployment manifests do not allow untrusted override of Logback configuration path settings. After upgrade, restart affected applications and verify the loaded Logback version at runtime where possible.

Typical attack path

  1. Gain limited access to the host, container, deployment pipeline, configuration store, or startup environment for a Java application using vulnerable Logback versions.
  2. Identify where Logback configuration is loaded from, such as logback.xml, logback-test.xml, an external mounted file, or a startup property pointing to a custom configuration file.
  3. Modify the configuration or redirect application startup to an attacker-controlled configuration containing JaninoEventEvaluator and a malicious expression.
  4. Wait for the application to start, restart, reload logging configuration, or process a log event that triggers evaluator execution.
  5. Execute commands as the Java application user and use that access to stage tools, read secrets, pivot, or disrupt the service.

How to detect it

To assess prior exploitation, review source control history, artifact repositories, CI/CD logs, container image layers, configuration management logs, Kubernetes audit logs, host file integrity monitoring, and endpoint telemetry for unauthorized changes to Logback configuration files or startup parameters. Focus on additions of JaninoEventEvaluator, evaluator expressions, Java runtime execution methods, shell commands, or configuration paths redirected to writable locations such as /tmp. On hosts and containers, examine modification times, owners, permissions, and hashes of logback.xml, logback-test.xml, and externally referenced Logback configuration files. Review process telemetry for Java processes spawning shell interpreters or command-line utilities, especially sh, bash, cmd.exe, powershell.exe, curl, wget, nc, python, perl, or chmod. Review application logs around restarts or logging reload events for Logback status messages indicating unexpected configuration files, evaluator setup, Janino compilation, or parsing errors. If EDR is available, hunt for child processes launched by java or the application server immediately after configuration changes or service restarts. There are no named threat actors in the supplied data; detection should therefore focus on behavior and configuration artifacts rather than actor-specific infrastructure.

  • JaninoEventEvaluator
  • ch.qos.logback.classic.boolex.JaninoEventEvaluator
  • <evaluator
  • <expression>
  • java.lang.Runtime
  • Runtime.getRuntime().exec
  • getRuntime().exec
  • java.lang.ProcessBuilder
  • new ProcessBuilder
  • logback.configurationFile=
  • LOGBACK_CONFIGURATION_FILE=
  • logback.xml
  • logback-test.xml
  • /tmp/logback.xml
  • /var/tmp/logback.xml
  • java -> /bin/sh
  • java -> /bin/bash
  • java -> cmd.exe
  • java -> powershell.exe
  • java -> curl
  • java -> wget
  • java -> nc

What your security team should do

  • Inventory Java applications and container images for vulnerable Logback versions, prioritizing internet-facing, privileged, and secret-bearing services.
  • Upgrade Logback to a fixed release and rebuild/redeploy applications rather than only patching the host operating system.
  • Search repositories, deployment artifacts, mounted configuration directories, and running containers for JaninoEventEvaluator and suspicious evaluator expressions.
  • Harden ownership and permissions on Logback configuration files and ensure they are read-only at runtime wherever practical.
  • Restrict who can modify deployment configuration, environment variables, JVM system properties, service unit files, Kubernetes manifests, ConfigMaps, and Secrets used by Java applications.
  • Review recent changes to logging configuration files and deployment manifests for unauthorized edits since the vulnerability became public.
  • Add detection rules for suspicious Logback evaluator usage and Java child-process execution from application processes.
  • Because the provided EPSS is low and there is no KEV listing, treat this as a prioritized dependency/configuration hardening issue rather than an emergency internet-wide exploitation event unless local evidence of exposure or suspicious configuration changes exists.

The record

ACE vulnerability in JaninoEventEvaluator by QOS.CH logback-core upto including version 0.1 to 1.3.14 and 1.4.0 to 1.5.12 in Java applications allows attacker to execute arbitrary code by compromising an existing logback configuration file or by injecting an environment variable before program execution. Malicious logback configuration files can allow the attacker to execute arbitrary code using the JaninoEventEvaluator extension. A successful attack requires the user to have write access to a configuration file. Alternatively, the attacker could inject a malicious environment variable pointing to a malicious configuration file. In both cases, the attack requires existing privilege.

Affected packages

Ecosystem Package Introduced Fixed
Maven ch.qos.logback:logback-core 0 1.3.15
Maven ch.qos.logback:logback-core 1.4.0 1.5.13
Chainguard akhq 0 0.25.1-r2
Chainguard apache-nifi 0 2.1.0-r0
Chainguard apache-nifi-compat 0 2.1.0-r0
Chainguard apache-nifi-toolkit 0 2.1.0-r0
Chainguard cassandra-4.0-compat 0 4.0.19-r1
Chainguard cassandra-4.0-iamguarded-compat 0 4.0.19-r2
Chainguard cassandra-4.1-compat 0 4.1.10-r1
Chainguard cassandra-4.1-iamguarded-compat 0 4.1.10-r2
Chainguard cassandra-5.0-compat 0 5.0.6-r0
Chainguard cassandra-5.0-entrypoint-compat 0 5.0.6-r0
Chainguard cassandra-5.0-iamguarded-compat 0 5.0.6-r2
Chainguard cassandra-fips-4.0-compat 0 4.0.15-r6
Chainguard cassandra-fips-4.1-compat 0 4.1.7-r6
Chainguard cassandra-fips-5.0-compat 0 5.0.3-r10
Chainguard cassandra-reaper 0 3.7.1-r0
Chainguard cassandra-reaper-jre-bcfips 0 3.7.1-r1
Chainguard cqlsh-5.0 0 5.0.6-r0
Chainguard cqlsh-fips-5.0 0 5.0.3-r10
Chainguard dependency-track 0 4.13.5-r0
Chainguard dependency-track-bundled 0 4.13.5-r0
Chainguard kserve-modelmesh 0 0.12.0-r13
Chainguard kserve-modelmesh 0 0.12.0-r6
Chainguard kserve-modelmesh-compat 0 0.12.0-r13
Chainguard kserve-modelmesh-compat 0 0.12.0-r6
Chainguard localstack 0 4.10.0-r0
Chainguard localstack-compat 0 4.10.0-r0
Chainguard management-api-for-apache-cassandra-4.0 0 0.1.90-r1
Chainguard management-api-for-apache-cassandra-4.0 0 0.1.96-r1
Chainguard management-api-for-apache-cassandra-4.0-compat 0 0.1.90-r1
Chainguard management-api-for-apache-cassandra-4.0-compat 0 0.1.96-r1
Chainguard management-api-for-apache-cassandra-4.1 0 0.1.96-r1
Chainguard management-api-for-apache-cassandra-4.1-compat 0 0.1.96-r1
Chainguard management-api-for-apache-cassandra-5.0 0 0.1.96-r1
Chainguard management-api-for-apache-cassandra-5.0-compat 0 0.1.96-r1
Chainguard seata 0 2.5.0-r3
Chainguard seata-namingserver-oci-entrypoint 0 2.5.0-r3
Chainguard seata-openjdk-17-compat 0 2.5.0-r3
Chainguard seata-openjdk-21-compat 0 2.5.0-r3
Chainguard seata-openjdk-8-compat 0 2.5.0-r3
Chainguard seata-server-oci-entrypoint 0 2.5.0-r3
Chainguard sonar-scanner-cli 0 6.2.1.4610-r1
Chainguard sonar-scanner-cli-compat 0 6.2.1.4610-r1
Chainguard sonarqube 0 25.6.0.109173-r0
Chainguard sonarqube-10 0 25.1.0.102122-r0
Chainguard sonarqube-10-docker-compat 0 25.1.0.102122-r0
Chainguard sonarqube-10-scripts 0 25.1.0.102122-r0
Chainguard sonarqube-docker-compat 0 25.6.0.109173-r0
Chainguard sonarqube-scripts 0 25.6.0.109173-r0
Chainguard spark-3.5 0 3.5.7-r2
Chainguard spark-3.5-scala-2.12 0 3.5.7-r2
Chainguard spark-3.5-scala-2.12-compat 0 3.5.7-r2
Chainguard spark-3.5-scala-2.12-iamguarded-compat 0 3.5.7-r2
Chainguard spark-3.5-scala-2.13 0 3.5.7-r2
Chainguard spark-3.5-scala-2.13-compat 0 3.5.7-r2
Chainguard tez 0 0.10.4-r6
Chainguard thingsboard 0 3.9-r0
Chainguard thingsboard-tb-js-executor 0 3.9-r0
Chainguard thingsboard-tb-mqtt-transport 0 3.9-r0
Chainguard thingsboard-tb-node 0 3.9-r0
Chainguard thingsboard-tb-web-ui 0 3.9-r0
Chainguard trino 0 468-r1
Chainguard trino-config 0 468-r1
Chainguard trino-oci-entrypoint 0 468-r1
Chainguard trino-plugin-accumulo 0 468-r1
Chainguard trino-plugin-ai-functions 0 468-r1
Chainguard trino-plugin-atop 0 468-r1
Chainguard trino-plugin-bigquery 0 468-r1
Chainguard trino-plugin-blackhole 0 468-r1
Chainguard trino-plugin-cassandra 0 468-r1
Chainguard trino-plugin-clickhouse 0 468-r1
Chainguard trino-plugin-delta-lake 0 468-r1
Chainguard trino-plugin-druid 0 468-r1
Chainguard trino-plugin-duckdb 0 468-r1
Chainguard trino-plugin-elasticsearch 0 468-r1
Chainguard trino-plugin-example-http 0 468-r1
Chainguard trino-plugin-exasol 0 468-r1
Chainguard trino-plugin-exchange-filesystem 0 468-r1
Chainguard trino-plugin-exchange-hdfs 0 468-r1
Chainguard trino-plugin-faker 0 468-r1
Chainguard trino-plugin-functions-python 0 468-r1
Chainguard trino-plugin-geospatial 0 468-r1
Chainguard trino-plugin-google-sheets 0 468-r1
Chainguard trino-plugin-hive 0 468-r1
Chainguard trino-plugin-http-event-listener 0 468-r1
Chainguard trino-plugin-http-server-event-listener 0 468-r1
Chainguard trino-plugin-hudi 0 468-r1
Chainguard trino-plugin-iceberg 0 468-r1
Chainguard trino-plugin-ignite 0 468-r1
Chainguard trino-plugin-jmx 0 468-r1
Chainguard trino-plugin-kafka 0 468-r1
Chainguard trino-plugin-kafka-event-listener 0 468-r1
Chainguard trino-plugin-kinesis 0 468-r1
Chainguard trino-plugin-kudu 0 468-r1
Chainguard trino-plugin-lakehouse 0 468-r1
Chainguard trino-plugin-ldap-group-provider 0 468-r1
Chainguard trino-plugin-local-file 0 468-r1
Chainguard trino-plugin-loki 0 468-r1
Chainguard trino-plugin-mariadb 0 468-r1
Chainguard trino-plugin-memory 0 468-r1
Chainguard trino-plugin-ml 0 468-r1
Chainguard trino-plugin-mongodb 0 468-r1
Chainguard trino-plugin-mysql 0 468-r1
Chainguard trino-plugin-mysql-event-listener 0 468-r1
Chainguard trino-plugin-opa 0 468-r1
Chainguard trino-plugin-openlineage 0 468-r1
Chainguard trino-plugin-opensearch 0 468-r1
Chainguard trino-plugin-oracle 0 468-r1
Chainguard trino-plugin-password-authenticators 0 468-r1
Chainguard trino-plugin-phoenix5 0 468-r1
Chainguard trino-plugin-pinot 0 468-r1
Chainguard trino-plugin-postgresql 0 468-r1
Chainguard trino-plugin-prometheus 0 468-r1
Chainguard trino-plugin-ranger 0 468-r1
Chainguard trino-plugin-raptor-legacy 0 468-r1
Chainguard trino-plugin-redis 0 468-r1
Chainguard trino-plugin-redshift 0 468-r1
Chainguard trino-plugin-resource-group-managers 0 468-r1
Chainguard trino-plugin-session-property-managers 0 468-r1
Chainguard trino-plugin-singlestore 0 468-r1
Chainguard trino-plugin-snowflake 0 468-r1
Chainguard trino-plugin-spooling-filesystem 0 468-r1
Chainguard trino-plugin-sqlserver 0 468-r1
Chainguard trino-plugin-teradata-functions 0 468-r1
Chainguard trino-plugin-thrift 0 468-r1
Chainguard trino-plugin-tpcds 0 468-r1
Chainguard trino-plugin-tpch 0 468-r1
Chainguard trino-plugin-vertica 0 468-r1
Chainguard zookeeper-3.8 0 3.8.5-r0
Chainguard zookeeper-3.8 0 3.8.5.0-r2
Chainguard zookeeper-3.8-iamguarded-compat 0 3.8.5.0-r2
Chainguard zookeeper-3.9 0 3.9.4.2-r4
Chainguard zookeeper-3.9-iamguarded-compat 0 3.9.4.2-r4
Chainguard zookeeper-custom 0 3.9.4-r2
Chainguard zookeeper-custom-oci-entrypoint 0 3.9.4-r2
Chainguard zookeeper-fips-3.8 0 3.8.5-r1
Chainguard zookeeper-fips-3.8 0 3.8.5.0-r2
Chainguard zookeeper-fips-3.8-compat 0 3.8.4-r0
Chainguard zookeeper-fips-3.9 0 3.9.4.2-r2
Debian:11 logback 0 No fix
Debian:12 logback 0 No fix
Debian:13 logback 0 No fix
Ubuntu:20.04:LTS logback 0 No fix
Ubuntu:22.04:LTS logback 0 No fix
Ubuntu:24.04:LTS logback 0 No fix
Ubuntu:24.10 logback 0 No fix
Ubuntu:25.04 logback 0 No fix
Ubuntu:Pro:16.04:LTS logback 0 No fix
Ubuntu:Pro:18.04:LTS logback 0 No fix
Ubuntu:Pro:20.04:LTS logback 0 No fix
Wolfi akhq 0 0.25.1-r2
Wolfi apache-nifi 0 2.1.0-r0
Wolfi apache-nifi-compat 0 2.1.0-r0
Wolfi apache-nifi-toolkit 0 2.1.0-r0
Wolfi cassandra-4.1-compat 0 4.1.10-r1
Wolfi cassandra-5.0-compat 0 5.0.6-r0
Wolfi cassandra-5.0-entrypoint-compat 0 5.0.6-r0
Wolfi cassandra-5.0-iamguarded-compat 0 5.0.6-r2
Wolfi cassandra-reaper 0 3.7.1-r0
Wolfi cqlsh-5.0 0 5.0.6-r0
Wolfi dependency-track 0 4.13.5-r0
Wolfi dependency-track-bundled 0 4.13.5-r0
Wolfi kserve-modelmesh 0 0.12.0-r13
Wolfi kserve-modelmesh 0 0.12.0-r6
Wolfi kserve-modelmesh-compat 0 0.12.0-r13
Wolfi kserve-modelmesh-compat 0 0.12.0-r6
Wolfi management-api-for-apache-cassandra-4.1 0 0.1.96-r1
Wolfi management-api-for-apache-cassandra-4.1-compat 0 0.1.96-r1
Wolfi management-api-for-apache-cassandra-5.0 0 0.1.96-r1
Wolfi management-api-for-apache-cassandra-5.0-compat 0 0.1.96-r1
Wolfi sonar-scanner-cli 0 6.2.1.4610-r1
Wolfi sonar-scanner-cli-compat 0 6.2.1.4610-r1
Wolfi sonarqube 0 25.6.0.109173-r0
Wolfi sonarqube-10 0 25.1.0.102122-r0
Wolfi sonarqube-10-docker-compat 0 25.1.0.102122-r0
Wolfi sonarqube-10-scripts 0 25.1.0.102122-r0
Wolfi sonarqube-docker-compat 0 25.6.0.109173-r0
Wolfi sonarqube-scripts 0 25.6.0.109173-r0
Wolfi spark-3.5 0 3.5.7-r2
Wolfi spark-3.5-scala-2.12 0 3.5.7-r2
Wolfi spark-3.5-scala-2.12-compat 0 3.5.7-r2
Wolfi spark-3.5-scala-2.12-iamguarded-compat 0 3.5.7-r2
Wolfi spark-3.5-scala-2.13 0 3.5.7-r2
Wolfi spark-3.5-scala-2.13-compat 0 3.5.7-r2
Wolfi tez 0 0.10.4-r6
Wolfi thingsboard 0 3.9-r0
Wolfi thingsboard-tb-js-executor 0 3.9-r0
Wolfi thingsboard-tb-mqtt-transport 0 3.9-r0
Wolfi thingsboard-tb-node 0 3.9-r0
Wolfi thingsboard-tb-web-ui 0 3.9-r0
Wolfi trino 0 468-r1
Wolfi trino-config 0 468-r1
Wolfi trino-oci-entrypoint 0 468-r1
Wolfi trino-plugin-accumulo 0 468-r1
Wolfi trino-plugin-ai-functions 0 468-r1
Wolfi trino-plugin-atop 0 468-r1
Wolfi trino-plugin-bigquery 0 468-r1
Wolfi trino-plugin-blackhole 0 468-r1
Wolfi trino-plugin-cassandra 0 468-r1

Related vulnerabilities