This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-site.git


The following commit(s) were added to refs/heads/main by this push:
     new 8a137566 Add threat model sections
8a137566 is described below

commit 8a137566051fc30d695f70a2794ff841721ac3ff
Author: Volkan Yazıcı <[email protected]>
AuthorDate: Fri Apr 19 09:57:42 2024 +0200

    Add threat model sections
---
 _threat-model-common.adoc | 38 +++++++++++++++++++++++++
 _threat-model-log4j.adoc  | 70 +++++++++++++++++++++++++++++++++++++++++++++++
 security.adoc             |  6 +++-
 3 files changed, 113 insertions(+), 1 deletion(-)

diff --git a/_threat-model-common.adoc b/_threat-model-common.adoc
new file mode 100644
index 00000000..f7bf1c8a
--- /dev/null
+++ b/_threat-model-common.adoc
@@ -0,0 +1,38 @@
+////
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+////
+
+.Common threat model
+[%collapsible]
+====
+Code signing::
+All Logging Services software release distributions are signed using GPG using 
a key from the Logging Services PMC 
https://downloads.apache.org/logging/KEYS[KEYS file].
+Information on how to verify releases signatures are explained further in 
xref:download.adoc[the Download page].
+Thus, GPG signatures should be validated in your build process.
+
+Configuration sources::
+All configuration sources to an application must be trusted by the programmer.
+When loading a configuration file from disk (especially when a monitor 
interval is configured to reload the file periodically), the location of the 
configuration file must be kept safe from unauthorized modifications.
+Similarly, when loading a configuration file over the network such as through 
HTTP, this should be configured to use TLS or a secure connection in general 
with strong authentication guarantees.
+This remote location must be kept safe from unauthorized modifications.
+When configurations are modified through JMX, the JMX server should be safely 
configured to require authentication and a secure connection if being accessed 
over the network.
+When configurations are provided through JNDI, these should only use the 
`java` scheme for sharing configurations in a Java EE or Jakarta EE application 
service.
+JNDI-sourced configurations should not use other JNDI providers such as LDAP, 
DNS, or RMI, as all these providers are difficult to properly secure.
+
+Java Object Serialization Stream Protocol::
+https://docs.oracle.com/javase/8/docs/platform/serialization/spec/protocol.html[Java
 Object Serialization Stream Protocol] should not be used to deserialize data 
from untrusted sources.
+See 
https://owasp.org/www-community/vulnerabilities/Deserialization_of_untrusted_data[the
 related OWASP guide] for details.
