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.

Reply via email to