gradle / gradle-completion

Gradle tab completion for bash and zsh
MIT License
1.02k stars 131 forks source link

Security risk (?): Backticks in descriptions are attempted to eval! #91

Open Enrico2 opened 4 years ago

Enrico2 commented 4 years ago

We had a description defined like this with backticks:

description = "Runs dbmigrator --migrate on database started by `run-db-local` (eg via `:db:local:run`)."

Then in bash, I did

gradle :db:migrations[tab]

and saw:

$ gradle :db:migrations:-bash: run-db-local: command not found
-bash: :db:local:run: command not found
-bash: run-db-local: command not found
-bash: :db:local:run: command not found

Seems like this could be some attack vector, where a description could contain some malicious bash command.

mikesamuel commented 2 years ago

Could the problem be here?

https://github.com/gradle/gradle-completion/blob/5c863bf6e6702bb763051d2bc74220bf9e922f4c/gradle-completion.bash#L204-L208

IIUC that filters text like

assemble  - Assembles the outputs of this project.
bar:assemble  - Assembles the outputs of this project.
:bar:assemble  - Assembles the outputs of this project.
foo:assemble  - Assembles the outputs of this project.
:foo:assemble  - Assembles the outputs of this project

by prefix. Since it does

$( grep ... )

instead of

"$( grep ... )"

expansion may evaluate shell meta-characters.

mikesamuel commented 2 years ago

My bash is kind of weak right now though.

apflieger commented 1 year ago

Ahhh I see these things in my prompt for month now and I finally figured out this. The gradle plugin for building IntelliJ plugin have multiple tasks that includes backticks so I get this

./gradlew -bash: robot-server: command not found
-bash: robot-server: command not found
-bash: plugin.xml: command not found
-bash: plugin.xml: command not found
-bash: plugin.xml: command not found
-bash: plugin.xml: command not found

It comes from the following tasks descriptions

downloadRobotServerPlugin - Download robot-server plugin.

and

patchPluginXml - Patches plugin.xml files with values provided to the task.