Thanks Franz! All the best for 2022. Gary
On Thu, Dec 30, 2021, 09:17 Franz van Betteraey <fr...@van-betteraey.de> wrote: > Dear David, Gary and especially Carter, > > Thank you for taking the time to answer my question about the > StrSubstitutor. I finally had time to look at the tips today and they > were very helpful. > > I wish you - and the whole log4j team - a good start into 2022 and a > great year. > > - Franz > > Am 23.12.2021 um 21:56 schrieb Gary Gregory: > > Excellent write up! > > > > Gary > > > > On Thu, Dec 23, 2021, 10:19 Carter Kozak <cko...@ckozak.net> wrote: > > > >> I've put together a more thorough document here: > >> > >> > https://github.com/apache/logging-log4j2/blob/release-2.x/docs/2.17.0-interpolation.md > >> > >> On Wed, Dec 22, 2021, at 11:38, Carter Kozak wrote: > >>> This is a great question, and something I'm working on documenting > today. > >>> > >>> The relevant change in 2.17.0 is > >> > https://github.com/apache/logging-log4j2/commit/806023265f8c905b2dd1d81fd2458f64b2ea0b5e > >>> Outside of evaluating the configuration itself, we no longer > recursively > >> evaluate substitution results. This means that > >> config.getStrSubstitutor().replace(event, "${event:Message}") for the > event > >> 'log.info("Hello, ${lower:WORLD}")' will evaluate to the literal string > >> "Hello, ${lower:WORLD}" where previous releases would incorrectly > evaluate > >> to "Hello, world". I would certainly recommend writing unit tests in > your > >> project to verify this behavior as well :-) > >>> -ck > >>> > >>> On Wed, Dec 22, 2021, at 11:29, Franz van Betteraey wrote: > >>>> Sorry Gary for not being precise enough. Yes, I am using the latest > >>>> patched version 2.17.0 and hope to benefit from the security patches. > >>>> > >>>> My custom layout class extends AbstractStringLayout and the > >>>> configuration is injected via the @PluginConfiguration parameter of > >> the > >>>> PluginFactory method. > >>>> > >>>> @PluginFactory > >>>> public static MyCustomLayout createLayout( > >>>> @PluginConfiguration final Configuration config, ...) > >>>> > >>>> I than get the StrSubstitutor from config.getStrSubstitutor(). My > >> custom > >>>> layout allows to specify/configure a list of lookups like > >>>> "${event.ThreadName}" or "${date:yyyy-MM-dd'T'HH:mm:ss.SSSZ}" and > >>>> resolves these (one by one) via 'strSubstitutor.replace'. > >>>> > >>>> I do not call this method on "${event:Message}" placeholder. Here I > >> just > >>>> use 'logEvent.getMessage().getFormattedMessage()' to get the message > >> text. > >>>> All lookup placeholder are specified via configuration (thus in my > >> hand). > >>>> My hope now is that the implemented security patches (disabled Jndi > >>>> Appender, substitution recursion, etc.) will also be effective in this > >>>> case of use. > >>>> > >>>> Am 22.12.2021 um 13:45 schrieb Gary Gregory: > >>>>> Since you don't specify which version you are using I will assume > >> that you > >>>>> are using our latest patched version which is 2.17.0, the best and > >> safest > >>>>> choice. > >>>>> > >>>>> Your description is also too vague: The > >>>>> method StrSubstitutor.replace(LogEvent, String) is an instance > >> method and > >>>>> you do not describe how you created the StrSubstitutor, so there is > >> no way > >>>>> for me to tell what is safe and what is not > >>>>> > >>>>> Gary > >>>>> > >>>>> > >>>>> On Wed, Dec 22, 2021 at 5:25 AM Franz van Betteraey < > >> fr...@van-betteraey.de> > >>>>> wrote: > >>>>> > >>>>>> Dear Log4j Team, > >>>>>> > >>>>>> first of all thank you for your tireless efforts around the project, > >>>>>> which I appreciate very much. > >>>>>> > >>>>>> My question is: Is it safe to call 'StrSubstitutor.replace(final > >>>>>> LogEvent event, final String source)' in a custom Layout class that > >>>>>> inherits from AbstractStringLayout? The StrSubstitutor object is > >> derived > >>>>>> via the configuration and the 'source' string might contain any > >> lookup > >>>>>> placeholder. > >>>>>> > >>>>>> It is not clear to me if the defense mechanisms against the current > >>>>>> security vulnerabilities take effect before such a call and > >> prevents the > >>>>>> framework on calling this method, or if the call is still secure > >> and the > >>>>>> defense happens afterwards (e.g. by not instantiating lookups). > >>>>>> > >>>>>> I thank you for any advice and wish you happy and peaceful holidays. > >>>>>> > >>>>>> Franz > >>>>>> > >>>>>> > >>>>>> > >> --------------------------------------------------------------------- > >>>>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > >>>>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org > >>>>>> > >>>>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > >>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org > >>>> > >>>> > >> -ck > >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > For additional commands, e-mail: log4j-user-h...@logging.apache.org > >