CVE-2021-44142:严重Samba漏洞允许远程代码执行

CVE-2021-44142:严重Samba漏洞

最近,在4.13.17之前的Samba版本中披露了一个分配给CVE-2021-44142的严重越界漏洞。Samba漏洞携带9.9的关键CVSS,允许攻击者在运行具有易受攻击配置的Samba服务器的机器上远程执行代码。该漏洞是作为Pwn2Own全球奥斯汀竞赛要求研究人员利用广泛使用的存在未知漏洞的软件和设备。今年,STAR实验室的研究人员因为利用了这个漏洞而赢得了4.5万美元西部数据My Cloud Home个人云NAS

Samba是SMB协议的实现,它通过网络为Windows平台提供文件和打印机互操作性。默认情况下,它不随Ubuntu或Debian发行版一起发布,但它是一个广泛安装的软件包,许多基于linux的物联网和网络设备默认包含公开开放的SMB服务。

该披露包含三个漏洞,它们存在于adouble.c—一个堆越界读,一个堆越界写,一个基于堆的缓冲区溢出。时可触发这些漏洞水果Samba配置中启用了VFS模块。

vfs_fruit模块提供了与Apple SMB客户端的增强兼容性和与Netatalk.Netatalk是一个免费的开源实现苹果归档协议(AFP),允许类unix操作系统作为macOS的文件服务器运行。该模块支持Samba和nettalk文件服务器之间的通信,以及苹果客户端共享文件的可见性。

CVE-2021-44142技术概述

vfs_fruit模块支持对共享使用备用数据流(ADS),并处理对流的所有访问: AFP_AfpInfo而且AFP_Resource,苹果的AppleDouble文件格式使用这些文件。访问文件的: AFP_AfpInfo流允许攻击者读取和写入其Netatalk的元数据,这些元数据存储在adouble结构初始化ad_get而且ad_fget功能。

此次披露指出了3个明显的漏洞。在pwn2own竞赛中,未经身份验证的远程代码执行是通过其中两种方法的组合实现的。类中的堆越界读取是第一个漏洞fruit_pread_meta_adouble函数,由函数调用fruit_pread_meta中存储的文件元数据时AFP_AfpInfo数据流adouble文件。更具体地说,这是由于缺乏对存储在AppleDouble文件格式中的Finder信息的验证而引起的ADEID_FINDERI元数据结构条目,可以被攻击者控制。

static ssize_t fruit_pread_meta_adouble(vfs_handle_struct *handle, files_struct *fsp, void *data, size_t n, off_t offset){…ad = ad_fget(talloc_tos(), handle, fsp, ADOUBLE_META);if (ad == NULL) {nread = -1;goto失败;} p = ad_get_entry(ad, ADEID_FINDERI);if (p == NULL) {DBG_ERR("No ADEID_FINDERI for [%s]\n", fsp_str_dbg(fsp));Nread = -1;goto失败;} memcpy(&ai->afpi_FinderInfo[0], p, ADEDLEN_FINDERI);Nread = afpinfo_pack(ai, afpinfo_buf);if (nread != AFP_INFO_SIZE) {nread = -1; goto fail; } memcpy(data, afpinfo_buf, n); nread = n; fail: TALLOC_FREE(ai); return nread; }

在上面的代码片段中,可以看到对ad_fdget,这将创建一个adouble结构中包含攻击者控制的数据,然后调用ad_get_entry它加载被操纵的ADEID_FINDERI指针的值,并可以使指针p指向adouble数据缓冲区。最后一次呼叫memcpy然后可用于读取已分配的缓冲区,从堆中转储数据。虽然攻击代码尚未发布,但可以安全地假设使用此OOB读取是为了绕过ASLR机制并构建稳定的远程攻击。

中使用的第二个漏洞是基于堆的缓冲区溢出ad_setdate函数,由于缺乏对文件的日期信息条目的验证而引起。

int ad_setdate(struct double *ad, unsigned int dateoff, uint32_t date) {bool xlate = (dateoff & AD_DATE_UNIX);char *p = NULL;p = ad_get_entry(ad, ADEID_FILEDATESI);if (p == NULL){返回-1;} dateoff &= AD_DATE_MASK;if (xlate){日期= AD_DATE_FROM_UNIX(日期);} if (dateoff > AD_DATE_ACCESS){返回-1;} memcpy(p + dateoff, &date, sizeof(date));返回0;}

ADEID_FILEDATESI项没有被验证,它可以用来溢出目标缓冲区,由指针指向p,当memcpy执行调用。这两个漏洞的组合被用来执行稳定的远程代码执行。

补丁Samba为CVE-2021-44142发布的功能介绍ad_entry_check_size,它用于验证AppleDouble文件格式中条目的大小。除了这个函数外,还有一个名为AFPINFO_EA_NETATALK是为了防止攻击者设置扩展Netatalk文件属性而引入的,这是触发发现这些漏洞的机制的必要步骤。

