V12.3.3 File Execution
Requirement:#
Verify that user-submitted filename metadata is validated or ignored to prevent the disclosure or execution of remote files via Remote File Inclusion (RFI) or Server-side Request Forgery (SSRF) attacks.
Explanation:#
Требование защищает от раскрытия или выполнения удаленных файлов с помощью атак Remote File Inclusion (RFI) или Server-side Request Forgery (SSRF). Данное требование направлено на обеспечение правильной проверки или игнорирования метаданных имен файлов, передаваемых пользователем, для снижения риска атак такого типа.
1 User-Submitted Filename Metadata:
- Это относится к информации, предоставляемой пользователями, которая влияет на названия файлов, с которыми взаимодействует приложение. Сюда входят имена файлов, полученные при загрузке файлов, URL-адресов или других входных данных, где имена файлов являются частью данных.
2 Remote File Inclusion (RFI):
- RFI - это уязвимость, позволяющая злоумышленникам включать удаленные файлы, размещенные на внешних серверах. При отсутствии надлежащей проверки злоумышленник может использовать метаданные имени файла для включения вредоносных файлов и потенциального выполнения кода на сервере.
3 Server-side Request Forgery (SSRF):
- SSRF - это уязвимость, позволяющая злоумышленникам выполнять запросы к внутренним или внешним ресурсам от имени сервера. Злоумышленники могут использовать метаданные имен файлов, чтобы заставить приложение выполнять несанкционированные запросы, что может привести к утечке данных или эксплуатации внутренних ресурсов.
Remediation:#
Для выполнения данного требования и предотвращения RFI- и SSRF-атак:
1 Validate User Inputs:
- Осуществлять проверку и очистку метаданных имен файлов, передаваемых пользователями, для предотвращения несанкционированного или непреднамеренного включения файлов.
2 Whitelist Allowed Sources:
- Если приложение требует получения файлов или выполнения запросов, используйте "белый список" доверенных источников, чтобы обеспечить доступ только к достоверным и безопасным источникам.
3 Limit Access to Remote Resources:
- Ограничьте доступ приложения к внешним ресурсам и обеспечьте надлежащий контроль доступа для предотвращения несанкционированных запросов.
4 URL Whitelisting and Validation:
- Если приложение взаимодействует с URL-адресами, проверьте и очистите URL-адреса, чтобы убедиться в их легитимности и безопасности. Составьте "белый список" разрешенных доменов или URL-адресов.
5 Content-Type Validation:
- Если приложение извлекает файлы или данные, проверьте заголовок Content-Type, чтобы убедиться, что ответ соответствует ожидаемому типу.
6 Input Validation:
- Проверяйте вводимые пользователем данные, используемые при подключении файлов или ресурсов, чтобы предотвратить попытки создания вредоносных запросов.
7 Security Testing:
- Проведение тестирования безопасности, включая оценку уязвимостей и тестирование на проникновение, для выявления и устранения потенциальных уязвимостей RFI и SSRF.
Пример приложения Flask, в котором учтены проблемы безопасности и соблюдены лучшие практики предотвращения уязвимостей Server-Side Request Forgery (SSRF). Этот пример включает проверку ввода, "белые списки" URL, проверку содержимого и правильную обработку ошибок:
В этом коде:
- Список ALLOWED_DOMAINS содержит доверенные домены, которым разрешено получать файлы. Измените этот список таким образом, чтобы в него вошли те домены, которым вы доверяете.
- Приложение проверяет, отсутствует ли предоставленный параметр filename и находится ли извлекаемый домен в разрешенном белом списке.
- С помощью метода raise_for_status() вызывается исключение в случае неуспешного выполнения HTTP-запроса, что позволяет правильно обработать ошибки.
- Тип содержимого ответа проверяется, разрешая только определенные типы содержимого, такие как текст и изображения. Вы можете настроить эту проверку в соответствии с ожидаемыми типами содержимого вашего приложения.
- Код возвращает соответствующие HTTP-ответы для различных сценариев, включая неавторизованные домены, недопустимые типы содержимого и внутренние ошибки сервера.
Обратите внимание, что данный пример является упрощенной иллюстрацией. В зависимости от конкретного случая использования и требований безопасности может потребоваться доработка и расширение данного кода для учета дополнительных аспектов и сценариев безопасности.