Обзор OWASP Top 10 2025 для Java
24 февраля 2026 г.·260 views

🛠 Обзор OWASP Top 10 2025 для Java

Салют,

Мы тут с тобой недавно начали смотреть в сторону OWASP TOP 10 (тут) для правил Semgrep.

Я думаю, что будет классно сделать обзор по OWASP c конкретикой для Java, где я дальше смогу показать почему это прикольно в кастоме для данного языка. Тем более я готовлю сейчас сурсный проект для Semgrep, поэтому давай его сделаем вместе полезнее если ты в JAVA, либо работаешь с ним как-то смежно (да и в целом ты сможешь переиспользовать конструкты для других языков).

А на сейчас давай посмотрим основные типы с примерами

A01:2025 – Broken Access Control

Нарушение доступа — отсутствует ограничение действия пользователей за пределами их полномочий - действия без авторизации

// Отсутствует проверка владельца, следовательно пользователь `id=123` изменяется на `id=124` и получает информацию без каких-либо проверок

public Order getOrder(@PathVariable Long id) {

return orderRepository.findById(id)

.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));

}

A02:2025 – Security Misconfiguration

Неправильная конфигурация — небезопасные настройки по умолчанию, открытые Actuator-endpoints, отключённые security-заголовки

A03:2025 – Software Supply Chain Failures

Сбои цепочки поставок — уязвимые зависимости, пайплайны без проверок и верификации артефактов, скомпрометированные репозитории, Maven/ Gradle репозитории по прямому HTTP, отсутствие проверки контрольных сумм, snapshot в prod

A04:2025 – Cryptographic Failures

Криптографические сбои — слабые алгоритмы, примитивное хеширование, недостаточная длина ключей

// MD5 без соли, взламывается rainbow tables

String hash = DigestUtils.md5Hex(password);

userRepository.save(new User(username, hash));

A05:2025 – Injection

Инъекции - ввод без санитизации типа FreeMarker, Velocity, Thymeleaf, JNDI

// Конкатенация строк в SQL

String query = "SELECT * FROM users WHERE username = '" + username + "'";

Statement stmt = connection.createStatement();

ResultSet rs = stmt.executeQuery(query);

A06:2025 – Insecure Design

Небезопасный дизайн — проблемы заложены на уровне архитектуры: отсутствие rate limit, нет проверок логики, не предусмотрен fail-safe

// Отсутствуют rate limit на пароль и атакующий перебирает OTP без ограничений

public ResponseEntity<?> resetPassword(@RequestBody ResetRequest req){

return passwordService.reset(req.getEmail(), req.getOtp());

}

A07:2025 – Authentication Failures

Сбои аутентификации — слабые пароли, отсутствие MFA, небезопасные сессии, отсутствие защиты от брутфорса, небезопасное хранение учётных данных

// JWT принимается без проверки подписи

Claims claims = Jwts.parser()

.parse(token)

.getBody();

String role = claims.get("role", String.class);

A08:2025 – Software or Data Integrity Failures

Сбои целостности — десериализация объектов без обьявления ограничений, отсутствие проверки подписи, отключённая верификация TLS-сертификатов, JNDI injection, обновления по HTTP без проверки хеша

// Десериализация без фильтра типов, возможен RCE через gadget-цепочки

ObjectInputStream ois = new ObjectInputStream(request.getInputStream());

Object obj = ois.readObject();

A09:2025 – Security Logging & Alerting Failures

Сбои логирования — отсутствие записи событий инфобеза, типа failed logins, access denied, privilege escalation, логирование паролей и токенов в открытом виде, отсутствие алертов для SIEM

A10:2025 – Mishandling of Exceptional Conditions

Неправильная обработка исключений - пустые catch-блоки, stacktrace в HTTP-ответах, fail-open поведение, то есть возврат true при исключении, потеря исключений в async-коде, некорректные HTTP-статус коды ошибок

public boolean isAuthorized(String token) {

try {

return jwtService.verify(token);

} catch (Exception e) {

return true; // получение доступа

}

}

#devsecops #toolchain #sast #dast #secretmanagement #specialty #appsec

#devsecops#toolchain#sast#dast#secretmanagement#specialty#appsec
Открыть в Telegram