CVE-2021-44142的可利用性如何?

要触发此漏洞,攻击者需要将一个新文件上传到Samba共享,这需要该共享的写权限。根据Samba服务器的配置,这可能允许未经身份验证的用户或已经过身份验证的用户(甚至根本不允许)使用。允许未经身份验证利用此问题的一种方法是指定可写的而且客人好了在特定目录上的Samba配置中的设置。

另一个要求,也许是更实质性的要求,是包含vfs_fruitSamba配置中的模块。尽管这个模块在默认情况下是禁用的,但是有些NAS供应商打算支持Apple客户端并默认启用这个模块。

通过指定水果vfs对象配置关键字conf中的:(注意这个键可能包含多个值)

VFS objects = fruit

vfs_fruit模块也有自己的配置。不幸的是,在默认配置中可以利用该漏洞vfs_fruit模块(同样,假设模块是启用的,这通常不是默认情况)。

的相关默认配置部分vfs_fruit模块Fruit:metadata= nettalk, Fruit:resource=file

当传输一个OS X格式的文件时,该文件包含2个fork,资源和数据。这些分支基本上是文件的部分:资源分支用于包含位图、窗口大小和图标,而数据分支用于存储结构化和非结构化数据。Fruit:metadata= nettalk, Fruit:resource=file声明这些流存储在哪里。如果在Samba配置中更改了这些默认值中的任何一个,则无法利用该漏洞。

该漏洞已被证明是可利用的,但该漏洞尚未公布。

如何检测CVE-2021-44142漏洞?

该漏洞存在于4.13.17之前的Samba版本中。

在前一节中可以看到,要使CVE可被利用,需要vfs_fruit模块注册在vfs对象的部分conf中的.此外,有必要Fruit表示元数据,Fruit表示资源配置设置为netatalk而且文件,分别为(注意—这是默认配置)。

您可以使用下面的命令来检查vfs_fruit模块正在使用。如前所述,这不是漏洞的唯一依赖项,但它是最显著的依赖项

Grep 'vfs对象\s*=。* /etc/samba/smb.conf \ bfruit \ b”

方法返回非空结果grep命令时,我们强烈建议将您的Samba包升级到固定版本之一。

远程检测vfs_fruit模块的存在可以通过测试扩展属性或备用数据流是否可以写入Samba共享来完成。写入格式错误的数据结构的文件: AFP_AfpInfoADS将导致失败,如果vfs_fruit模块已加载,但如果streams_xattr模块是由自身加载的,因为后者并不打算处理这些特殊的AFP扩展属性。

如何修复CVE-2021-44142?

建议通过软件升级解决该漏洞。

许多主要的Linux发行版都发布了修补过的Samba版本。参见相关升级说明Ubuntu红色的帽子,Debian(在撰写本文时,Debian中还没有可用的修复程序)。

对于在托管发行版之外运行的用户,该漏洞已在4.13.17、4.14.12和4.15.5版本的普通Samba代码库中修复。建议对其中一个版本进行软件更新,或者根据相关分支应用漏洞补丁4.15.54.14.12,或4.13.17并重新构建Samba。

哪些CVE-2021-44142缓解选项可用?

对于无法升级Samba包的用户,有几种方法可以缓解此漏洞—

  1. 在不需要支持苹果客户端设备的情况下,易受攻击的vfs_fruit模块可以从配置文件中删除/etc/samba/smb.conf.易受攻击的配置行开始vfs对象并包括水果模块,如如下配置行:
    VFS对象= someemodule水果someothermodule
    删除水果将禁用vfs_fruit模块。
  2. 由于攻击者必须能够将文件写入Samba共享才能利用此问题,因此确保只有受信任的用户才能写入文件是至关重要的。首先,确保来宾用户对任何目录都没有写权限。可以通过检查是否没有目录配置了这两个标志-来验证这一点
    可写= yes
    Guest ok = yes

除此之外,还要尽量减少可写Samba目录的数量,并确保为每个目录设置了强身份验证

结论

虽然Samba的CVE-2021-44142引入了一个CVSS评分为9.9的严重越界漏洞,但要成功利用该漏洞,需要满足几个重要的先决条件。这包括启用写访问的共享资源的配置和包含易受攻击的资源vfs_fruit模块。由于在常见的Linux发行版或Samba的默认配置中默认没有加载该模块,因此我们不期望在默认易受攻击的NAS设备之外广泛利用这个问题。

与JFrog安全研究保持最新

在我们的JFrog安全研究团队中跟踪最新的发现和技术更新安全研究博客文章并在推特上@JFrogSecurity

找到易受攻击的版本与JFrog x射线

除了曝光新安全漏洞JFrog为开发人员和安全团队提供了方便地访问其软件的最新相关信息(包括使用Samba版本和相关cve)的自动安全扫描JFrog x光SCA工具。