Apologies, looks like the second half of the email I just sent got
formatted weirdly (I was copying from a failed earlier email attempt that
got rejected for attaching images). Just to make sure it doesn’t get buried:

Of course this specific case can be patched on the frontend, but doing some
kind of HTML sanitization escaping into the whatever-is-handling-the-ajax
(EntityREST or AtlasEntityStoreV2, maybe?) to blanket-catch HTML characters
sounds safer.

Hope this helps express my concerns.
From, Melinda Crane


On Mon, Jun 8, 2020 at 9:13 PM Melinda Crane <[email protected]> wrote:

> Dear Madhan,
>
> Thank you kindly for your response and for offering to look into potential
> solutions. I've been trying to step through how the ajax calls are handled,
> I don't really see the AtlasJsonProvider being used much at all actually
> for that. My concern is that the data from the ajax calls aren't being
> sanitized on the backend. I see there is a ton of sanitization happening on
> the frontend (lots of calls to _.escape()), but they're not all captured.
> For example.
>
> In CommonViewFunction, in the propertyTable
> <https://github.sc-corp.net/Snapchat/keystone/blob/master/dashboardv2/public/js/utils/CommonViewFunction.js#L267>
>  function,
> URLs are not escaped. So I can create an entity that has a key value of
>
> https://www.google.com/search?\";><iframe src='\''/'\'' width='\''1'\''
> height='\''1'\'' onload='\''window.alert(\"boo\");'\''></iframe>
>
> and my script will successfully get successfully injected into my browser
> when I try to view it. Looks like I can't attach images here but here's the
> elements:
>
> <div class="entity-detail-table">
>                     <table class="table">
>                         <tbody data-id="detailValue"
> class="hide-empty-value">
>                         <tr class="hide-row">
>                             <td>newSchema</td>
>                             <td>
>                                 <div class="scroll-y">
>                                 N/A
>                                 </div>
>                             </td>
>                         </tr>
>                         <tr class="">
>                             <td>classField</td>
>                             <td>
>                                 <div class="scroll-y">
>                                     <a target="_blank" class="blue-link"
> href="https://www.google.com/search?";>
>                                         <iframe src="/" width="1"
> height="1" onload="window.alert(&quot;boo&quot;);"></iframe>
>                                         "&gt;https://www.google.com/search
> ?"&gt;
>                                         <iframe src="/" width="1"
> height="1" onload="window.alert(&quot;boo&quot;);"></iframe>
>                                    </a></div></td> ...
>
> ^You can see the iframe-script combo here.
>
> Of course this specific case can be patched on the frontend, but doing
> some kind of HTML sanitization escaping on the
> whatever-is-handling-the-ajax (EntityREST or AtlasEntityStoreV2, maybe?) to
> blanket-catch HTML characters sounds safer.
>
> Hope this helps express my concerns.
> From, Melinda Crane
>
>
> On Sat, Jun 6, 2020 at 2:48 PM Madhan Neethiraj <[email protected]> wrote:
>
>> Melinda,
>>
>> Thank you for reaching out to Apache Atlas community.
>>
>> As you noted, AtlasJsonProvider is used to deserialize/serialize REST API
>> requests and responses. In addition, methods in AtlasJson are used in to
>> convert to/from Json. It will help if you can add few examples of potential
>> issues with the current implementation.
>>
>> Keval is looking into the frontend for potential issues and should get
>> back early next week.
>>
>> Thanks,
>> Madhan
>>
>>
>>
>>
>> On 5/29/20, 6:50 PM, "Melinda Crane" <[email protected]> wrote:
>>
>>     Dear Apache Atlas devs,
>>
>>     I’m from Snapchat, we’re working on building a catalog on top of
>> Apache
>>     Atlas. I noticed looking at the frontend for Atlas that there seem to
>> be
>>     several places vulnerable to XSS, so I’ve got some questions for the
>>     community (especially frontend folks) or other partner companies who
>> may
>>     have dealt with similar problems:
>>
>>
>>        1.
>>
>>        the CSP allows unsafe-inline and unsafe-eval
>>        2.
>>
>>        the backend JSON content provider, AtlasJsonProvider, doesn’t
>> appear to
>>        do any forced escaping.
>>
>>
>>     Regarding the unsafe-inline and unsafe-eval, I saw some inline
>> scripting
>>     going on with the index html file in dashboardv2/v3, but that doesn’t
>> look
>>     bad to move out. However, I noticed a lot of the third party node
>> modules
>>     use inline scripting (such as backgrid-filter and
>>     bootstrap-daterangepicker) and/or eval() (such as
>> javascript-stringify and
>>     even requirejs). I’d like to get rid of unsafe-inline and unsafe-eval
>> in my
>>     CSP; are there any recommendations on how to deal with the third party
>>     plugins to achieve this?
>>
>>     For the forced escaping, are there any other major places on backend
>>     besides the JSON provider that should definitely be escaped? Also,
>> since
>>     the AtlasJsonProvider seems to be *the* default object mapper, are
>> there
>>     any insidious or otherwise consequences of force escaping HTML
>> sensitive
>>     characters in it?
>>
>>     Thank you kindly for any advice.
>>
>>     From, Melinda Crane
>>
>>
>>

Reply via email to