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

ppkarwasz 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 b257481b Add adversary model and revision section to common threat 
model (#30)
b257481b is described below

commit b257481b9a42f695d9aab2eb0dbfe11d7b82fe68
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Sun May 17 22:01:43 2026 +0200

    Add adversary model and revision section to common threat model (#30)
    
    * Add adversary model and revision section to common threat model
    
    Extend the common threat model with two new sections:
    
    * "Adversary capabilities" defines the in-scope adversary and the 
capabilities it is assumed to have, and enumerates the out-of-scope adversaries 
whose reports will not be accepted.
    * "Revising this threat model" lists the conditions under which the 
document must be revisited.
    
    Self-referential and deeply nested object structures are explicitly placed 
out of scope. To keep disabled log statements cheap we call `toString()` on the 
passed parameters ourselves, so the safety of that call ultimately rests with 
the caller. This follows the CVE-2017-18640 precedent: SnakeYAML did not hang 
while _reading_ a "billion laughs" document, but it built a deeply nested map 
from it, and SnakeYAML, not the code that later operated on that map, was held 
responsible. Note tha [...]
    
    Open questions left for discussion:
    
    * The revision section does not yet define the process for modifying the 
threat model. This should likely require a public discussion followed by a 
public PMC vote.
    * Retroactivity: changes should apply only to versions published *after* 
the modification, not retroactively. If we adopt that, we should keep all 
previously published versions of this document available on the website.
    
    Assisted-By: Claude Opus 4.7 (1M context) <[email protected]>
    
    * fix: update adversary exclusions
    
    Co-authored-by: Jan Friedrich <[email protected]>
    
    ---------
    
    Co-authored-by: Jan Friedrich <[email protected]>
---
 .../modules/ROOT/pages/_threat-model-common.adoc   | 45 +++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/src/site/antora/modules/ROOT/pages/_threat-model-common.adoc 
b/src/site/antora/modules/ROOT/pages/_threat-model-common.adoc
index 2ebd7b7d..6ecb78cd 100644
--- a/src/site/antora/modules/ROOT/pages/_threat-model-common.adoc
+++ b/src/site/antora/modules/ROOT/pages/_threat-model-common.adoc
@@ -22,7 +22,7 @@ All the logging frameworks maintained by Apache Logging 
Services (https://loggin
 https://logging.apache.org/log4j/index.html[Log4j]
 and
 https://logging.apache.org/log4net/index.html[Log4net]) face similar 
challenges from malicious actors.
-The following sections outline the most common threats to logging frameworks 
and clarify the assumptions regarding the origin and trustworthiness of various 
data sources.
+The following sections outline the most common threats to logging frameworks 
and clarify the assumptions regarding the origin and trustworthiness of various 
data sources and the capabilities assumed of potential adversaries.
 Vulnerability reports that do not adhere to these assumptions will not be 
accepted and are **not** eligible for the 
https://yeswehack.com/programs/log4j-bug-bounty-program[YesWeHack Bug Bounty 
Program].
 
 [#threat-common-users]
@@ -69,6 +69,33 @@ No particular input validation for log messages is necessary.
 * They **do not** trust the string representation of log parameters.
 * The logging frameworks do not trust neither the keys nor the values in the 
thread context.
 
+[#threat-common-adversary]
+== Adversary capabilities
+
+The threats listed below are evaluated against an adversary with a 
well-defined and limited set of capabilities.
+Defining these capabilities clarifies which reports are in scope: a report 
that requires a capability not listed here is **not** considered a 
vulnerability.
+
+In-scope adversary::
++
+An in-scope adversary is any party whose data reaches the logging framework 
**exclusively** through the untrusted sources described above.
+Such an adversary is assumed to be able to:
++
+* Submit arbitrary byte sequences, including malformed text encodings and 
control characters (such as `CR`, `LF` and `NUL`), through log messages, the 
string representation of log parameters, and the keys and values of the thread 
context.
+* Submit excessively long inputs, within whatever limits the calling 
application enforces.
+* Submit input that resembles the framework's own interpolation or lookup 
syntax, including input that triggers recursive interpolation.
+
+Out-of-scope adversary::
++
+The following adversaries are explicitly **out of scope**; a report relying on 
any of these capabilities will not be accepted:
++
+* An adversary able to modify environment variables, configuration properties, 
or configuration files: these are trusted sources (see 
<<threat-common-sources>>).
+* An adversary able to execute arbitrary code in the same process as the 
logging framework. Code running in the same process shares the same trust level 
as the logging framework itself; there is no boundary to enforce. This includes 
code introduced through plugins, custom appenders, or other application 
extensions.
+* An adversary able to cause a self-referential or otherwise non-terminating 
object structure to be passed to a log statement.
+The logging frameworks trust that logged objects can be safely converted to a 
string; converting such a structure is the responsibility of the calling code.
+* An adversary observing side channels, such as the timing or memory behavior 
of the logging framework.
+* A malicious destination of an appender (e.g. a hostile database, message 
broker, or mail server).
+Appender destinations are configured by trusted users and are treated as an 
extension of the deployer.
+
 [#threat-common-threat]
 == Threats
 
@@ -157,3 +184,19 @@ Regarding this threat:
 --
 +
 See xref:security/faq.adoc#deserialization[the FAQ entry on CWE-502] for the 
recommended alternatives.
+
+[#threat-common-revision]
+== Revising this threat model
+
+This threat model reflects the current design of Log4cxx, Log4j, and Log4net.
+It is **not** immutable: a revision is required whenever a change to one of 
the frameworks invalidates an assumption stated above.
+In particular, this document must be revisited when any of the following 
becomes true:
+
+* A new public API is added that accepts a kind of input not yet covered by 
<<threat-common-sources>>.
+* An existing entry point begins to accept input from a new source, changing 
whether that input is trusted or untrusted.
+* A security-relevant default changes, or a configuration option that affects 
the security posture is added or removed.
+* A framework gains a network listener or any other inbound surface of its own.
+* A vulnerability report cannot be cleanly classified as either in scope or 
out of scope using the assumptions above.
+
+Internal refactors that do not change any of the above do **not** require a 
revision.
+Proposed changes to this document are reviewed by the Apache Logging Services 
PMC.

Reply via email to