V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blacktulip
V2EX  ›  Ruby on Rails

Rails 爆出严重安全漏洞

  •  
  •   blacktulip · 2012-03-05 04:04:25 +08:00 · 6950 次点击
    这是一个创建于 4684 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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字段了。
    sobigfish
        4
    sobigfish  
       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   ·   实用小工具   ·   1058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 22:39 · PVG 06:39 · LAX 14:39 · JFK 17:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.