[ 
https://issues.apache.org/jira/browse/KAFKA-10895?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Konstantine Karantasis resolved KAFKA-10895.
--------------------------------------------
    Resolution: Fixed

> Basic auth extension's JAAS config can be corrupted by other plugins
> --------------------------------------------------------------------
>
>                 Key: KAFKA-10895
>                 URL: https://issues.apache.org/jira/browse/KAFKA-10895
>             Project: Kafka
>          Issue Type: Bug
>          Components: KafkaConnect
>    Affects Versions: 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.1.1, 2.3.0, 2.2.1, 2.2.2, 
> 2.4.0, 2.3.1, 2.5.0, 2.4.1, 2.6.0, 2.5.1, 2.7.0
>            Reporter: Chris Egerton
>            Assignee: Chris Egerton
>            Priority: Major
>             Fix For: 2.3.2, 2.4.2, 2.5.2, 2.8.0, 2.7.1, 2.6.2
>
>
> The Connect 
> [BasicAuthSecurityRestExtension|https://github.com/apache/kafka/blob/trunk/connect/basic-auth-extension/src/main/java/org/apache/kafka/connect/rest/basic/auth/extension/BasicAuthSecurityRestExtension.java]'s
>  doc states that "An entry with the name {{KafkaConnect}} is expected in the 
> JAAS config file configured in the JVM."
> This is technically accurate, as the 
> [JaasBasicAuthFilter|https://github.com/apache/kafka/blob/afa5423356d3d2a2135a51200573b45d097f6d60/connect/basic-auth-extension/src/main/java/org/apache/kafka/connect/rest/basic/auth/extension/JaasBasicAuthFilter.java#L61-L63]
>  that the extension installs creates a {{LoginContext}} using a 
> [constructor|https://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/LoginContext.html#LoginContext-java.lang.String-javax.security.auth.callback.CallbackHandler-]
>  that does not include a 
> [Configuration|https://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/Configuration.html]
>  to be passed in, which causes 
> [Configuration::getConfiguration|https://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/Configuration.html#getConfiguration--]
>  to be used under the hood by the {{LoginContext}} to fetch the JAAS 
> configuration to use for authentication.
> Unfortunately, other plugins (connectors, converters, even other REST 
> extensions, etc.) may invoke 
> [Configuration::setConfiguration|https://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/Configuration.html#setConfiguration-javax.security.auth.login.Configuration-]
>  and install a completely different JAAS configuration onto the JVM. If the 
> user starts their JVM with a JAAS config set via the 
> {{-Djava.security.auth.login.config}} property, that JAAS config can then be 
> completely overwritten, and if the basic auth extension depends on the JAAS 
> config that's installed at startup (as opposed to at runtime by a plugin), it 
> will break.
> It's debatable whether this can or should be addressed with a code fix. One 
> possibility is to cache the current JVM's configuration as soon as the basic 
> auth extension is loaded by invoking {{Configuration::getConfiguration}} and 
> saving the resulting configuration for future {{LoginContext}} 
> instantiations. However, it may be possible that users actually rely on 
> runtime plugins being able to install custom configurations at runtime for 
> their basic auth extension, in which case this change would actually be 
> harmful.
> Regardless, it's worth noting this odd behavior here in the hopes that it can 
> save some time for others who encounter the same issue.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to