V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mengzhuo
V2EX  ›  信息安全

Bash 新漏洞:用户可以执行 root 权限

  •  
  •   mengzhuo · 2014-09-25 09:38:43 +08:00 · 9455 次点击
    这是一个创建于 3495 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Github上通知的
    http://seclists.org/oss-sec/2014/q3/649

    共享VPS的可得小心了……
    第 1 条附言  ·  2014-09-25 11:02:02 +08:00
    请参考 http://seclists.org/oss-sec/2014/q3/650

    主要是bash对环境变量的解读有问题

    导致所有CGI接口的程序都是潜在的受害者
    第 2 条附言  ·  2014-09-25 11:10:12 +08:00
    三个维度的攻击,CGI,OpenSSH,和牵扯着环境变量的程序,感觉不比心血差

    So far, HTTP requests to CGI scripts have been identified as the major
    attack vector.
    ....
    The other vector is OpenSSH, either through AcceptEnv variables, TERM
    or SSH_ORIGINAL_COMMAND.
    Other vectors involving different environment variable set by
    additional programs are expected.
    第 3 条附言  ·  2014-09-25 11:32:59 +08:00
    红帽的文章:
    如何构建攻击
    https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/

    爆漏洞的邮件组里大家已经开始指责作者在embargo内向外透露了这个漏洞的详细信息……江湖味太浓了
    34 条回复    2014-09-25 22:11:09 +08:00
    jasontse
        1
    jasontse  
       2014-09-25 09:51:33 +08:00 via Android
    webshell 也要注意被提权
    semicircle21
        2
    semicircle21  
       2014-09-25 09:53:13 +08:00
    常年 root 敢死队用户表示这都不是事儿~
    chinni
        3
    chinni  
       2014-09-25 09:57:35 +08:00
    Cent 好像已经修复了?
    lyragosa
        4
    lyragosa  
       2014-09-25 09:58:00 +08:00
    zsh用户表示应该无影响?
    steptodream
        5
    steptodream  
       2014-09-25 10:08:44 +08:00
    @lyragosa 除非你系统没装bash
    66beta
        7
    66beta  
       2014-09-25 10:10:52 +08:00
    俺的DO上只有测试站点,不怕不怕
    顶多被copy走价值2万多的知识产权
    LazyZhu
        8
    LazyZhu  
       2014-09-25 10:14:13 +08:00   ❤️ 1
    业务使用的 Debian 其实只要加一个安全补丁源,每天更新下就可以了。
    https://www.debian.org/security/
    coolicer
        9
    coolicer  
       2014-09-25 10:17:29 +08:00
    @LazyZhu Ubuntu可以用吗?
    LazyZhu
        10
    LazyZhu  
       2014-09-25 10:22:24 +08:00
    @coolicer
    https://help.ubuntu.com/14.04/serverguide/configuration.html
    Ubuntu也有相应的关键安全补丁源的
    glasslion
        11
    glasslion  
       2014-09-25 10:27:08 +08:00
    @lyragosa csh, tcsh, ksh, sh, and zsh 无一幸免
    dndx
        12
    dndx  
       2014-09-25 10:27:17 +08:00
    root 权限有点夸张了吧,bash 又不是 setuid 的程序。
    Tink
        13
    Tink  
       2014-09-25 10:27:35 +08:00 via iPhone
    我去,那zsh呢
    heiher
        14
    heiher  
       2014-09-25 10:49:08 +08:00
    哪里有说和 root 权限有关了?
    cxl008
        15
    cxl008  
       2014-09-25 10:55:48 +08:00
    求方法
    lsylsy2
        16
    lsylsy2  
       2014-09-25 11:20:04 +08:00
    @LazyZhu 有办法在命令里只更新来自这个源的内容么?
    万一用cron更新的时候把别的什么软件版本更新了出问题就囧了……
    LazyZhu
        17
    LazyZhu  
       2014-09-25 11:41:40 +08:00
    @lsylsy2
    笨办法,多个sources.list切换

    /etc/apt/sources.list.security
    /etc/apt/sources.list.all
    fany
        18
    fany  
       2014-09-25 12:17:42 +08:00 via iPhone
    如果您使用的是CentOS、RedHat或Fedora,请在SSH下执行以下命令:
    yum clean all
    yum update bash
    如果您用的系统是Ubuntu或Debian,请在SSH下执行以下命令:
    apt-get update
    apt-get upgrade
    dorentus
        19
    dorentus  
       2014-09-25 12:27:04 +08:00
    没看到和 root 权限相关的说明。

    CGI 暂且不提(反正多年没用过 CGI 了),
    我的本地和远程机器的登录 shell 都是 fish shell,

    ---- 本地 ----

    1) env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
    显示果然有漏洞

    2) env x='() { :;}; echo vulnerable' fish -c "echo this is a test"
    没触发漏洞

    3) env x='() { :;}; echo vulnerable' zsh -c "echo this is a test"
    没触发漏洞

    4) set -x x '() { :;}; echo vulnerable' # 相当于 bash 的 export x=...
    bash -c "echo this is a test"
    触发漏洞

    ---- ssh ----
    5) set -x x '() { :;}; echo vulnerable'
    ssh 到远程机器之后执行:bash -c "echo this is a test"
    没见漏洞(这是自然的,因为远程机器 sshd 配置里面 AcceptEnv 只允许了 LANG LC_*)

    6) 那么试试 set -x LANG '() { :;}; echo vulnerable' # 这里`包括之后每次执行一条命令都会有警告 locale 不对
    再 ssh 到远程机器,看了下,LANG 没传递过去……
    那么执行:bash -c "echo this is a test"
    很自然地还是没见漏洞

    7) 再试 set -x TERM '() { :;}; echo vulnerable'
    ssh 到远程机器,远程 fish shell 提示:Could not set up terminal
    然后连接断开

    PS: 同第六步,设置 LANG 之后,ssh 到另一台登录 shell 为 bash 的机器上,LANG 依然是没传递过去
    同第七步,设置 TERM,然后 ssh 到另一台登录 shell 为 bash 的机器上,终于成功触发了漏洞
    mind3x
        20
    mind3x  
       2014-09-25 12:33:53 +08:00
    见风就是雨……谁说的有root?谁说的其他shell也中招?瞎JB扯...
    mornlight
        21
    mornlight  
       2014-09-25 12:34:30 +08:00
    @fany 没看到更新啊yum update bash后显示No Packages marked for Update
    heganj
        22
    heganj  
       2014-09-25 12:39:39 +08:00
    hjc4869
        24
    hjc4869  
       2014-09-25 12:58:26 +08:00
    apt-get purge bash;
    Havee
        25
    Havee  
       2014-09-25 13:01:12 +08:00
    os x 怎么说
    mengzhuo
        26
    mengzhuo  
    OP
       2014-09-25 14:08:08 +08:00
    @mind3x

    很多服务是用Root权限跑的,
    这些用root权限+和环境变量相关的结构就有可能制造攻击,DHCP、打印机、samba、Apache
    懂?
    mind3x
        27
    mind3x  
       2014-09-25 14:19:15 +08:00
    @mengzhuo 你用root来跑apache? 也是醉了。提权归提权,bash归bash,别混为一谈。
    nicai000
        28
    nicai000  
       2014-09-25 14:24:31 +08:00
    @mengzhuo 你才不懂吧, 这个漏洞就事论事, 和"用户可以执行root权限"区别很大, 不可一概而论.

    而且CGI现在几个人用? 另外你的DHCP, 打印机, samba都能接收命令挂钩BASH CGI? 别闹了好嘛?
    mengzhuo
        29
    mengzhuo  
    OP
       2014-09-25 14:40:00 +08:00
    @nicai000
    @mind3x

    不是我说的
    http://blog.erratasec.com/2014/09/bash-shellshock-bug-is-wormable.html#.VCOXsCtdWf8


    而且:
    随便一台Debian

    ps aux | grep root
    root 1259 0.0 0.0 10232 1000 ? S 9月15 0:01 /sbin/dhclient
    root 28592 0.0 0.1 279040 4784 ? S 9月16 0:01 smbd -F

    呵呵
    nicai000
        30
    nicai000  
       2014-09-25 14:54:36 +08:00
    @mengzhuo 他不懂你更不懂, 没问题啊. 而且他也没说把这个和简单提权混为一谈. 还是得说回来, dhcp和smb挂了bash cgi? 没有就没事儿啊, 呵呵.
    palxex
        31
    palxex  
       2014-09-25 17:12:08 +08:00
    homebrew通过bottle安装的注意:没用。请自行build-from-source!
    dorentus
        32
    dorentus  
       2014-09-25 19:44:21 +08:00
    @mengzhuo
    稍微正常一点的服务,即使用 root 的话也是做一些设置之后就 drop root 权限、切换到普通权限用户的。

    我的机器上,没有 dhclient 和 smbd。(再说 dhclient 又不会从网络获取什么环境变量,更不用说 shell 了)。

    ps aux | grep root 能看到的,可能会受影响的,也就是 nginx 而已。但是 nginx 也只是 master process 是用 root 跑的,它没有监听任何端口;监听端口、提供 HTTP service 的那些子进程,都是用 www-data 用户跑的。
    9hills
        33
    9hills  
       2014-09-25 20:12:03 +08:00
    lz不要耸人听闻,哪里root提权了
    iwinux
        34
    iwinux  
       2014-09-25 22:11:09 +08:00
    真是笑死
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2895 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 02:47 · PVG 10:47 · LAX 19:47 · JFK 22:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.