专栏首页CNCF【独家】K8S漏洞报告|CVE-2019-11244漏洞解读

【独家】K8S漏洞报告|CVE-2019-11244漏洞解读

2019年5月,Kubernetes社区(后面简称”社区“)修复了标号为CVE-2019-11244的安全漏洞,这个修复方案似乎并不彻底,于是有人发布Issue对此提出异议,希望提供进一步修复方案。

虽然Kubernetes已经非常安全,但对于一些安全标准更高的用户来讲,还是需要针对Kubernetes做进一步的安全加固。

本文先深度分析一下这个漏洞,看在什么情况下会产生安全风险,接着再探讨一下这个漏洞应该如何修复,以但给广大Kubernetes用户提供一些提示。

1

背景知识

为了能更好的理解这个漏洞,需要一些关于Linux 文件权限的基础知识。

也许你经常使用chmod命令来为某个文件设置权限,比如给某个文件设置权限:chmod 755 xxx。这里755为十进制数字分别代表文件Owner权限、文件Owner同组用户权限和其他用户权限,如下图所示:

在Linux下,使用ls命令可以看到文件的权限,如下图所示:

针对一个文件设置权限无非就是限制文件的读、写和可执行权限,那么如何理解一个目录的读、写和可执行权限呢?跟据小范围调查,大多数人不能很好的回答这个问题:一个用户对某个目录拥有读或写权限分别意味着什么?

1

漏洞描述

CVE-2019-11244漏洞原文描述如下:

In Kubernetes v1.8.x-v1.14.x, schema info is cached by kubectl in the location specified by --cache-dir (defaulting to $HOME/.kube/http-cache), written with world-writeable permissions (rw-rw-rw-). If --cache-dir is specified and pointed at a different location accessible to other users/groups, the written files may be modified by other users/groups and disrupt the kubectl invocation.

简单的理解就是kubectl创建的缓存文件权限为rw-rw-rw-,也即666,这些缓存文件有被其他用户修改的风险。也就是说,kubelet创建的缓存文件权限没有得到有效的控制,其他用户(非文件所有者)可能有意或无意的修改这些文件,从而对kubelet的运行造成影响。

这里其他用户包含两类:

  • 同group下的其他用户(后面称group用户);
  • 不同group的其他用户(后面称other用户);

那么修复这个漏洞,就要收缩这些文件权限,只要做到这些文件不能被这两类用户修改即可(可以拥有读权限)。

1

社区修复方案

kubelet会创建一个专门的目录来存放缓存文件,所以这里既要控制目录权限还要控制文件的权限。

在社区的修复方案中,缓存目录权限由755变成了750,即other用户将不能进入这个目录,Group用户仍拥有r-x权限,即可以读取目录下的文件列表、可以进入该目录。

针对缓存文件的修改,权限由755变成了660,这里有三个变化:

  1. Owner用户不再拥有可执行权限(缓存文件拥有可执行文件权限本身也没有意义);
  2. Group用户拥有rw-权限,即Group用户仍然可以修改缓存文件;
  3. Other用户不授予任何权限(即便有权限也无效,因为上层目录已不能访问);

看到这里,问题就清楚了,缓存文件仍然可以被Group用户修改,实际上漏洞并没有完全修复。可以实际操作演示一下,这里如无特别说明表示使用root用户操作:

  • 创建一个目录,并设置权限为755: # mkdir -m 0750 myPath0750
  • 在目录中创建一个文件,并设置权限为660:# touch myPath0750/myFile0660; chmod 0660 myPath0750/myFile0660
  • 创建一个root组用户,并设置密码:# useradd -G root -d /home/horen -m horen; passwd horen
  • 切换到新用户,尝试修改文件内容:# echo "Hello" > myPath0750/myFile0660;

可以发现文件是可以被修改的。

1

加固方案

基于社区的修复方案,如果想进一步修复这个漏洞,可以把缓存文件的权限进一步收缩,由660变为640,即Group用户最多只能查看缓存文件内容。

另外,由于目录权限为750,Group用户对该目录没有写权限,所以不能修改目录名,不能在该目录下创建文件,达到目录专用的目的。

这里也顺便总结一下目录的可读、可写和可执行三个权限的含义。其实目录本身也是文件,其内容是其子层目录结构,比如目录中的文件列表,文件属性等。

  • 可读:表示你可以列出目录中有什么文件;
  • 可写:表示你可以在目录中创建、删除文件;
  • 可执行:表示你可以进入该目录;

1

后续

社区的修复方案虽不彻底也可以降低风险,有需要的可以考虑升级。社区方案已于2019年5月合入v1.12.9、v1.13.7、v1.14.3版本(当时1.15.0尚未发布)。

详细信息请查阅PR:

https://github.com/kubernetes/kubernetes/pull/77874

本文分享自微信公众号 - CNCF(lf_cncf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 每个人都必须遵循的九项Kubernetes安全最佳实践

    上个月,Kubernetes(世界上最受欢迎的容器编排器)生态系统因发现Kubernetes的第一个主要安全漏洞而动摇。该漏洞(CVE-2018-1002105...

    CNCF
  • 研发中:联邦SPIFFE信任域

    联邦信任域是SPIFFE和SPIRE最高需求和活跃开发的功能之一。在这篇博文中,我将概述我们当前的计划以及实施它的挑战。

    CNCF
  • CNCF网络研讨会:在Kubernetes上编写容器工作流脚本(视频+PDF)

    Brigade是一个集群内运行时,它解释脚本,并执行Kubernetes中的通用流水线。使用JavaScript,开发者可以将容器链接到一个脚本中,从而在Kub...

    CNCF
  • 【免费视频教程】webpack原理与实践【1】webpack预备知识

    打包工具帮你获得一些准备用于部署的js和css等,把它们转化为适合浏览器的可用的格式。

    web前端教室
  • webpack学习之入门实例

    webpack:前端打包神器,目前活跃度甚至超过了gulp、grunt等,使用webpack打包,简单快速,下面记录下webpack环境搭建以及基本使用: 1、...

    用户1141560
  • Linux的文件系统(3)

    文件系统(File system)泛指储存在计算机上的文件和目录。文件系统可以有不同的格式,叫做文件系统类型(file system types)。这些格式决定...

    用户2398817
  • 腾讯微云文件图标的设计探索

    ? 腾讯ISUX isux.tencent.com 社交用户体验设计 ? 全文4000字,阅读需要15分钟。作者将向你展示微云团队一路以来对文件图标设计的思...

    腾讯ISUX
  • 软件开发过程自动化原理及技术(完整示例)

    软件开发过程自动化原理及技术 一个简单完整的自动化示例 1   概述 关于本文,最开始只是想写一些关于 软件自动化测试开发 的文章,但是后来写着写着,发现不先在...

    用户1170933
  • (3/24)轻松配置 webpack3.x入口、出口配置项

    在上一节中我们只是简单的尝了一下webpack的鲜,对其有了基本的了解,对于上一节当中的打包方式,在实际开发中并不使用,而是通过webpack的配置文件的方式进...

    wfaceboss
  • Vue+ElementUI项目使用webpack输出MPA

    为另一个项目提供可嵌入的功能单页,大部分页面使用时都是独立功能页,个别页面带有左侧边栏(相当于3-4个页面的整合形态),由于资源定位地址的限定,每个页面打包为单...

    大史不说话

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动