6 февраля состоялось онлайн-соревнование от команды C4T BuT S4D — STAY ~/ CTF 2022. За 8 часов участники должны были решить 6 сервисов, 2 из которых содержали 0-day уязвимости.
Описание сервисов
1. virush (Bash, автор: Владимир Черепанов)
Сервис, реализующий хранилище данных. Можно складывать объекты по ключу и затем доставать их. Есть возможность безопасно хранить свои данные (с использованием шифрования).
Уязвимости:
- баг в использовании криптографии, позволяющий расшифровать любые данные без пароля
- баг в передаче аргументов в Bash, который приводит к бинарной эксплуатации через перезапись собственной памяти
2. kuar (C++, автор: Георгий Кигурадзе)
Сервис генерации QR-кодов для пользователей. Можно регистрировать пользователей с некоторой секретной информацией и генерировать QR-код, который будет содержать эту информацию.
Уязвимости:
- баг в реализации шифрования AES-ECB, который может привести к выходу за пределы буфера и получению паролей других пользователей.
3. modelrna (Python, автор: Иван Новиков)
Сервис для тестирования вакцин на разных людях. Можно загрузить свою вакцину (в виде ML-модели), затем ввести данные о человеке (группа крови, пол, резус-фактор и т.д.) и узнать, как вакцина поведёт себя на этом человеке.
Уязвимости:
- особенность формата ONNX (в котором хранятся ML-модели), позволяющая внедрить в модель произвольный файл на сервере, который затем можно прочитать.
4. sputnik_v8 (NodeJS, автор: Илья Греков)
Сервис реализует свою стековую виртуальную машину с ограниченным набором инструкций. Можно загружать и выполнять на этой машине произвольный код, затем получать результат выполнения этого кода.
Уязвимости:
- есть возможность аллоцировать буфер без его очистки, что приводит к чтению случайных данных из памяти NodeJS, где лежит секретный ключ.
5. 5Go (Golang, автор: Роман Никитин) Сервис реализует хранилище текстовых документов по их имени. Функциональность сервиса небольшая — можно загрузить новый документ, скачать старый и получить список документов конкретного пользователя.
Уязвимости:
- для хранения документов используется база данных GenjiDB, в которой была найдена ошибка при поиске по индексу (используется для ускорения поиска конкретного документа), что позволяло получить список документов пользователя, зная только часть его названия.
6. vacc_ex (Java, авторы: Иван Новиков и Илья Греков) Сервис реализует аналог биржи, на которой можно торговать различными видами вакцин. Можно загружать свои товары и покупать чужие, при этом их цена постоянно растет.
Уязвимости:
- все цены хранятся как числа с плавающей точкой. При это в формате хранения этих чисел есть константа NaN, которая ведет себя не как остальные числа. Таким образом можно указать цену товара NaN и, купив ее, сделать себе нечто вроде бесконечного баланса на аккаунте.
Результаты
Всего на соревновании было зарегистрировано 112 команд, однако даже такое количество участников не смогло справиться с решением всех предложенных заданий: сервисы virush и kuar остались без сданных флагов. В итоге в тройке лидеров оказались две немецкие команды: saarsec и ENOFLAG, а российская команда Bushwhackers взяла почетное серебро.
Топ-10:

Поразглядывать сервисы вблизи можно в репозитории контеста, а до конца недели — поставить оценку на CTFtime.