Может ли злоумышленник, например, через форму для загрузки фоток на сайте загрузить вредносное ПО?
Может. Надо проверять "тело" файла на корректность того, что это - именно файл изображения. Банально - попробовать получить размер изображения с помощью функций для используемого языка программирования.
Например, для PHP:  функция GD-библиотеки getimagesize().
Также, нужно недопускать запуск всего подряд из папок-хранилищ!(из-за админов - я не могу линк запостить сюда...)
Для понимания, сделайте поиск в гугл (вместе с кавычками!):"Надежная защита веб-сайта от большинства видов атак"и почитайте по 1-й ссылке.
-------------------------------------------------
Добавлю ещё, что можно изначально сохранять в "отстойник"/"хранилище" - директорию выше webroot и недоступную из-вне (т.е. веб-сервер никак не сможет вернуть содержимое файла или сделать его запуск). 
Далее, 2 варианта: 
1. Если это "отстойник" - проверяем и переносим куда нужно
2. Если "хранилище" - проверяем и оставляем там, потом читаем скриптами веб-сервера прям из той директории.
Может. Надо проверять всё в файле - расширение, тип. Работает это так, что он сначала загружает файл фото, потом смотрит откуда эта картинка стала открываться, загружает php-файл, например, с командой удалить всё в этой папке, на папку выше или ещё что-то и набирает его адрес в браузере, таким образом запуская его.
Ещё для защиты неплохо бы запретить исполнение любых файлов в директории с фото, например с помощью htaccess