Featured image of post apt/apt-get远程代码执行漏洞分析与修复

apt/apt-get远程代码执行漏洞分析与修复

本文详细分析了apt/apt-get软件包管理工具中存在的一个高危漏洞(CVE-2019-3462),该漏洞允许中间人攻击者或恶意镜像站在安装任何软件包时以root权限执行任意代码。文章包含漏洞技术细节、PoC演示视频以及临时缓解措施。

apt/apt-get中的远程代码执行漏洞

作者:Max Justicz
日期:2019年1月22日

漏洞概要

在apt中发现一个漏洞,允许网络中间人攻击者(或恶意软件包镜像站)在安装任何软件包时以root权限执行任意代码。该漏洞已在最新版apt中修复。若担心更新过程中被攻击,可通过禁用HTTP重定向进行防护:

1
2
$ sudo apt update -o Acquire::http::AllowRedirect=false
$ sudo apt upgrade -o Acquire::http::AllowRedirect=false

若当前镜像站默认使用重定向(导致无法更新apt),需更换镜像站或直接下载软件包。Debian具体升级指南见此,Ubuntu公告见此

技术背景

apt获取数据时会fork专用工作进程处理不同传输协议。父进程通过stdin/stdout与这些进程通信,使用类HTTP协议告知下载内容和存储位置。例如执行apt install cowsay时:

  1. HTTP工作进程返回能力声明:
1
2
3
4
100 Capabilities
Version: 1.2
Pipeline: true
Send-Config: true
  1. 父进程发送配置和资源请求:
1
2
3
4
5
6
7
8
9
601 Configuration
Config-Item: APT::Architecture=amd64
...(省略)...

600 URI Acquire
URI: http://deb.debian.org/debian/pool/main/c/cowsay/cowsay_3.03+dfsg2-3_all.deb
Filename: /var/cache/apt/archives/partial/cowsay_3.03+dfsg2-3_all.deb
Expected-SHA256: 858d5116a60ba2acef9f30e08c057ab18b1bd6df5ca61c233b6b7492fbf6b831
...(省略)...
  1. 工作进程返回下载状态:
1
2
3
4
5
201 URI Done
URI: http://deb.debian.org/debian/pool/main/c/cowsay/cowsay_3.03+dfsg2-3_all.deb
Filename: /var/cache/apt/archives/partial/cowsay_3.03+dfsg2-3_all.deb
Size: 20070
...(哈希校验信息)...

遇到HTTP重定向时,工作进程返回103 Redirect响应:

1
2
3
103 Redirect
URI: http://deb.debian.org/debian/pool/main/c/cowsay/cowsay_3.03+dfsg2-3_all.deb
New-URI: http://example.com/new-uri

漏洞细节

HTTP获取进程对Location头进行URL解码后直接拼接到响应中(基于Debian使用的1.4.y版本代码):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// From methods/basehttp.cc
NextURI = DeQuoteString(Req.Location);
...
Redirect(NextURI);

// From apt-pkg/acquire-method.cc
void pkgAcqMethod::Redirect(const string &NewURI) {
   std::cout << "103 Redirect\nURI: " << Queue->Uri << "\n"
             << "New-URI: " << NewURI << "\n"
             << "\n" << std::flush;
   Dequeue();
}

通过构造恶意Location头可实现响应注入。例如发送:

1
Location: /payload%0A%0A201%20URI%20Done%0AURI%3A%20http%3A//deb.debian.org/payload%0AFilename%3A%20/var/lib/apt/lists/deb.debian.org_debian_dists_stretch_Release.gpg%0ASize%3A%2020070...(省略)...

将产生伪造的201响应,使父进程信任攻击者控制的哈希值。

攻击实现

  1. 利用Release.gpg文件的可塑性,在其头部植入恶意.deb包:
1
2
3
<恶意deb内容>
-----BEGIN PGP SIGNATURE-----
...(真实签名)...
  1. 在注入的201响应中将Filename指向该文件路径

HTTPS与HTTP之争

Debian/Ubuntu默认使用HTTP镜像站(需额外安装apt-transport-https才能支持HTTPS)。虽然软件包清单有签名验证,但此类漏洞的存在表明HTTPS作为默认配置更为安全。

结论

感谢apt维护团队的快速修复和Debian安全团队的漏洞协调。该漏洞被分配CVE-2019-3462。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计