Chris Egerton created KAFKA-10895:
-------------------------------------

             Summary: 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.7.0, 2.5.1, 2.6.0, 2.4.1, 2.5.0, 2.3.1, 2.4.0, 2.2.2, 
2.2.1, 2.3.0, 2.1.1, 2.2.0, 2.1.0, 2.0.1, 2.0.0
            Reporter: Chris Egerton


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