"email":"alice@example.com",
"passHash":"5f4dcc3b5aa765d61d8327deb882cf99"
}
(это MD5 от "password")
Приложение использует Jackson с включённым полиморфным десериализатором (@JsonTypeInfo) без белого списка классов. Атакующий может передать JSON с произвольным классом (например, JNDI lookup), что приведёт к RCE. Фикс — отключить defaultTyping, использовать белый список через PolymorphicTypeValidator или миграция на безопасные версии Jackson (2.10+).
BCryptPasswordEncoder.
Тест вызывает регистрацию пользователя с паролем "Test123!" и проверяет,
что в БД сохранился bcrypt-хеш (он должен начинаться с $2).
Если это md5/sha1 — билд стопаем.
#!/bin/bash # password-hash-check.sh curl -s -X POST https://staging.example.internal/register \ -d "email=test@example.com&password=Test123!" > /dev/null HASH=$(curl -s "https://staging.example.internal/debug/userhash?email=test@example.com") if echo "$HASH" | grep -Eq '^"\\$2'; then echo "[OK] Пароль хранится через bcrypt/адаптивный хеш" exit 0 fi echo "[BLOCK] Слабое хеширование паролей (не bcrypt/PBKDF2/Argon2)" exit 1
Это защищает от массового взлома всех паролей при утечке базы.
Стандарт:никаких самописных хеш-функций паролей. Только проверенный адаптивный алгоритм через стандартный PasswordEncoder.