CVE-2019-13139:Docker build 漏洞导致命令执行

漏洞原理

使用 docker build 命令构建本地镜像时,支持使用远程 url 参数作为构建环境,并且这个远程构建环境可以是一个 git 仓库。

在 Docker 18.9.4 之前版本中,docker build 过程中对 remoteUrl 解析存在缺陷,攻击者通过注入 --upload-pack 参数,向 git clone 传递恶意命令,从而在宿主机上执行任意代码。

POC

docker build "git@g.com/a/b#--upload-pack=touch 13139.txt;:"
部分内容作用
docker buildDocker 构建镜像的命令从指定路径构建 Docker 镜像
"git@g.com/a/b"Git 仓库的远程 URL(SCP 风格)告诉 Docker 从该地址克隆仓库作为构建上下文
#URL 片段分隔符(关键点)Docker 规定,# 之后的部分用于指定分支和子目录。整个 # 之后的内容,都会被当作 Git 的 refspec(引用规范)传递给后续的 git fetch/git clone 命令
--upload-pack=touch 13139.txt;攻击者注入的恶意参数由于 Docker 未对 # 后的内容进行有效验证,--upload-pack 参数被成功注入。该参数告诉 Git,在执行 fetch 时用 touch 13139.txt 代替默认的上传包程序。由于 Git 允许 --upload-pack 后跟任意命令,攻击者得以在宿主机上执行任意代码
;命令分隔符用于结束前一个命令,为后续可能的命令做准备,确保注入的命令独立执行
#(第二个)Git 注释符第二个 # 及其之后的内容(如 :)会被 Git 解释为注释,从而确保注入的命令语法正确,不会影响 git fetch 的正常执行流程

漏洞复现

image-20260903165907191

标签: none

添加新评论

邮箱仅用于识别回复,不会在页面公开。提交后请等待页面确认结果。

文章图片预览