From 99a808afa58f99d7ddfe75d21634588d41933520 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:08:54 +0000 Subject: [PATCH 1/3] Setting up GitHub Classroom Feedback From fead63ce7c2e71fed482b55e660644966b043ed5 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:08:58 +0000 Subject: [PATCH 2/3] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 18eee9a..21b4d8d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/NSTTkgmb) # Лабораторная работа №4 — Анализ и тестирование безопасности веб-приложения ## Цель From bc577a8f02040284d5adeeb93e0a148354f03581 Mon Sep 17 00:00:00 2001 From: xGodness Date: Tue, 14 Apr 2026 15:48:52 +0300 Subject: [PATCH 3/3] mvp --- .idea/.name | 1 + .idea/GitScopePro.xml | 7 + report.md | 316 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 324 insertions(+) create mode 100644 .idea/.name create mode 100644 .idea/GitScopePro.xml create mode 100644 report.md diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..786c7a2 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +software_testing_lab_4 \ No newline at end of file diff --git a/.idea/GitScopePro.xml b/.idea/GitScopePro.xml new file mode 100644 index 0000000..4a8b7f1 --- /dev/null +++ b/.idea/GitScopePro.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/report.md b/report.md new file mode 100644 index 0000000..ec14e58 --- /dev/null +++ b/report.md @@ -0,0 +1,316 @@ +## 1. Asset Inventory + +| Актив | Тип | Ценность | Описание | + |--------------------------------|----------------|-------------|--------------------------------------------------------| +| Данные пользователей | Данные | Высокая | Возможна утечка персональных данных и эксплуатация XSS | +| Данные пользовательских сессий | Данные | Высокая | Раскрывают поведенческие паттерны пользователей | +| Файловая система сервера | Инфраструктура | Критическая | Подвержена атаке Path Traversal | +| Внутренние сетевые ресурсы | Инфраструктура | Критическая | Могут быть скомпрометированы через SSRF | +| REST API | Приложение | Высокая | Основная точка взаимодействия с системой | +| Логи приложения | Данные | Средняя | Могут содержать чувствительную информацию | + +--- + +## 2. Threat Modeling (STRIDE) + +| Категория | Применимость | Поверхность атаки | Потенциальный ущерб | +|------------------------|--------------|--------------------------------------------|---------------------------------| +| Spoofing | Да | Все эндпоинты | Подмена пользователей | +| Tampering | Да | `/register`, `/recordSession` | Изменение аналитических данных | +| Repudiation | Да | Отсутствие логирования | Невозможность доказать действия | +| Information Disclosure | Да | `/userProfile`, `/exportReport`, `/notify` | Утечка конфиденциальных данных | +| Denial of Service | Да | Все эндпоинты | Перегрузка сервера | +| Elevation of Privilege | Да | `/notify`, `/exportReport` | Доступ к внутренним ресурсам | + +--- + +## 3. Найденные уязвимости + +### Finding 1: Stored Cross-Site Scripting (XSS) + +| Параметр | Значение | +|-------------|--------------------------------------------------| +| Компонент | `/userProfile` | +| CWE | CWE-79 | +| CVSS | 6.1 MEDIUM (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N) | +| Критичность | Medium | +| Статус | Confirmed | + +**Описание:** + +Имя пользователя (`userName`) сохраняется в системе и затем отображается в HTML-ответе эндпоинта `/userProfile` без +экранирования. Это позволяет злоумышленнику внедрить вредоносный JavaScript-код, который будет выполняться в браузере +других пользователей. Проблема возникает из-за отсутствия HTML-экранирования пользовательского ввода. + +**Шаги воспроизведения:** + +1. Зарегистрировать пользователя с вредоносным именем: + ``` + curl -X POST "http://localhost:7000/register?userId=xss&userName=" + ``` +2. Открыть профиль пользователя: + ``` + curl "http://localhost:7000/userProfile?userId=xss" + ``` +3. Ожидаемый результат: HTML-теги экранированы, скрипт не выполняется. + Фактический результат: в ответе присутствует тег `"; + + Unirest.post("http://localhost:7000/register") + .queryString("userId", "xss") + .queryString("userName", malicious) + .asString(); + + HttpResponse response = Unirest.get("http://localhost:7000/userProfile") + .queryString("userId", "xss") + .asString(); + + assertEquals(200, response.getStatus()); + assertFalse(response.getBody().contains("