VirtualBox

Changeset 88524 in vbox for trunk/src/VBox/Installer


Ignore:
Timestamp:
Apr 15, 2021 11:36:36 AM (4 years ago)
Author:
vboxsync
Message:

linux: vboxautostart-service: security improvements.

Introduce more strict security checks when iterating
over VBOXAUTOSTART_DB.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Installer/linux/vboxautostart-service.sh

    r82968 r88524  
    8989}
    9090
     91valid_db_entry() {
     92
     93    entry="$1"
     94    [ -z "$entry" ] && return 1
     95
     96    user="$2"
     97    [ -z "$user" ] && return 1
     98
     99    user_name=$(id -n -u "$user" 2>/dev/null)
     100    [ -z "$user_name" ] && return 1
     101
     102    user_id=$(id -u "$user" 2>/dev/null)
     103
     104    # Verify that @user identifies a user *by name* (i.e. not a numeric id).
     105    # Careful, all numeric user names are legal.
     106    if [ "$user_id" = "$user" ] && [ "$user_name" != "$user" ]; then
     107        return 1
     108    fi
     109
     110    # Verify whether file name is the same as file owner name.
     111    [ -z "$(find "$entry" -user "$user" -type f 2>/dev/null)" ] && return 1
     112
     113    return 0
     114}
     115
    91116start() {
    92117    [ -z "$VBOXAUTOSTART_DB" ] && exit 0
     
    102127    unset VBOX_RELEASE_LOG_DEST
    103128
    104     for user in `ls $VBOXAUTOSTART_DB/*.start`
     129    for entry in "$VBOXAUTOSTART_DB"/*.start
    105130    do
    106         start_daemon `basename $user | sed -ne "s/\(.*\).start/\1/p"` $binary $PARAMS > /dev/null 2>&1
     131        user=$(basename "$entry" .start)
     132        [ "$user" = "*" ] && break
     133        valid_db_entry "$entry" "$user" || continue
     134
     135        start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1
    107136    done
    108137
     
    119148    unset VBOX_RELEASE_LOG_DEST
    120149
    121     for user in `ls $VBOXAUTOSTART_DB/*.stop`
     150    for entry in "$VBOXAUTOSTART_DB"/*.stop
    122151    do
    123         start_daemon `basename $user | sed -ne "s/\(.*\).stop/\1/p"` $binary $PARAMS > /dev/null 2>&1
     152        user=$(basename "$entry" .stop)
     153        [ "$user" = "*" ] && break
     154        valid_db_entry "$entry" "$user" || continue
     155
     156        start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1
    124157    done
    125158
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette