This is an automated email from the ASF dual-hosted git repository.
freeandnil 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 40ddf4dd separated log4net threat model (#4)
40ddf4dd is described below
commit 40ddf4dd629e81228063374e20510676b16b615e
Author: Jan Friedrich <[email protected]>
AuthorDate: Wed Aug 28 10:39:09 2024 +0200
separated log4net threat model (#4)
---
_threat-model-common.adoc | 4 ++-
_threat-model-log4net.adoc | 61 ++++++++++++++++++++++++++++++++++++++++++++++
security.adoc | 2 ++
3 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/_threat-model-common.adoc b/_threat-model-common.adoc
index 1e08f2f5..5698d334 100644
--- a/_threat-model-common.adoc
+++ b/_threat-model-common.adoc
@@ -33,7 +33,9 @@ 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.
+
+For Java-based projects supporting JNDI or JMX,
+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.
diff --git a/_threat-model-log4net.adoc b/_threat-model-log4net.adoc
new file mode 100644
index 00000000..4bca1a06
--- /dev/null
+++ b/_threat-model-log4net.adoc
@@ -0,0 +1,61 @@
+////
+ 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.
+////
+
+[#threat-log4net]
+=== Log4Net threat model
+
+Below we share the threat model specific to link:/log4net[log4net].
+
+[#threat-log4net-parametrized-logging]
+==== Parameterized logging
+
+When using a log message containing template parameters like `{0}`, 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 data are required, a
structured layout (e.g., `XmlLayout`) should be used.
+Format strings should be compile-time constants, and under no circumstances
should format strings be built using user-controlled input data.
+
+[#threat-log4net-unstructured-logging]
+==== 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.
+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., `XmlLayout`) is
used instead for these situations.
+
+[#threat-log4net-structured-logging]
+==== 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 `XmlLayout` can be used to output log messages in an XML
structure where all log data is properly encoded into safely parseable XML.
+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.
+
+[#threat-log4net-log-masking]
+==== Log masking
+
+Log4Net, 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.
+
+[#threat-log4net-availability]
+==== Availability
+
+Log4Net 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.
+Logging can cause applications to block and wait for a log message to be
written.
\ No newline at end of file
diff --git a/security.adoc b/security.adoc
index b0127485..cc36b7db 100644
--- a/security.adoc
+++ b/security.adoc
@@ -51,6 +51,8 @@ include::_threat-model-common.adoc[]
include::_threat-model-log4j.adoc[]
+include::_threat-model-log4net.adoc[]
+
[#policy]
== Vulnerability handling policy