# OWASP Top 10 для начинающих

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Ориентироваться в **OWASP Top 10 (2021)** — десяти наиболее критичных **рисков веб-приложений** — и понимать, как DevSecOps помогает их снижать.

## Предварительно

- [CIA и активы](cia-i-aktivy.md)

## Время

**4–6 часов**

---

## Что такое OWASP

**OWASP** (Open Worldwide Application Security Project) — некоммерческое сообщество практик по безопасности приложений. **Top 10** — не чеклист инструментов, а **риски**, отсортированные по важности для большинства организаций.

Обновления: 2017 → 2021 → ожидается новая версия. Принципы стабильны.

---

## Top 10 — обзорная таблица

| # | Риск | Простыми словами | DevSecOps hook |
|---|------|------------------|----------------|
| A01 | Broken Access Control | Видишь чужие данные | AuthZ tests, policy |
| A02 | Cryptographic Failures | Слабое/нет шифрования | TLS scan, config |
| A03 | Injection | Вредный ввод в SQL/shell | SAST, WAF, param queries |
| A04 | Insecure Design | Дыры в архитектуре | Threat modeling |
| A05 | Security Misconfiguration | Default пароли, debug on | IaC scan, hardening |
| A06 | Vulnerable Components | Старые библиотеки | SCA, Dependabot |
| A07 | Auth Failures | Слабый login/session | MFA, rate limit |
| A08 | Integrity Failures | Подмена update/CI | Signed commits, SBOM |
| A09 | Logging Failures | Нет audit trail | Central logs, SIEM |
| A10 | SSRF | Сервер ходит куда не надо | NetworkPolicy, allowlist |

---

## A01 — Broken Access Control

**Пример:** смена `userId=5` на `6` в URL → чужой профиль.

**Кontrols:**

- Deny by default
- Server-side checks (не только UI)
- Tests на horizontal/vertical privilege escalation

---

## A02 — Cryptographic Failures

**Примеры:** HTTP login, MD5 для паролей, ключи в Git.

**Controls:** TLS 1.2+, bcrypt/Argon2, KMS, no custom crypto.

---

## A03 — Injection

**SQL, OS command, LDAP, XSS** (XSS часто выделяют отдельно).

```sql
-- Плохой паттерн
"SELECT * FROM users WHERE name = '" + input + "'"
```

SAST ищет конкатенацию. **Parameterized queries** — must.

---

## A04 — Insecure Design

Flaw **в задумке**, не в баге кода: «любой guest может видеть все RSVP».

**Fix:** threat modeling **до** sprint, abuse cases, security user stories.

---

## A05 — Security Misconfiguration

| Misconfig | Где |
|-----------|-----|
| Admin:admin | Default creds |
| Directory listing on | Web server |
| Debug=true | Spring prod |
| Public S3 | Cloud |

**IaC + CIS benchmarks + automated scan.**

---

## A06 — Vulnerable and Outdated Components

**Log4Shell (2021)** — классический A06: библиотека в classpath.

Pipeline: **SCA on every MR**, SLA на Critical CVE.

---

## A07 — Identification and Authentication Failures

- Weak passwords
- No MFA for admin
- Session never expires
- Credential stuffing без rate limit

**Controls:** OAuth/OIDC providers, MFA, secure cookies (`HttpOnly`, `Secure`, `SameSite`).

---

## A08 — Software and Data Integrity Failures

**Supply chain:** compromised npm package, malicious GitHub Action.

**Controls:** lockfiles, signed commits/tags, verify checksums, minimal CI permissions.

---

## A09 — Security Logging and Monitoring Failures

Без логов — **нет IR**. Логировать auth success/fail, access denied, validation errors.

**Не** логировать: passwords, full PAN, session tokens.

---

## A10 — Server-Side Request Forgery (SSRF)

Attacker заставляет **сервер** запросить `http://169.254.169.254/` (cloud metadata).

**Controls:** allowlist URLs, block internal ranges, IMDSv2.

---

## Как учиться безопасно

| ✅ Lab | ❌ Нельзя |
|--------|----------|
| OWASP Juice Shop local | Сканировать чужие сайты без разрешения |
| WebGoat | «Проверить» prod конкурента |
| DVWA in Docker | Exploit real PII |

---

## Mapping на pipeline

```
Design     → threat model (A04)
Code       → SAST (A03)
Deps       → SCA (A06)
Build      → image scan (A06)
Deploy     → config scan (A05)
Runtime    → DAST, WAF (A01, A03)
Ops        → logs (A09)
```

---

## Самопроверка

1. Объясните A01 на примере «чужой заказ».
2. Чем A06 отличается от A03?
3. Почему A04 не лечится только SAST?
4. Что такое SSRF одной фразой?

---

## Дальше

→ [AuthN и AuthZ](authn-authz.md)
