Уязвимость «Book Ban»: как одна книга может забанить игрока или крашнуть сервер
Введение: книга-убийца
«Book Ban» (книжный бан) — это эксплойт, использующий уязвимость в обработке NBT-данных книг. Злоумышленник создаёт книгу с аномально большим объёмом данных (миллионы символов текста, тысячи страниц), и когда сервер пытается сохранить чанк с этой книгой или когда другой игрок открывает эту книгу — сервер либо крашится, либо игрок вылетает с ошибкой и не может зайти обратно (потому что его клиент крашится при загрузке чанка с книгой).
Как работает Book Ban
Minecraft хранит текст книги в NBT-тегах. Ограничения ванильного клиента — 100 страниц по 2560 символов (Java Edition 1.20+). Но через модифицированный клиент или прямую манипуляцию пакетами злоумышленник может отправить книгу с миллионом символов на страницу и тысячей страниц. Размер NBT-данных одной книги может достигать гигабайта.
Когда сервер сохраняет чанк с такой книгой, размер region-файла вырастает до десятков мегабайт. Когда другой игрок заходит в этот чанк, его клиент пытается загрузить книгу и падает с ошибкой «Invalid book data» или «Out of memory». Игрок не может зайти на сервер, потому что при входе он оказывается в том же чанке и снова крашится.
Разновидности атаки
- Книга с огромным текстом: миллион символов на страницу — чанк весит 50+ МБ.
- Рекурсивные NBT: шалкеровый ящик внутри шалкерового ящика 100 уровней — экспоненциальный рост данных.
- Unicode-бомба: последовательность Unicode-символов, которые при сохранении занимают гигабайты.
Как защититься
- Paper.yml:
max-book-page-length: 2560,max-book-pages: 100,max-nbt-depth: 512. - Плагин BookLimiter — обрезает текст книги до ванильных лимитов.
- Плагин ItemNBTLimiter — ограничивает размер NBT-данных для всех предметов.
- Мониторинг region-файлов: скрипт, который проверяет размер файлов и алертит, если какой-то превышает 5 МБ.
💡 Совет профи
Настройте Paper на удаление повреждённых предметов: remove-corrupt-tile-entities: true. Если сервер обнаружит книгу с аномальными NBT, он удалит её, а не крашнется. Жертвуете одной книгой — спасаете сервер.
💬 Комментарии (0)
🔒 Войдите, чтобы оставить комментарий
😊 Пока нет комментариев. Будьте первым!