Отчёт о внешней
безопасности
Автоматизированный аудит веб-приложения, API и доступной извне инфраструктуры.
Общая оценка
За время проверки проанализированы основной сайт, два поддомена и публичное API. Подтверждена критическая SQL Injection и три находки высокого риска.
РИСК
Параметр сортировки каталога допускает изменение SQL-запроса. Дополнительно обнаружены публичная резервная копия, нарушение объектной авторизации API и секрет интеграции в source map.
Что это означает
При эксплуатации подтверждённых проблем посторонний пользователь потенциально сможет получить технические секреты и данные другого клиента. Признаков фактической компрометации в рамках проверки не выявлено.
Что делать сначала
Закрыть публичный доступ к резервным копиям, отозвать попавшие в них секреты и внедрить серверную проверку принадлежности объектов во всех методах API.
Scope и ограничения
Проверка выполнялась только для письменно согласованных активов. Разрушающие действия, DoS, социальная инженерия и проверка сторонних поставщиков не проводились.
Что видно из интернета
3 входят в scope, 7 перенаправляют на основной сайт, 2 требуют уточнения владельца.
HTTPS, API gateway, CDN и почтовая инфраструктура. Неожиданных административных портов не найдено.
Nginx, PHP, CMS, JavaScript-фреймворк, CDN и API gateway. Версии указаны только при надёжном определении.
Риски и доказательства
Автоматические сигналы включаются в основной список только после воспроизводимой проверки. Неподтверждённые сигналы вынесены отдельно.
SQL Injection в параметре сортировки каталога
Параметр sort передаётся в SQL-запрос без безопасной параметризации. Контрольные логические выражения воспроизводимо изменяют количество элементов в ответе. Извлечение данных не проводилось.
GET /api/v1/catalog/search?sort=price%27
→ 500 Internal Server Error
→ "unterminated quoted string"
sort=price' AND '1'='1 → 200 / count: 284
sort=price' AND '1'='2 → 200 / count: 0
Результат стабилен в 3 контрольных запросах.Возможное влияние
Чтение или изменение данных приложения, обход отдельных проверок и потенциальная компрометация базы данных.
Как исправить
- Заменить динамическую сборку SQL на параметризованные запросы.
- Разрешать сортировку только по серверному списку полей.
- Ограничить права учётной записи БД и добавить регрессионный тест.
Резервная копия доступна без авторизации
На CDN обнаружен архив резервной копии приложения. Сервер возвращает файл без авторизации; внутри присутствует конфигурационный файл с тестовым секретом интеграции.
GET /backup/site-backup.zip HTTP/1.1
Host: cdn.demo-shop.example
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Length: 2 481 934
archive/config.env:
INTEGRATION_TOKEN=demo_****************Возможное влияние
Раскрытие исходного кода, внутренних адресов и секретов интеграций. Секрет следует считать скомпрометированным даже после удаления архива.
Как исправить
- Немедленно закрыть и удалить файл из публичного хранилища.
- Отозвать и перевыпустить обнаруженный секрет.
- Запретить публикацию архивов на уровне CI/CD и CDN.
Недостаточная проверка принадлежности заказа
Пользователь с ролью «Клиент» может запросить сведения о заказе другой тестовой учётной записи, изменив числовой идентификатор в API-запросе.
Authorization: Bearer <token-customer-a>
GET /api/v1/orders/1048 → 200 OK
{
"id": 1048,
"owner": "customer-b",
"status": "paid",
"total": 12800
}Возможное влияние
Несанкционированный доступ к данным других клиентов и нарушение конфиденциальности заказов.
Как исправить
- Проверять принадлежность объекта текущему пользователю на сервере.
- Применить единый middleware авторизации ко всем объектным endpoint.
- Добавить негативные тесты для каждой роли.
Секрет интеграции опубликован в JavaScript source map
ПодтвержденоОтвет API раскрывает SQL-ошибку, таблицу и имя драйвера БД
ПодтвержденоПолитика CSP допускает небезопасные inline-скрипты
ПодтвержденоОтсутствует ограничение частоты запросов восстановления пароля
ПодтвержденоОпределён компонент с доступным обновлением безопасности
Требует обновленияДополнительные рекомендации по TLS, cookie и заголовкам
РекомендацииОдин потенциальный open redirect и один сигнал SQL Injection не воспроизвелись при контрольной проверке. Они сохранены в приложении отчёта для прозрачности.
Покрытие API
Приоритетный план действий
Снизить непосредственный риск
- Закрыть SQL Injection и временно ограничить уязвимый endpoint
- Удалить публичную резервную копию
- Отозвать раскрытые секреты интеграций
- Ограничить доступ к затронутому объектному API
Устранить корневые причины
- Внедрить единый контроль принадлежности объектов
- Обновить уязвимый компонент
- Добавить rate limit для восстановления доступа
Усилить базовую защиту
- Ужесточить CSP и cookie
- Добавить security-тесты в CI/CD
- Провести контрольную проверку исправлений
Что уже сделано хорошо
- TLS 1.0 и 1.1 отключены
- Административные интерфейсы не доступны извне
- Cookie сессии используют Secure и HttpOnly
- Ошибки API не раскрывают stack trace
Как получен результат
Разведка
DNS, сертификаты, архивные данные, поддомены и доступные сервисы.
Картирование
Технологии, страницы, JavaScript, API-схемы и роли.
Проверка
Безопасные DAST-проверки и анализ конфигурации в согласованном scope.
Верификация
Контрольное воспроизведение, удаление дублей и оценка влияния.
Отчёт отражает состояние согласованных активов в период проведения проверки. Отсутствие находок не гарантирует отсутствие всех возможных уязвимостей. Изменения приложения и инфраструктуры могут изменить результат.