https://bugs.gentoo.org/756838 https://gitlab.freedesktop.org/xdg/xdg-utils/-/commit/5f3f563d69ae72bbefe9031c68d8167935abcba5 From 5f3f563d69ae72bbefe9031c68d8167935abcba5 Mon Sep 17 00:00:00 2001 From: Slatian Date: Sat, 14 Oct 2023 13:14:44 +0200 Subject: [PATCH] Fix CVE-2020-27748 by paasing attachments seperately --- scripts/xdg-email.in | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/scripts/xdg-email.in b/scripts/xdg-email.in index 4e3a5e8..6d83b0a 100644 --- a/scripts/xdg-email.in +++ b/scripts/xdg-email.in @@ -30,11 +30,14 @@ _USAGE #@xdg-utils-common@ +# (thunderbird_binary, mailto_uri, attached_files) run_thunderbird() { local THUNDERBIRD MAILTO NEWMAILTO TO CC BCC SUBJECT BODY ATTACH THUNDERBIRD="$1" MAILTO="$(echo "$2" | sed 's/^mailto://')" + ATTACH="$3" + echo "$MAILTO" | grep -qs "^?" if [ "$?" = "0" ] ; then MAILTO="$(echo "$MAILTO" | sed 's/^?//')" @@ -48,7 +51,6 @@ run_thunderbird() BCC="$(/bin/echo -e "$(echo "$MAILTO" | grep '^bcc=' | sed 's/^bcc=//;s/%\(..\)/\\x\1/g' | awk '{ printf "%s,",$0 }')")" SUBJECT="$(echo "$MAILTO" | grep '^subject=' | tail -n 1)" BODY="$(echo "$MAILTO" | grep '^body=' | tail -n 1)" - ATTACH="$(/bin/echo -e "$(echo "$MAILTO" | grep '^attach=' | sed 's/^attach=//;s/%\(..\)/\\x\1/g' | awk '{ printf "%s,",$0 }' | sed 's/,$//')")" if [ -z "$TO" ] ; then NEWMAILTO= @@ -82,6 +84,7 @@ run_thunderbird() fi } +# (mailto, attach) open_kde() { local kreadconfig profile client @@ -104,7 +107,7 @@ open_kde() fi if echo "$client" | grep -Eq 'thunderbird|icedove'; then - run_thunderbird "$client" "$1" + run_thunderbird "$client" "$1" "$2" fi fi fi @@ -137,6 +140,7 @@ open_kde() fi } +# (mailto, attach) open_gnome3() { local client @@ -144,7 +148,7 @@ open_gnome3() desktop="$(xdg-mime query default "x-scheme-handler/mailto")" client="$(desktop_file_to_binary "$desktop")" case "$client" in *thunderbird*|*icedove*) - run_thunderbird "$client" "$1" + run_thunderbird "$client" "$1" "$2" esac if gio help open 2>/dev/null 1>&2; then @@ -165,12 +169,13 @@ open_gnome3() fi } +# (mailto, attach) open_gnome() { local client client="$(gconftool-2 --get /desktop/gnome/url-handlers/mailto/command | cut -d ' ' -f 1)" case "$client" in *thunderbird*|*icedove*) - run_thunderbird "$client" "$1" + run_thunderbird "$client" "$1" "$2" esac if gio help open 2>/dev/null 1>&2; then @@ -191,7 +196,7 @@ open_gnome() fi } - +# (mailto, attach) open_lxqt() { local client @@ -200,7 +205,7 @@ open_lxqt() client="$(desktop_file_to_binary "$desktop")" echo "$client" | grep -E 'thunderbird|icedove' > /dev/null 2>&1 if [ $? -eq 0 ] ; then - run_thunderbird "$client" "$1" + run_thunderbird "$client" "$1" "$2" fi if qtxdg-mat open --help 2>/dev/null 1>&2; then @@ -261,6 +266,7 @@ open_flatpak() fi } +# (mailto, attach) open_generic() { local client @@ -268,7 +274,7 @@ open_generic() desktop="$(xdg-mime query default "x-scheme-handler/mailto")" client="$(desktop_file_to_binary "$desktop")" case "$client" in *thunderbird*|*icedove*) - run_thunderbird "$client" "$1" + run_thunderbird "$client" "$1" "$2" esac xdg-open "$1" @@ -317,6 +323,8 @@ LC_ALL="$ORIG_LC_ALL" options= mailto= +# attach is a comma seperated list of url encoded filenames +attach= utf8="iconv -t utf8" while [ $# -gt 0 ] ; do parm="$1" @@ -383,7 +391,7 @@ while [ $# -gt 0 ] ; do fi url_encode "$file" - options="${options}attach=${result}&" + attach="${attach}${attach:+,}${result}" shift ;; @@ -436,7 +444,7 @@ mailto="$(echo "${mailto}"| sed 's/[?&]$//')" [ x"${mailto}" != x"" ] || exit_failure_syntax if command -v @NAME@-hook.sh > /dev/null; then - @NAME@-hook.sh "${mailto}" + @NAME@-hook.sh "${mailto}" "$attach" if [ $? -eq 0 ]; then exit_success else @@ -456,35 +464,41 @@ fi case "$DE" in envvar) + [ -z "$attach" ] || \ + exit_failure_operation_impossible "Unable to use --attach with the MAILER envoirnment variable" open_envvar "${mailto}" ;; kde) - open_kde "${mailto}" + open_kde "${mailto}" "$attach" ;; gnome) - open_gnome "${mailto}" + open_gnome "${mailto}" "$attach" ;; gnome3|cinnamon|lxde|mate|deepin) - open_gnome3 "${mailto}" + open_gnome3 "${mailto}" "$attach" ;; lxqt) - open_lxqt "${mailto}" + open_lxqt "${mailto}" "$attach" ;; xfce) + [ -z "$attach" ] || \ + exit_failure_operation_impossible "Unable to use --attach with the Xfce opener" open_xfce "${mailto}" ;; flatpak) + [ -z "$attach" ] || \ + exit_failure_operation_impossible "Unable to use --attach from inside a flatpak" open_flatpak "${mailto}" ;; generic|enlightenment) - open_generic "${mailto}" + open_generic "${mailto}" "$attach" ;; *) -- 2.52.0