В продолжение темы RuCTF2010, хочу рассмотреть еще один уязвимый сервис - CertificateAuthority. Во время игры, флаги с этого сервиса удалось получить только команде SiBears. Сервис CA (certificateauthority.tgz) написан на Java, но это не принципиально. Функционально он представляет собой сервис для выдачи сертификатов и хранения любых сообщений пользователей. Игровые чекеры получали сертификат и оставляли зашифрованное сообщение (флаг).
Предоставленный исходный код содержал функционал не только генерирования сертификата, но и шифрования сообщения, своеобразная подсказка от разработчиков позволила понять в каком формате чекер оставляет сообщения. Почти с первых минут анализа кода стало ясно, что нужно искать уязвимость в криптостойкости применяемого алгоритма. Активный гуглинг на тему дискретного логарифмирования показал, что мы имеем дело со схемой ElGamal. А одним из эффективных алгоритмов дискретного логарифмирования (схема строится на его сложности) является алгоритм Полига-Хеллмана.
Еще гугла, еще кодинга и мы получили PoC (ca.py), но к сожалению игра уже несколько секунд как закончилась, успели только отправить адвайзори без эксплойта. Жаль, что мы взялись за этот сервис так поздно.
Патчинг состоит в использовании достаточно большого простого числа P, на котором генерируется сертификат.
В тайне надеялся, что игру продлят на еще на пару минут и успеем немного флагов утащить :)