OK, that seems clear now :)
I understood from our conversations
that "enable_user_defined_functions_threads: false" would disable the UDF'
specific class loader but it seems I understood wrongly, so the only way to
use custom packages in UDF is to modify source code.
Many thanks!


Le mer. 6 avr. 2022 à 16:35, bened...@apache.org <bened...@apache.org> a
écrit :

> The property you are setting permits some kinds of privilege escalation,
> but by default classes outside of those pre-defined by the whitelist are
> not permitted. This is imposed here:
> https://github.com/apache/cassandra/blob/210793f943dc522161fd26b6192f38a5c83fa131/src/java/org/apache/cassandra/cql3/functions/UDFunction.java#L168
>
>
>
> You will need to modify the source code to e.g. add additional
> allowedPatterns, or perhaps to permit additional patterns to be configured
> at startup.
>
>
>
> *From: *Sébastien Rebecchi <srebec...@kameleoon.com>
> *Date: *Wednesday, 6 April 2022 at 15:15
> *To: *dev@cassandra.apache.org <dev@cassandra.apache.org>,
> e.dimitr...@gmail.com <e.dimitr...@gmail.com>
> *Cc: *ble...@apache.org <ble...@apache.org>
> *Subject: *Re: UDF: adding custom jar to classpath
>
> Hi Ekaterina,
>
>
>
> I use 4.0.1.
>
> But as I said I added a jar in classpath (/usr/share/cassandra/lib/ folder
> on every node) and I see that the jar is loaded in the classpath from the
> Cassandra command line. And I have "enable_user_defined_functions: true"
> and "enable_user_defined_functions_threads: false" in cassandra.yaml.
>
> So I don't see what is missing or not done properly.
>
>
>
> Best regards,
>
> Sébastien.
>
>
>
> Le mer. 6 avr. 2022 à 16:03, Ekaterina Dimitrova <e.dimitr...@gmail.com>
> a écrit :
>
> Hi Sebastian,
>
> Do you use the latest 4.0.3 version? Those options were added in 4.0.2 I
> believe, so if you try them with an earlier version - below message is what
> you would get as they didn’t exist.
>
>
>
> Best regards,
>
> Ekaterina
>
>
>
> On Wed, 6 Apr 2022 at 9:53, Sébastien Rebecchi <srebec...@kameleoon.com>
> wrote:
>
> Hi Benjamin, Hi everybody,
>
>
>
> I found in the documentation that we should add "allow_insecure_udfs:
> true" and optionally "allow_extra_insecure_udfs: true" so that
> "enable_user_defined_functions_threads: false" is really taken into account
> (I understood like that). That would explain why my UDF still does not run
> even with "enable_user_defined_functions_threads: false". Found in
> https://github.com/apache/cassandra/blob/cassandra-4.0/NEWS.txt
>
>
>
> So I tried to add "allow_insecure_udfs: true" and
> "allow_extra_insecure_udfs: true" in cassandra.yaml, but then Cassandra
> failed to restart and I got that error in logs "Exception
> (org.apache.cassandra.exceptions.ConfigurationException) encountered during
> startup: Invalid yaml. Please remove properties [allow_insecure_udfs,
> allow_extra_insecure_udfs] from your cassandra.yaml".
>
>
>
> Should I understand that we can activate that 2 extra confs only by
> changing source code? That would be really disappointing :( And if no, then
> how to activate all UDF possibilities from cassandra.yaml please?
>
>
>
> Thanks in advance,
>
>
>
> Sébastien.
>
>
>
>
>
> Le mar. 5 avr. 2022 à 10:36, Benjamin Lerer <ble...@apache.org> a écrit :
>
> Unfortunately, I do not have much time for doing some digging. Sorry for
> that :-(
>
> You should look at JavaBasedUDFunction and  UDFExecutorServic.
>
>
>
> Le lun. 4 avr. 2022 à 17:25, Sébastien Rebecchi <srebec...@kameleoon.com>
> a écrit :
>
> Hi!
>
> Do you have any more ideas for me?
>
> Cordially,
>
> Sébastien.
>
>
>
> Le lun. 28 mars 2022 à 16:39, Sébastien Rebecchi <srebec...@kameleoon.com>
> a écrit :
>
> Unfortunately, it is not working even with
> "enable_user_defined_functions_threads: false" in cassandra.yaml :/
>
> Is there any way to check the running configuration?
>
>
>
> Le lun. 28 mars 2022 à 15:35, Benjamin Lerer <ble...@apache.org> a écrit :
>
> I do not think that allowing to customize UDF classes whitelist has been
> discussed before. Feel free to open a JIRA ticket :-)
>
> I have some plans to revisit how we securise UDFs as the current threading
> approach has some impact in terms of latency. That can be a good
> opportunity to look into providing more flexibility.
>
>
>
> Le lun. 28 mars 2022 à 15:00, Sébastien Rebecchi <srebec...@kameleoon.com>
> a écrit :
>
> Thanks you very much! I will try that.
>
> As you know, would it be a long-terms solution? Or is there any plan to
> add the possibility to customize UDF classes whitelist?
>
>
>
> Le lun. 28 mars 2022 à 14:31, Benjamin Lerer <ble...@apache.org> a écrit :
>
> Is there a way to customize that default behaviour?
>
>
>
> Looking at JavaBasedUDFunction quickly it seems that the ClassLoader is
> only used when you use the UDFExecutorService to execute your UDFs. You can
> try to disable it using "enable_user_defined_functions_threads: false" and
> see if it works.
>
> Now that also means that you have to ensure that only trusted persons can
> create UDF or UDA as it removes all safety mechanisms.
>
>
>
> Le lun. 28 mars 2022 à 13:23, Sébastien Rebecchi <srebec...@kameleoon.com>
> a écrit :
>
> Hi Benjamin,
>
>
>
> Thanks for the answer.
>
> Is there a way to customize that default behaviour? If no, could you
> indicate where to find this class loader in the github of Cassandra please?
>
>
>
> Le lun. 28 mars 2022 à 12:40, Benjamin Lerer <ble...@apache.org> a écrit :
>
> Hi Sébastien,
>
>
>
> Cassandra uses a special classloader for UDFs that limit which classes can
> be used.
>
> You cannot rely on non-JDK classes for UDFs and some of the JDK packages
> like the IO package for example cannot be used.
>
> The goal is simply to ensure that UDFs cannot compromise the server
> security.
>
>
>
> Le lun. 28 mars 2022 à 11:31, Sébastien Rebecchi <srebec...@kameleoon.com>
> a écrit :
>
> Hello,
>
> I am trying to create a UDF based on custom methods.
> So I set enable_user_defined_functions to true and added a jar in
> "/usr/share/cassandra/lib/" folder on every node, restarted the nodes and I
> can see from the command line that the jar is indeed used (in the classpath
> with -cp).
>
> But when i create the UDF I got that error:
>
> CREATE OR REPLACE FUNCTION blobToJson (input blob) RETURNS NULL ON NULL
> INPUT RETURNS text LANGUAGE java AS 'return
> com.kameleoon.visit.Visit.writeToJson(com.kameleoon.visit.Visit.readFromByteBuffer(input));';
> InvalidRequest: Error from server: code=2200 [Invalid query] message="Java
> source compilation failed:
> Line 1: com.kameleoon.visit.Visit cannot be resolved to a type
> Line 1: com.kameleoon.visit.Visit cannot be resolved to a type
>
> Of course the class com.kameleoon.visit.Visit does exist in the jar and
> the jar has read rights to every user (chmod 444). So I can not find the
> reason.
>
> versions are: [cqlsh 6.0.0 | Cassandra 4.0.1 | CQL spec 3.4.5 | Native
> protocol v5]
>
> Any help would be appreciated!
>
> Thanks!
>
> Sébastien.
>
>

Reply via email to