nice, that's a good way to check for this type of thing - ring only uses
this in the Cookie implementation of SessionStore, is that right?

ignacio


On Fri, Jul 11, 2014 at 12:24 PM, James Reeves <ja...@booleanknot.com>
wrote:

> Ring uses a post condition to guard against this:
>
> (defn- ^String serialize [x]
>
>   {:post [(= x (edn/read-string %))]}
>
>   (pr-str x))
>
>
> - James
>
>
> On 11 July 2014 20:13, Ignacio Thayer <itha...@gmail.com> wrote:
>
>>
>> we noticed this possibility of edn injection when mixing validated and
>> unvalidated data into a single edn blob. it's hard to exploit, and in
>> some sense it's obvious but i thought i'd share it since it caught us
>> off-guard and requires greater care than when serializing w/ json for
>> example.
>>
>> Given a ring/compojure handler that mixes trusted/untrusted data into a
>> map:
>>
>>      (GET "/submit-op" []
>>           (fn [req]
>>             (let [;; BAD: Mix unvalidated user input w/ trusted data
>> (is-admin)
>>                   request-info {:raw-user-input (keyword (-> req
>> :query-params (get "operation")))
>>                                      :is-admin? false}
>>                   ;; Serialize it for a backend worker/task queue.
>>                   serialized (pr-str request-info)
>>                   ;; Just roundtrip it here for demonstration and print
>> contents.
>>                   roundtripped (edn/read-string serialized)]
>>               (for [[k v] roundtripped]
>>                 (lg/info "KEY[" k "]="v)))))
>>
>>
>>  and the following request:
>>
>>      /submit-op?operation=register%20:is-admin?%20true}
>>
>> the trusted data is overwritten
>>
>>      INFO  20140711 120431,062 rfz.web.routing ] KEY[ :raw-user-input ]=
>> :register
>>      INFO  20140711 120431,063 rfz.web.routing ] KEY[ :is-admin? ]= true
>>
>>
>> if i missed something about this, i apologize. in any case, take care,
>> validate data (as always) and don't mix trusted and untrusted data in
>> a call to pr-str.
>>
>> ignacio
>> cto readyforzero.com
>>
>>  --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "Clojure" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/clojure/lld5t6xT8o0/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to