Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 15 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -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 — Анализ и тестирование безопасности веб-приложения

## Цель
Expand Down Expand Up @@ -40,12 +41,12 @@

Заполните таблицу активов системы:

| Актив | Тип | Ценность | Примечание |
|-------|-----|----------|------------|
| Данные пользователей (userId, userName) | Данные | ? | |
| Данные о сессиях (время входа/выхода) | Данные | ? | |
| Файловая система сервера | Инфраструктура | ? | |
| Внутренняя сеть / метаданные окружения | Инфраструктура | ? | |
| Актив | Тип | Ценность | Примечание |
|-------|-----|-------------|--------------------------------------------------------------------|
| Данные пользователей (userId, userName) | Данные | Средняя | У нас нет никаких критичных данных пользователей |
| Данные о сессиях (время входа/выхода) | Данные | Высокая | Основные данные пользователей, можеть выдать паттерны повекдения |
| Файловая система сервера | Инфраструктура | Критическая | Дает полный доступ ко всем возможным данным и управлением системой |
| Внутренняя сеть / метаданные окружения | Инфраструктура | Высокая | Возможность поиска уязвимостей в системе |

> **Вопрос для размышления:** какие из активов наиболее критичны и почему?

Expand All @@ -55,14 +56,14 @@

Проведите базовое моделирование угроз по методологии **STRIDE**:

| Категория угрозы | Расшифровка | Применимо к этому приложению? |
|------------------|------------------------|-------------------------------|
| **S**poofing | Подмена идентификации | ? |
| **T**ampering | Модификация данных | ? |
| **R**epudiation | Отказ от авторства | ? |
| **I**nformation Disclosure | Утечка данных | ? |
| **D**enial of Service | Отказ в обслуживании | ? |
| **E**levation of Privilege | Повышение привилегий | ? |
| Категория угрозы | Расшифровка | Применимо к этому приложению? |
|------------------|------------------------|-----------------------------------------------------------------|
| **S**poofing | Подмена идентификации | Да, в приложении нет аутентификации и авторизации пользователей |
| **T**ampering | Модификация данных | |
| **R**epudiation | Отказ от авторства | ? |
| **I**nformation Disclosure | Утечка данных | ? |
| **D**enial of Service | Отказ в обслуживании | ? |
| **E**levation of Privilege | Повышение привилегий | ? |

Для каждой применимой угрозы укажите:
- **Источник угрозы** (кто/что может её реализовать)
Expand Down
1,233 changes: 1,233 additions & 0 deletions result.md

Large diffs are not rendered by default.

88 changes: 88 additions & 0 deletions semgrep-custom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
rules:
- id: xss-html-string-concat
patterns:
- pattern: |
String $HTML = ... + $VAR.get$Method() + ...;
$CTX.contentType("text/html").result($HTML);
- pattern-not: |
String $HTML = ... + StringEscapeUtils.$ESC($VAR.get$Method()) + ...;
message: >
CWE-79: User data concatenated directly into HTML response without escaping.
Use StringEscapeUtils.escapeHtml4() or similar before inserting user-controlled values.
languages: [java]
severity: ERROR
metadata:
cwe: CWE-79

- id: xss-html-direct-concat
pattern: |
$CTX.contentType("text/html").result(... + $EXPR + ...);
message: >
CWE-79: String concatenation directly into HTML response. User-controlled data
in $EXPR may allow XSS if not sanitized.
languages: [java]
severity: ERROR
metadata:
cwe: CWE-79

- id: path-traversal-file-concat
pattern: |
new File($BASE + $PARAM);
message: >
CWE-22: Path traversal — user-controlled value concatenated directly into file path.
Use Path.normalize() and verify the result starts with the intended base directory.
languages: [java]
severity: ERROR
metadata:
cwe: CWE-22

- id: ssrf-url-from-param
patterns:
- pattern: |
new URL($URL_VAR);
- pattern-not: |
new URL("...");
message: >
CWE-918: SSRF — URL constructed from a variable (likely user-controlled).
Validate and allowlist URL schemes/hosts before opening connections.
languages: [java]
severity: ERROR
metadata:
cwe: CWE-918

- id: error-info-disclosure
pattern: |
$CTX.status(...).result(... + $E.getMessage());
message: >
CWE-209: Exception message exposed in HTTP response. Internal implementation
details (class names, stack internals) may leak to the client. Return a generic
error message instead.
languages: [java]
severity: WARNING
metadata:
cwe: CWE-209

- id: error-info-disclosure-result
pattern: |
$CTX.result(... + $E.getMessage());
message: >
CWE-209: Exception message exposed in HTTP response without sanitization.
languages: [java]
severity: WARNING
metadata:
cwe: CWE-209

- id: unrestricted-file-write
patterns:
- pattern: |
new FileWriter($FILE);
- pattern-inside: |
File $FILE = new File($BASE + $PARAM);
...
message: >
CWE-434/CWE-22: Writing to a file whose path is constructed from user input.
Attacker may write to arbitrary locations (path traversal + arbitrary file write).
languages: [java]
severity: ERROR
metadata:
cwe: CWE-434
Loading