diff options
author | Marc Cornellà <hello@mcornella.com> | 2021-11-09 09:31:09 +0100 |
---|---|---|
committer | Marc Cornellà <hello@mcornella.com> | 2021-11-11 22:45:24 +0100 |
commit | 72928432f1ddaa244e02067dd7fc14948a4a5ce4 (patch) | |
tree | 6fa5d3e58a3b73bfa85791a0e2d736ee12671827 /plugins/hitokoto | |
parent | a263cdac9c15de4003d3289a53cad1d19c8cfb3f (diff) | |
download | zsh-72928432f1ddaa244e02067dd7fc14948a4a5ce4.tar.gz zsh-72928432f1ddaa244e02067dd7fc14948a4a5ce4.tar.bz2 zsh-72928432f1ddaa244e02067dd7fc14948a4a5ce4.zip |
fix(plugins): fix potential command injection in `rand-quote` and `hitokoto`
The `rand-quote` plugin uses quotationspage.com and prints part of its content to the
shell without sanitization, which could trigger command injection. There is no evidence
that this has been exploited, but this commit removes all possibility for exploit.
Similarly, the `hitokoto` plugin uses the hitokoto.cn website to print quotes to the
shell, also without sanitization. Furthermore, there is also no evidence that this has
been exploited, but with this change it is now impossible.
Diffstat (limited to 'plugins/hitokoto')
-rw-r--r-- | plugins/hitokoto/hitokoto.plugin.zsh | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/plugins/hitokoto/hitokoto.plugin.zsh b/plugins/hitokoto/hitokoto.plugin.zsh index 8646ebf3b..e346d18c5 100644 --- a/plugins/hitokoto/hitokoto.plugin.zsh +++ b/plugins/hitokoto/hitokoto.plugin.zsh @@ -1,14 +1,18 @@ if ! (( $+commands[curl] )); then - echo "hitokoto plugin needs curl to work" >&2 - return + echo "hitokoto plugin needs curl to work" >&2 + return fi function hitokoto { - emulate -L zsh - Q=$(curl -s --connect-timeout 2 "https://v1.hitokoto.cn" | jq -j '.hitokoto+"\t"+.from') + setopt localoptions nopromptsubst - TXT=$(echo "$Q" | awk -F '\t' '{print $1}') - WHO=$(echo "$Q" | awk -F '\t' '{print $2}') + # Get hitokoto data + local -a data + data=("${(ps:\n:)"$(command curl -s --connect-timeout 2 "https://v1.hitokoto.cn" | command jq -j '.hitokoto+"\n"+.from')"}") - [[ -n "$WHO" && -n "$TXT" ]] && print -P "%F{3}${WHO}%f: “%F{5}${TXT}%f”" + # Exit if could not fetch hitokoto + [[ -n "$data" ]] || return 0 + + local quote="${data[1]}" author="${data[2]}" + print -P "%F{3}${author}%f: “%F{5}${quote}%f”" } |