This is exactly the thread that I meant to start a couple of weeks ago.  Thanks 
for giving me the kick in the pants, Takahiro. :-)

What brought the issue to the fore for me:

* a greatly increased interest in security issues due to my own work's 
requirements
* the most recent arbitrary code execution issues that the Rails community has 
had to weather
* Building and maintaining Friend (http://github.com/cemerick/friend) has 
gradually brought me into contact with a handful of suitably experienced people 
that have done security reviews (none formal or published, BTW) of the Clojure 
web stack.

In each of the three times I've been fortunate to discuss those reviews with 
their instigators, the first thing that comes up is *read-eval*.  Perhaps not 
surprising — we've all known that its default is an open barn door.  The sole 
thread I could dig up that discusses this is 
http://groups.google.com/group/clojure/browse_frm/thread/1bd6b66b51406ec9?tvc=1,
 where the common refrain is simply "you should bind *read-eval* to false when 
reading data from unknown sources".  Despite this not being news, recent events 
and certain changes in my foci have made it a newly-important issue, at least 
to me.

Takahiro is exactly right that the growing usage of Clojure data / edn as a 
common serialization format for e.g. web service APIs makes the default of 
*read-eval* very, very relevant; IMO, despite any concerns re: breaking 
existing code.  On that front, *read-eval* affects only the #= construction, a 
facility that is, IIRC, purposefully undocumented.  This lack of documentation 
is good insofar as few people have used #=, but it has also left undocumented 
an implementation detail of the reader that ships with a dangerous default (see 
http://dev.clojure.org/jira/browse/CLJ-904).

The advice and necessity to tighten up *read-eval* as "good practice" is a 
design fault.  There are things that authors of certain key Clojure libraries 
can do to fix this up as a side effect of using those libraries, but it would 
obviously be ideal for Clojure/core to address the policy proactively.  
Otherwise, I'm certain that a time will come when people not steeped in Clojure 
arcana will be deploying vulnerable applications and services.  Unfortunately, 
I suspect that time has long since arrived...we just don't (yet?) have the 
eyeballs and juice that the Rails community has to produce controversy.

Cheers,

- Chas

On Jan 30, 2013, at 2:02 AM, Takahiro Hozumi wrote:

> As more and more projects are using edn format for config,
> communication and etc, I think that default value of *read-eval*,
> which is true, is source of vulnerability such as recently reported
> ring issue [1].
> And I don't understand why read-string depends on *read-eval* instead
> of argument.
> I believe optional argument is more preferable.
> What do you think?
> 
> [1] Ring 1.0.3 / 1.1.7 released to fix security flaw
> https://groups.google.com/group/clojure/browse_thread/thread/7b0fe662867b9124
> 
> -- 
> -- 
> 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/groups/opt_out.
> 
> 

-- 
-- 
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/groups/opt_out.


Reply via email to