I believe that the "other ways to cause harm" that mention applies here,
but this is the docs that explain the thing I'm talking about:

https://docs.racket-lang.org/gui/editor-overview.html?q=snip-class#%28part._editorsnipclasses%29

It would require the attacker put the file on the disk in a collection and
then this would trigger running that code.

There are other ways to trigger running code (e.g., starting up DrRacket)
if the attacker can write to the filesystem into a collection, tho.

Robby


On Thu, Aug 20, 2020 at 2:29 PM Daniel Melcer <[email protected]> wrote:

> To make sure I'm understanding correctly, as long as the code verifies
> that the given snipclass is in (get-the-snip-class-list), it should be
> relatively safe? So the only way that the user would run malicious code in
> this case is if they installed a malicious package first, in which case
> there are easier ways to cause harm.
>
> OTOH, when using the load-file method, the dynamic-require could be an
> issue if a theoretical attacker put a .rkt file at a known path and the
> input to load-file refers to that path.
>
> Daniel
>
> On Thursday, August 20, 2020 at 3:12:00 PM UTC-4 Robby Findler wrote:
>
>> The issue I mention in 157 is different than this one.
>>
>> In this situation, the snipclass needs to be installed somehow before its
>> code will be loaded, but that installation can happen by a require
>> (triggered by the opening of that snip). So it may be that you have code
>> installed in a collection that you do not trust and unmarshalling a snip
>> may load that code.
>>
>> That said, in the code below, I don't think this is happening. In
>> particular, the way that untrusted code may be loaded is because the name
>> of the snipclass follows a specific format and the editor itself is going
>> to do the require.
>>
>> In short, you can treat the `load-file` method of editor<%> as possibly
>> doing a dynamic-require. This may or may not be a problem, of course.
>>
>> (At least I think that that's the only thing here. I may be forgetting
>> something?)
>>
>> Robby
>>
>>
>> On Thu, Aug 20, 2020 at 2:08 PM Sorawee Porncharoenwase <
>> [email protected]> wrote:
>>
>>> I don't know much about this specific case, but see Robby's comment
>>> about how "DrRacket can run user (untrusted) code in certain situations" at
>>> https://github.com/racket/gui/issues/157. A concrete problem I found is
>>> that you can have a snip running `struct->vector` and it will successfully
>>> extract private fields of that struct value, even though it won't be able
>>> to if you do that in normal circumstances.
>>>
>>> On Thu, Aug 20, 2020 at 8:34 AM Daniel Melcer <[email protected]> wrote:
>>>
>>>> There are some well-known vulnerabilities that are a result of
>>>> deserializing untrusted inputs. Are editor snips restrictive enough that
>>>> their deserialization is safe? After all, they are already loaded when a
>>>> file is opened in DrRacket, and a file on the disk may originate from an
>>>> untrusted source. In particular, I would be doing something like this
>>>> (snip-class-name, bytes, and snip-pos are from an untrusted source). The
>>>> whole thing will be wrapped in an exception handler:
>>>>
>>>>         (define snip-class (send (get-the-snip-class-list) find
>>>> snip-class-name)) ; Also handle case where this returns #f
>>>>         (define bytes-base-in (make-object editor-stream-in-bytes-base%
>>>> bytes))
>>>>         (define editor-stream-in (make-object editor-stream-in%
>>>> bytes-base-in))
>>>>         (define new-snip (send snip-class read editor-stream-in))
>>>>         (send text insert new-snip snip-pos)
>>>>
>>>> Daniel
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Racket Users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/racket-users/153d1c59-0343-4ed9-805b-2909499ec98fn%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/racket-users/153d1c59-0343-4ed9-805b-2909499ec98fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Racket Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/racket-users/CADcuegtnpb3h_JkDFmBdhiosJkz948ypkhmoj1vZc7vq5SAR0w%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/racket-users/CADcuegtnpb3h_JkDFmBdhiosJkz948ypkhmoj1vZc7vq5SAR0w%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/d201725a-e043-4c31-975e-f0ff289982f4n%40googlegroups.com
> <https://groups.google.com/d/msgid/racket-users/d201725a-e043-4c31-975e-f0ff289982f4n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAL3TdOM%2BXp6YRAvzYjEiCj_wMdQoHnsabEDC8t6AKX5fDLhEdQ%40mail.gmail.com.

Reply via email to