Rails 爆出严重安全漏洞 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blacktulip
V2EX    Ruby on Rails

Rails 爆出严重安全漏洞

  •  
  •   blacktulip 2012-03-05 04:04:25 +08:00 7511 次点击
    这是一个创建于 5035 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Egor Homakov 这位俄罗斯黑客发现了 Rails 的严重安全漏洞。

    他在 http://homakov.blogspot.com/2012/03/egor-stop-hacking-gh.html 这篇文章中声称,由于 Rails 的开发人员忽略他的意见,他决定进行一下试验,拿 Github 开刀。

    他已经做到冒充其它用户发 post ,删除其他用的 post ,以及对任意 repository 进行 pull/commit/push 操作。为了证明他的话,他在 Rails 的 Master 里头 commit 了一下,见截图。



    他说不仅仅是 Github 。许多 Rails 开发的 app 都存在这个安全问题。
    25 条回复    1970-01-01 08:00:00 +08:00
    YvetteM
        1
    YvetteM  
       2012-03-05 06:13:14 +08:00
    太可怕了
    blacktulip
        2
    blacktulip  
    OP
       2012-03-05 06:21:32 +08:00
    可怜的家伙 github id 被 ban 了,他身上还有个 github logo 的纹身,结果没了账号 :S

    于是他一气之下贴出了方法 在 http://homakov.blogspot.com/2012/03/how-to.html

    不过据说 github 已经堵上了这个漏洞。
    daqing
        3
    daqing  
       2012-03-05 09:13:23 +08:00
    这个不是Rails的漏洞,而是开发者的问题:忘记保护user_id字段了。
    run2
        4
    run2  
       2012-03-05 09:19:50 +08:00
    怎么感觉是github 在ssh方面的漏洞啊
    huacnlee
        5
    huacnlee  
       2012-03-05 09:22:51 +08:00
    这个不是漏洞,而是开发人员在写的时候不够严谨导致:
    http://huacnlee.com/blog/rails-attr-protected-or-attr-accesible-fields/
    aidai524
        6
    aidai524  
       2012-03-05 09:31:02 +08:00
    收藏夹第四个, shu.im
    cngithub
        7
    cngithub  
       2012-03-05 09:33:33 +08:00
    真心不是Rails的bug。

    这种做法,其实Rails社区最佳实践以前讨论过。
    felinx
        8
    felinx  
       2012-03-05 10:11:15 +08:00
    注意看这段

    Egor Homakov

    About me
    Salut, I am Egor Homakov.
    born on 28 apr. 1993 in Russia.

    Programming, business, a bit of cooking and dancing, travelling, sometimes straightXedge sometimes vodka-guru. Geek&nerd in the past.
    Stay tuned, it is gonna be legen...
    just wait
    bhuztez
        9
    bhuztez  
       2012-03-05 10:18:01 +08:00
    @daqing @huacnless @cngithub

    也许可以换个思路来考虑下这个问题。

    既然ORM默认生成的SQL不该是SELECT *,同样的,一个框架默认的生成表单在保存的时候也不该设计成这样。问题不在于该不该有这功能,而是默认该是Opt-In的被搞成了Opt-Out。

    如果Rails不愿意改,那也只是表明Rails无意向对新手更友好的方向发展。可是每个人都有是新手的时候。
    m1a0
        10
    m1a0  
       2012-03-05 10:21:09 +08:00
    daqing
        11
    daqing  
       2012-03-05 10:24:57 +08:00
    @bhuztez 我认为ORM提供一种机制就可以了。
    ShiningRay
        12
    ShiningRay  
       2012-03-05 11:26:25 +08:00
    @bhuztez 新手会考虑安全性?你想得太多了
    explon
        13
    explon  
       2012-03-05 11:31:48 +08:00
    这人 93 年生的?
    ywjno
        14
    ywjno  
       2012-03-05 11:32:31 +08:00
    @bhuztez 新手都是用scaffold来生成controller、model、view的,那时候model都还没保护字段那么一说
    est
        15
    est  
       2012-03-05 11:50:17 +08:00
    @ShiningRay 正因为新手不会考虑安全性,所以web framework应该把这些工作默认做好。

    github都会犯的rails错误,不知道全世界有多少网站有类似的错误。
    insraq
        16
    insraq  
       2012-03-05 11:51:44 +08:00
    这是Rails处理Mass assignment的问题,现在的做法让许多新手容易造成漏洞,Homakov曾经在Rails@Github上提出这个问题,但是被关闭了,理由是:保证App的安全,不是Rails的责任,而是开发者的责任。于是Homakov用另外一种方法来告诉Rails即使是Github这种有许多优秀开发员的地方,都无法避免漏洞。当然之后Github的处理方法引来了不少争议,不过后来他们也及时的补救了。
    mywaiting
        17
    mywaiting  
       2012-03-05 12:02:08 +08:00
    我总觉得,太偷懒的地方都容易出Bug......

    在向Db写入数据的时候,真心感觉自己有洁癖,没有一项项正则检查过,绝不会直接Model.save()
    bhuztez
        18
    bhuztez  
       2012-03-05 12:48:54 +08:00
    @greenymora github不值得你每个月给他们7美元。
    mywaiting
        19
    mywaiting  
       2012-03-05 13:12:41 +08:00
    @aidai524 这么赤裸裸的分享电子书的,迟早被清理.....低调.....
    ywjno
        20
    ywjno  
       2012-03-05 13:39:31 +08:00
    对岸rails的牛人xdite在今天的blog中也说了这件事情,可以推荐看看, http://blog.xdite.net/posts/2012/03/05/github-hacked-rails-security/
    ShiningRay
        21
    ShiningRay  
       2012-03-05 14:29:59 +08:00
    @est Worse is better。

    想想PHP,我很久没写PHP了,现在不知道情况如何。很多人现在学写PHP还是在用老套的方法,甚至 5.0 时代还有很多人要把 register global 打开。也有相当多的人,他们并不知道使用一套PHP框架,也不会去做防sql注入的工作。如果这些都是PHP的责任的话,那PHP就累死了。

    还有比如Rails内置的防CSRF功能,我见过不少人是直接关闭的。

    所以,底层框架是弥补不了使用者的偷懒的。

    PS: 我隐约记得 C vs C++ 也有很多类似的讨论。
    est
        22
    est  
       2012-03-05 16:15:46 +08:00
    @ShiningRay


    > 底层框架是弥补不了使用者的偷懒的。

    那为什么java/python等语言就很少有C/C++里面那种strcpy()溢出?
    ssword
        23
    ssword  
       2012-03-05 17:38:44 +08:00
    @est 语言再好,阻止不了人写烂代码。Java的垃圾代码海了去了。有了垃圾收集,防止菜鸟用户轰掉自己腿的保护机制上来,又快又安全的高质量代码就从天上掉下来了?

    写的代码不好可以怨语言,但是首先人自身肯定有问题。
    chloerei
        24
    chloerei  
       2012-03-05 17:56:48 +08:00
    Rails Master 分支默认开启属性白名单了

    https://github.com/rails/rails/commit/641a4f62405cc2765424320932902ed8076b5d38

    github 团队证明了确实单靠开发者自我约束确实是很大风险。[您获得了奖杯:中下水平Rails开发者!]
    ccinls
        25
    ccinls  
       2012-03-06 03:16:05 +08:00
    完全是开发者的问题,不是Rails的漏洞~ http://yes2.me/archives/1440
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1007 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 18:37 PVG 02:37 LAX 10:37 JFK 13:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86