有关 Apache Spark 应具有哪些安全属性以及如何配置各种安全功能的信息,请参阅Spark 安全文档。
Apache Spark 使用 Apache 安全团队概述的标准流程来报告漏洞。 请注意,在项目做出响应之前,不应公开披露漏洞。
要报告可能的安全漏洞,请发送电子邮件至 security@spark.apache.org
。这是一个非公开列表,会发送给 Apache 安全团队以及 Spark PMC。
不,这本身不被认为是问题或漏洞,因为远程代码执行是 Apache Spark 设计和目的的基础。 用户可以在 Spark 作业中提交代码,这些代码将无条件执行,而不会尝试限制可以运行的代码。 启动其他进程、建立网络连接或访问和修改本地文件是可能的。 任何能够使用 Spark 集群的人通常已经完全控制了资源管理器(YARN、Kubernetes 等)分配给其 Spark 应用程序的资源。
从历史上看,我们收到了许多代码执行漏洞报告,但我们拒绝了这些报告,因为这是设计使然。 完全访问已配置的应用程序资源是预期的; 然而,不期望用户应用程序可以影响资源管理器配置的资源之外的资源。
我们强烈建议不要将 Spark 集群(包括 UI 和提交端点)直接暴露给公共互联网或不受信任的网络。 我们建议在受信任的网络(公司内部网、私有云环境)内访问,并使用强大的身份验证、授权和网络控制来限制对 Spark 集群的访问。
此 CVE 仅是对 CVE-2022-33891 的更新,以明确版本 3.1.3 也受到影响。 否则,它不是新的漏洞。 请注意,Apache Spark 3.1.x 现在已 EOL。
严重性:中
供应商:Apache 软件基金会
受影响的版本
描述
在 3.4.0 之前的 Apache Spark 版本中,使用 spark-submit 的应用程序可以指定一个要作为其运行的“代理用户”,从而限制权限。 然而,应用程序可以通过在类路径上提供与恶意配置相关的类,以提交用户的权限执行代码。 这会影响依赖代理用户的架构,例如使用 Apache Livy 管理提交的应用程序的架构。
此问题正在被跟踪为 SPARK-41958
缓解措施
spark.submit.proxyUser.allowCustomClasspathInClusterMode
设置为其默认值“false”,并且未被提交的应用程序覆盖。鸣谢
严重性:中
供应商:Apache 软件基金会
受影响的版本
描述
Apache Spark 3.2.1 及更早版本,以及 3.3.0 中存在存储的跨站脚本 (XSS) 漏洞,攻击者可以将恶意负载包含到日志中,该日志将在 UI 中呈现的日志中返回,从而允许远程攻击者在用户的 Web 浏览器中执行任意 JavaScript。
缓解措施
鸣谢
严重性:重要
供应商:Apache 软件基金会
受影响的版本
描述
Apache Spark UI 提供了通过配置选项 spark.acls.enable 启用 ACL 的可能性。 使用身份验证过滤器,这将检查用户是否具有查看或修改应用程序的访问权限。 如果启用了 ACL,HttpSecurityFilter 中的代码路径允许某人通过提供任意用户名来执行模拟。 恶意用户可能随后能够访问权限检查功能,该功能最终将根据他们的输入构建 Unix shell 命令并执行它。 这将导致以 Spark 当前运行的用户身份执行任意 shell 命令。
缓解措施
鸣谢
严重性:中
供应商:Apache 软件基金会
受影响的版本
描述
Apache Spark 支持通过 spark.authenticate
和 spark.network.crypto.enabled
对 RPC 连接进行端到端加密。 在 3.1.2 及更早版本中,它使用定制的相互身份验证协议,该协议允许完全加密密钥恢复。 在初始交互式攻击之后,这将允许某人离线解密纯文本流量。 请注意,这不会影响由 spark.authenticate.enableSaslEncryption
、spark.io.encryption.enabled
、spark.ssl
、spark.ui.strictTransportSecurity
控制的安全机制。
缓解措施
鸣谢
严重性:重要
供应商:Apache 软件基金会
受影响的版本
描述
在 Apache Spark 2.4.5 及更早版本中,可以将独立资源管理器的 master 配置为通过共享密钥要求身份验证 (spark.authenticate
)。 但是,启用后,即使没有共享密钥,也可以成功地将特别制作的 RPC 发送到 master,以在 Spark 集群上启动应用程序的资源。 这可以用于在主机上执行 shell 命令。
这不会影响使用其他资源管理器(YARN、Mesos 等)的 Spark 集群。
缓解措施
鸣谢
严重性:重要
供应商:Apache 软件基金会
受影响的版本
描述
在 Spark 2.3.3 之前,在某些情况下,Spark 会将用户数据未加密地写入本地磁盘,即使 spark.io.encryption.enabled=true
也是如此。 这包括提取到磁盘的缓存块(由 spark.maxRemoteBlockSizeFetchToMem
控制); 在 SparkR 中,使用 parallelize; 在 Pyspark 中,使用 broadcast 和 parallelize; 以及 python udfs 的使用。
缓解措施
鸣谢
严重性:重要
供应商:Apache 软件基金会
受影响的版本
描述
使用 PySpark 时,不同的本地用户可以连接到 Spark 应用程序并模拟运行 Spark 应用程序的用户。 这会影响版本 1.x、2.0.x、2.1.x、2.2.0 到 2.2.2 以及 2.3.0 到 2.3.1。
缓解措施
鸣谢
严重性:低
供应商:Apache 软件基金会
受影响的版本
描述
Spark 的独立资源管理器接受要执行在“master”主机上的代码,然后该代码在“worker”主机上运行。 按照设计,master 本身不执行用户代码。 但是,一个精心制作的到 master 的请求也会导致 master 执行代码。 请注意,这不会影响启用了身份验证的独立集群。 虽然 master 主机通常比 worker 主机对其他资源的传出访问权限少,但在 master 上执行代码仍然是意料之外的。
缓解措施
在任何未以其他方式受到保护而免受不必要访问的 Spark 独立集群上启用身份验证,例如通过网络级限制。 使用 spark.authenticate
以及 https://spark.apache.org/docs/latest/security.html 中描述的相关安全属性
鸣谢
严重性:低
供应商:Apache 软件基金会
受影响的版本
描述
Spark 基于 Apache Maven 的构建包含一个方便的脚本“build/mvn”,该脚本下载并运行一个锌服务器以加速编译。 默认情况下,此服务器将接受来自外部主机的连接。 一个精心制作的到锌服务器的请求可能会导致它泄露构建运行开发者帐户可读的文件中的信息。 请注意,此问题不会影响 Spark 的最终用户,只会影响从源代码构建 Spark 的开发者。
缓解措施
鸣谢
严重性:中
供应商:Apache 软件基金会
受影响的版本
描述
从 1.3.0 版本开始,Spark 的独立 Master 除了 spark-submit
使用的提交机制外,还公开了一个用于作业提交的 REST API。在独立模式下,配置属性 spark.authenticate.secret
建立了一个共享密钥,用于验证通过 spark-submit
提交作业的请求。但是,REST API 不使用此密钥或任何其他身份验证机制,并且这没有得到充分的文档说明。在这种情况下,用户可以使用 REST API 运行驱动程序,而无需进行身份验证,但无法启动执行器。当设置为以集群模式运行时(即,同时运行 MesosClusterDispatcher
时),Mesos 也会使用此 REST API 来进行作业提交。未来版本的 Spark 将改进有关这些点的文档,并禁止在运行 REST API 时设置 spark.authenticate.secret
,以明确说明这一点。未来的版本还将通过将 spark.master.rest.enabled
的默认值更改为 false
,在独立 Master 中默认禁用 REST API。
缓解措施
对于独立 Master,如果未使用 REST API,请将 spark.master.rest.enabled
设置为 false
以禁用 REST API,和/或确保对 REST API 的所有网络访问(默认端口 6066)都仅限于受信任的主机才能提交作业。Mesos 用户可以停止 MesosClusterDispatcher
,但这会阻止他们在集群模式下运行作业。或者,他们可以确保对 MesosRestSubmissionServer
(默认端口 7077)的访问仅限于受信任的主机。
鸣谢
严重性:中
受影响的版本
描述
在 Apache Spark 2.1.0 到 2.1.2、2.2.0 到 2.2.1 和 2.3.0 中,恶意用户可以构造一个指向 Spark 集群 UI 的作业和阶段信息页面的 URL,如果用户被欺骗访问该 URL,则可能导致脚本执行并暴露用户从 Spark UI 看到的信息。虽然某些浏览器(如最新版本的 Chrome 和 Safari)能够阻止此类攻击,但当前版本的 Firefox(以及可能其他浏览器)则不能。
缓解措施
鸣谢
严重性:高
供应商:Apache 软件基金会
受影响的版本
描述
在 Apache Spark 直到并包括 2.1.2、2.2.0 到 2.2.1 和 2.3.0 中,当使用 PySpark 或 SparkR 时,不同的本地用户可以连接到 Spark 应用程序并模拟运行 Spark 应用程序的用户。
缓解措施
鸣谢
JIRA: SPARK-20922
严重性:中
供应商:Apache 软件基金会
受影响的版本
描述
在 Apache Spark 1.6.0 到 2.1.1 中,启动器 API 对其套接字接收的数据执行不安全的反序列化。 这使得使用启动器 API 以编程方式启动的应用程序可能会受到攻击者的任意代码执行攻击,该攻击者可以访问本地计算机上的任何用户帐户。 它不会影响 spark-submit 或 spark-shell 运行的应用程序。 攻击者将能够以运行 Spark 应用程序的用户身份执行代码。 建议用户更新到 2.1.2、2.2.0 或更高版本。
缓解措施
更新到 Apache Spark 2.1.2、2.2.0 或更高版本。
鸣谢
JIRA: SPARK-20393
严重性:中
供应商:Apache 软件基金会
受影响的版本
描述
攻击者有可能利用用户对服务器的信任,诱骗他们访问指向共享 Spark 集群的链接,并将包括 MHTML 在内的数据提交给 Spark Master 或历史服务器。 然后,此数据(可能包含脚本)将被反映回用户,并且可能被基于 MS Windows 的客户端评估和执行。 这不是对 Spark 本身的攻击,而是对用户的攻击,当查看 Spark Web UI 的元素时,用户可能会不小心执行该脚本。
缓解措施
更新到 Apache Spark 2.1.2、2.2.0 或更高版本。
示例
请求
GET /app/?appId=Content-Type:%20multipart/related;%20boundary=_AppScan%0d%0a--
_AppScan%0d%0aContent-Location:foo%0d%0aContent-Transfer-
Encoding:base64%0d%0a%0d%0aPGh0bWw%2bPHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD48L2h0bWw%2b%0d%0a
HTTP/1.1
响应摘录
<div class="row-fluid">No running application with ID Content-Type: multipart/related;
boundary=_AppScan
--_AppScan
Content-Location:foo
Content-Transfer-Encoding:base64
PGh0bWw+PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD48L2h0bWw+
</div>
结果:在上面的有效负载中,BASE64 数据解码为
<html><script>alert("XSS")</script></html>
鸣谢