+====
diff --git a/_threat-model-log4j.adoc b/_threat-model-log4j.adoc
new file mode 100644
index 00000000..376b292a
--- /dev/null
+++ b/_threat-model-log4j.adoc
@@ -0,0 +1,70 @@
+////
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+////
+
+.Log4j threat model
+[%collapsible]
+====
+Configuration inputs and the classpath are expected to be controlled by the 
programmer.
+Configurations have the ability to execute arbitrary code.
+While specific plugins (such as a JNDI lookup) may use constraint validators 
or conditionals to require additional settings to opt in to functionality, this 
is not universally required by custom plugins.
+Specific security considerations involved in our threat model are detailed 
below.
+
+Parameterized logging::
+When using a log message containing template parameters like `{}`, only the 
format string is evaluated for parameters to be substituted.
+The message parameters themselves are not evaluated for parameters; they are 
only included in the format string corresponding to their template position.
+The conversion of message parameters into a string is done on-demand depending 
on the layout being used.
+When structure-preserving transformations of log message data are required, 
the `Message` API should be used for logging structured data combined with a 
structured layout (e.g., `JsonTemplateLayout`).
+Format strings should be compile-time constants, and under no circumstances 
should format strings be built using user-controlled input data.
+
+Unstructured logging::
+When using an unstructured layout such as `PatternLayout`, no guarantees can 
be made about the output format.
+This layout is mainly useful for development purposes and should not be relied 
on in production applications.
+For example, if a log message contains new lines, these are not escaped or 
encoded specially unless the configured pattern uses the 
`%encode\{pattern}\{CRLF}` wrapper pattern converter (which will encode a 
carriage return as the string `\r` and a line feed as the string `\n`) or some 
other `%encode` option.
+Note that `%xEx` is appended to the pattern unless already present.
+Similarly, other encoding options are available for other formats, but pattern 
layouts cannot make assumptions about the entire output.
+As such, when using unstructured layouts, no user-controlled input should be 
included in logs.
+It is strongly recommended that a structured layout (e.g., 
`JsonTemplateLayout`) is used instead for these situations.
+Note that `StrLookup` plugins (those referenced by `${...}` templates in 
configuration files) that contain user-provided input should not be referenced 
by layouts.
+
+Structured logging::
+When using a structured layout (most layouts besides pattern layout), log 
messages are encoded according to various output formats.
+These safely encode the various fields included in a log message.
+For example, the `JsonTemplateLayout` can be configured to output log messages 
in various JSON structures where all log data is properly encoded into safely 
parseable JSON.
+This is the recommended mode of operation for use with log parsing and log 
collection tools that rely on log files or arbitrary output streams.
+
+Java Security Manager::
+Log4j 3 no longer supports running in or using a custom `SecurityManager`.
+This Java feature has been deprecated for removal in Java 21.
+Log4j 2 includes partial support for running with a Security Manager.
+
+Log masking::
+Log4j, like any other generic logging library, cannot generically support log 
masking of sensitive data.
+While custom plugins may be developed to attempt to mask various regular 
expressions (such as a string that looks like a credit card number), the 
general problem of log masking is equivalent to the halting problem in computer 
science where sensitive data can always be obfuscated in such a way as to avoid 
detection by log masking.
+As such, it is the responsibility of the developer to properly demarcate 
sensitive data such that it can be consistently masked by log masking plugins.
+This sort of use case should make use of the `Message` API for better control 
over the output of such data.
+
+Availability::
+Log4j goes to great lengths to minimize performance overhead along with 
options for minimizing latency or maximizing throughput.
+However, we cannot guarantee availability of the application if the appenders 
cannot keep up with the logs being written.
+Synchronous logging can cause applications to block and wait for a log message 
to be written.
+Asynchronous logging can also cause applications to block and wait depending 
on the wait strategy and queue full policy configured.
+Configuring too large or too many buffers in an application can also result in 
out of memory errors.
+
+Compressing logs::
+If log compression is used along with custom encryption where logs contain 
user-controlled input, then this can lead to a 
https://en.wikipedia.org/wiki/CRIME[CRIME attack] style vulnerability where a 
chosen-plaintext attack is combined with information leakage caused by how the 
compression algorithm handles different inputs.
+The simplest way to avoid this problem is to never combine compression with 
encryption when encoding user-controlled input.
+====
diff --git a/security.adoc b/security.adoc
index 32294374..6cd3dbab 100644
--- a/security.adoc
+++ b/security.adoc
@@ -43,9 +43,13 @@ If you have encountered an unlisted security vulnerability 
or other unexpected b
 
 [WARNING]
 ====
-The threat model that Log4j uses considers configuration files as safe input 
controlled by the programmer; **potential vulnerabilities that require the 
ability to modify a configuration are not considered vulnerabilities** as the 
required access to do so implies the attacker can execute arbitrary code.
+The threat model that Logging Services uses considers configuration files as 
safe input controlled by the programmer; **potential vulnerabilities that 
require the ability to modify a configuration are not considered 
vulnerabilities** as the required access to do so implies the attacker can 
execute arbitrary code.
 ====
 
+include::_threat-model-common.adoc[]
+
+include::_threat-model-log4j.adoc[]
+
 [#policy]
 == Vulnerability handling policy
 

Reply via email to