Каталог, в котором пользователи имеют свои резервные копии для своих файлов, находится в каталоге, к которому они могут обращаться и загружать.
Если они получают правильную схему именования и намеренно вызывают ошибку, которая делает системупопытайтесь восстановить последние 5 или около того резервных копий, они могли бы потенциально поместить файлы, которые они хотят, на сервер, используя gzip-файл с абсолютным путем, такой как ../../../../../etc/passwd
или любой другой.
Какие проверки я могу выполнитьчтобы это не происходило программно в BASH
Следующая команда - это то, что запускается пользователем root (он запускается пользователем root, потому что я использую webmin):
tar zxf /home/$USER/site/backups/$BACKUP_FILE -C /home/$USER/site/data/
Где $BACKUP_FILE
будет именем резервной копии, которую он пытается восстановить
edit 1:
Это то, что я придумал до сих пор.Я уверен, что этот способ мог бы быть значительно улучшен:
CONTENTS=$(tar -ztvf /home/$USER/site/backups/$BACKUP_FILE | cut -c49-200)
for FILE in $CONTENTS; do
if [[ $FILE =~ \.\. ]] || [[ $FILE =~ ^\/ ]]; then
echo "Illegal characters in contents"
exit 1
fi
done
tar zxf /home/$USER/site/backups/$BACKUP_FILE -C /home/$USER/site/data/
exit 0
Мне интересно, будет ли достаточно запретить его с /
и не разрешить ..
будет достаточно?также символ 50+ нормальный для вывода tar -ztvf
?