Mic*_*ltu 5 visual-studio-code vscode-remote
我通常在 Docker 容器内工作,既保持本地环境清洁,又沙箱。但是,当我使用 VSCode 远程容器尝试打开容器中的文件夹时,我被告知:
打开开发容器中的文件夹可能会在容器内部和外部执行任意代码。
不幸的是,文档链接仅总体讨论了工作区信任,而没有提及任何有关容器的风险。
在开发容器中工作时,单击“信任文件夹并继续”会带来哪些具体风险? 通过单击此处的“信任”,我会面临哪些攻击媒介?除了在容器内部工作之外,我可以在 VSCode 中做些什么来减轻风险(例如,我可以禁用某些特定功能)吗?
这让我很好奇可能会出现什么问题,并且我找到了一些无需用户交互即可出去的方法
tasks.json
我认为它非常酷的功能可能会导致"runOn": "folderOpen"
在主机上执行任意代码,看看这个例子
{
"version": "2.0.0",
"tasks": [
{
"label": "start browser",
"type": "shell",
"command": "C:\\Progra~1\\Google\\Chrome\\Application\\chrome.exe https://stackoverflow.com",
"runOptions": {
"runOn": "folderOpen"
},
"dependsOn": ["back"]
},
{
"label": "back",
"command": "${command:remote-containers.reopenLocally}"
}
]
}
Run Code Online (Sandbox Code Playgroud)
您可能觉得在容器内运行任务是安全的,但是这个任务做了两件事
如果只需要信任此文件夹,那么带有选项的任务"runOn": "folderOpen"
将在无需您交互的情况下被触发
另一件事是,由于您的主机目录和 docker 内部的目录始终同步,因此它可能会修改自己的文件(包括tasks.json
),然后尝试执行它
features/docker-outside-of-docker
如果您正在运行开发容器,您可能会开始使用其他功能,其中之一称为docker-outside-of-docker
"features": {
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}
}
Run Code Online (Sandbox Code Playgroud)
如果 Dev Container 是完全远程的机器,也许你的主机不会被触及,但运行 docker 的机器可能会损坏
然后我们可以创建类似的任务
{
"label": "list host",
"type": "shell",
"command": "docker run --rm -v /:/host alpine whoami && cat /etc/passwd"
}
Run Code Online (Sandbox Code Playgroud)
并在主机上执行任何操作root
!
如果我们转到您提到的文档链接,我们可以在那里找到
限制模式尝试通过禁用或限制多个 VS Code 功能的操作来阻止自动代码执行:任务、调试、工作区设置和扩展。
您可以清楚地看到,这些功能tasks
与其他 VS Code 功能一起被禁用,这些功能可能会导致任意代码执行。
我没有尝试,但看看看起来launch.json
你也可以看到任何 shell 代码都可以执行,所以即使没有tasks
但有 Docker 主机访问也可能会损坏它,即使没有这个容器也可以访问你的本地网络并尝试攻击你的路由器、打印机或其他 PC,如果它们打开了某些端口,我知道它会变得很长,但有可能,请看一下三角测量操作:最后一个(硬件)之谜,尤其是这张图片
因此devcontainer.json
, 、tasks.json
和launch.json
位于工作区内部并包含可执行代码,因此它们必须是可信的
归档时间: |
|
查看次数: |
176 次 |
最近记录: |