Введение
Спасибо, что используете OWASP ServerlessGoat!
Это serverless-приложение демонстрирует распространённые уязвимости serverless-безопасности, описанные в руководстве «Serverless Security Top 10 Weaknesses» https://github.com/puresec/sas-top-10.
ServerlessGoat был создан в следующих образовательных целях:
- Обучить разработчиков и специалистов по безопасности распространённым рискам и уязвимостям уровня serverless-приложений
- Рассказать, как могут быть использованы уязвимости уровня serverless-приложений
- Обучить разработчиков и специалистов по безопасности лучшим практикам serverless-безопасности
Дополнительную информацию о WebGoat можно найти по адресу: https://www.owasp.org/index.php/OWASP_Serverless_Goat
ПРЕДУПРЕЖДЕНИЕ 1: Это приложение содержит уязвимости. Используйте его только в учебных целях.
ПРЕДУПРЕЖДЕНИЕ 2: Эта программа предназначена только для образовательных целей. Не пытайтесь применять эти методы без разрешения владельцев приложений.
ПРИМЕЧАНИЕ: Приложение разработано таким образом, что не должно подвергать риску ваш аккаунт AWS. Внесённые уязвимости ограничены границами этого конкретного приложения. Тем не менее, пользователям не рекомендуется разворачивать приложение в производственных средах.
Развёртывание
ServerlessGoat — это простое приложение AWS Lambda, которое служит сервисом преобразования MS-Word .doc файлов в обычный текст. Оно получает URL .doc файла на вход и возвращает текст из документа вызывающему API.
Приложение упаковано и опубликовано для развёртывания через AWS Serverless Application Repository.
Шаги для развёртывания:
- Убедитесь, что вы вошли в свой аккаунт AWS
- Перейдите по следующей ссылке: AWS Serverless Application Repository
- Нажмите «Deploy»
- Нажмите «Deploy» (ещё раз)
- Подождите, пока не увидите сообщение «Your application has been deployed»
- Нажмите «View CloudFormation Stack»
- В разделе «Outputs» вы найдёте URL приложения (WebsiteURL)
Шпаргалка
Полное прохождение уроков (в разработке) можно найти в файле LESSONS.md
В приложении существуют следующие проблемы безопасности:
- Инъекция event-данных, приводящая к инъекции OS-команд (SAS-01)
- Пользователи могут вызывать API со значением параметра
document_url, содержащим команды Linux OS. Например: ; ls -LF
- Некорректная обработка исключений и подробные сообщения об ошибках (SAS-10), приводящие к раскрытию чувствительной информации
- Например, вызов API без обязательного параметра вернёт подробный stack trace/исключение
- Небезопасная конфигурация serverless-развёртывания (SAS-03)
- Публично открытый S3 bucket (его имя можно узнать из субдомена/префикса URL)
- Параметр
document_url не определён как «обязательный» в API Gateway и может быть опущен
- Избыточные разрешения и роли функции, приводящие к утечке данных, хранящихся в таблице DynamoDB (SAS-04)
- Функция имеет CRUD-разрешения на таблицу Dynamo, которые могут быть использованы для чтения чувствительных данных или манипуляции данными
- Функция имеет политику FullAccess на S3 bucket, что приводит к подделке данных и утечке данных и т.д.
- Недостаточный мониторинг и журналирование функции (SAS-05) — приложение не ведёт должное журналирование атак и ошибок на уровне приложения (это можно продемонстрировать через CloudWatch/CloudTrail)
- Небезопасные сторонние зависимости (SAS-06) — могут быть обнаружены при сканировании проекта инструментом сканирования OSS
- Уязвимый пакет —
node-uuid
- Отказ в обслуживании на уровне приложения (SAS-08), который легко продемонстрировать
- Злоумышленник может многократно вызывать API рекурсивно, по сути порождая достаточно экземпляров, чтобы достичь лимита зарезервированной ёмкости функции (установлен на 5). Например:
https://i92uw6vw73.execute-api.us-east-1.amazonaws.com/Prod/api/convert?document_url=https%3A%2F%2Fi92uw6vw73.execute-api.us-east-1.amazonaws.com%2FProd%2Fapi%2Fconvert%3Fdocument_url...
Благодарности
ServerlessGoat был первоначально создан и передан OWASP Юрием Шапирой и Ори Сегалом из PureSec.