
Уязвимый REST API с уязвимостями из OWASP Top 10 для тестирования безопасности
Уязвимый API (Основано на OpenAPI 3)

VAmPI — это уязвимый API, созданный с помощью Flask, и он включает уязвимости из списка OWASP Top 10 для API. Он был создан, потому что мне нужен был уязвимый API для оценки эффективности инструментов, используемых для обнаружения проблем безопасности в API. Он имеет переключатель включения/выключения, позволяющий сделать API уязвимым или нет во время тестирования. Это позволяет лучше охватить случаи ложных срабатываний/пропусков. VAmPI также можно использовать в учебных/обучающих целях. Более подробную информацию об уязвимостях можно найти на erev0s.com.
Поток действий VAmPI выглядит следующим образом: незарегистрированный пользователь может видеть минимальную информацию о фиктивных пользователях, включенных в API. Пользователь может зарегистрироваться, а затем войти в систему, чтобы получить возможность использовать токен, полученный при входе, для добавления книги. Для добавляемой книги принимаются данные: название и секрет об этой книге. Каждая книга уникальна для каждого пользователя, и только владелец книги должен иметь возможность просмотреть секрет.
Краткий обзор включенных действий представлен в следующей таблице:
Для получения более подробной информации вы можете либо запустить VAmPI и перейти по адресу http://127.0.0.1:5000/ui/, либо использовать сервис, такой как swagger editor, указав спецификацию OpenAPI, которую можно найти в каталоге openapi_specs.
Это приложение Flask, поэтому для его запуска вы можете установить все зависимости, а затем запустить app.py.
Чтобы установить все зависимости, просто выполните pip3 install -r requirements.txt, а затем python3 app.py.
Или, если предпочитаете, вы также можете запустить его через Docker или Docker Compose.
docker run -p 5000:5000 erev0s/vampi:latest
[Примечание: если вы запускаете Docker на новых версиях macOS, используйте -p 5001:5000, чтобы избежать конфликта со службой AirPlay Receiver. В качестве альтернативы вы можете отключить службу AirPlay Receiver в Системных настройках -> Общий доступ.]
docker-compose содержит два экземпляра: один с безопасной конфигурацией на порту 5001 и другой с небезопасной на порту 5002:
docker-compose up -d
Перейдите по пути /ui там, где вы запустили API, и будет доступен Swagger UI, который поможет вам начать работу!
http://127.0.0.1:5000/ui/
Если вы хотите изменить время ожидания токена, созданного после входа, или изменить среду, чтобы она не была уязвимой, то вы можете использовать несколько способов в зависимости от того, как вы запускаете приложение.
python3 app.py, то все, что вам нужно сделать, это отредактировать переменные alive и vuln, определенные в самом app.py. Переменная alive измеряется в секундах, поэтому если установить 100, то токен истечет через 100 секунд. Переменная vuln работает как логическое значение: если установить 1, приложение уязвимо, а если 0 — не уязвимо.docker run, либо отредактировать Dockerfile и пересобрать образ.
Docker run example: docker run -d -e vulnerable=0 -e tokentimetolive=300 -p 5000:5000 erev0s/vampi:latest
/createdb, чтобы заполнить базу данных.| Действие | Путь | Описание |
|---|
| GET | /createdb | Создает и заполняет базу данных фиктивными данными |
| GET | / | Главная VAmPI |
| GET | /me | Отображает пользователя, который вошел в систему |
| GET | /users/v1 | Отображает всех пользователей с основной информацией |
| GET | /users/v1/_debug | Отображает все детали для всех пользователей |
| POST | /users/v1/register | Зарегистрировать нового пользователя |
| POST | /users/v1/login | Войти в VAmPI |
| GET | /users/v1/{username} | Отображает пользователя по имени пользователя |
| DELETE | /users/v1/{username} | Удаляет пользователя по имени пользователя (только для администраторов) |
| PUT | /users/v1/{username}/email | Обновить email пользователя |
| PUT | /users/v1/{username}/password | Обновить пароль пользователя |
| GET | /books/v1 | Получает все книги |
| POST | /books/v1 | Добавить новую книгу |
| GET | /books/v1/{book} | Получает книгу по названию вместе с секретом |
vulnerable=1В Dockerfile вы найдете две устанавливаемые переменные окружения: ENV vulnerable=1 и ENV tokentimetolive=60. Вы можете изменить их перед выполнением команды docker build.