Всего пару месяцев назад PornHub запустил собственную программу вознаграждения за уязвимости, и, как оказалось, здорово вдохновил этим некоторых исследователей. Стало известно, что порносайт выплатил свое первое крупное вознаграждение, размер которого составил $20 000. Дело в том, что силясь взломать PornHub, группа из трех исследователей не просто нашла и продемонстрировала в работе RCE-уязвимость, эти парни обнаружили 0-day баги в PHP, которые и эксплуатировали в ходе атаки.
Дарио Вайсер (Dario Weißer, @haxonaut), Руслан Хабалов (Ruslan Habalov, @evonide) и исследователь, известный под псевдонимом cutz (@_cutz), по сути, нашли сразу две use-after-free уязвимости: CVE-2016-5771 и CVE-2016-5773. Проблема обнаружилась в алгоритме garbage collection (то есть алгоритме, который занимается сбором мусора) и в том, как он взаимодействует с другими PHP объектами. Одним из таких объектов была функция десериализации, которые работала с контентом, который прислали пользователи, то есть обрабатывала, к примеру, всю информацию, поступившую с адресов http://www.pornhub.com/album_upload/create и http://www.pornhub.com/uploading/photo.
Исследователи пишут, что десериализация и user input всегда сочетаются плохо, и полагаться на то, что вы работаете с последней версией PHP, в таких случаях не следует. Трио сумело создать вредоносный пейлоуд, использовавший память, освободившуюся после работы garbage collection алгоритма, который, в свою очередь, запускался после механизма десериализации PHP. В итоге, на сервере PornHub удалось выполнить вредоносный код.
Исследователи подчеркивают, что атака получилась сложной и многоступенчатой, к тому же PornHub использует в работе кастомную версию PHP (что, впрочем, не слишком помогло, в конечном счете). Согласно официальному отчету, поиск и эксплуатация данных уязвимостей потребовали много работы и времени, но оно того стоило, и исследователи были вознаграждены «шикарным видом на файл /etc/passwd».
Но удовольствие от хорошо проделанной работы стало не единственной наградой. За обнаружение двух 0-day уязвимостей в PHP 5.3 и выше, а также за реализацию столь сложной атаки, исследователи получили от PornHub $20 000. Дополнительно $2000 команде также выплатил комитет HackerOne — Internet Bug Bounty.
Все подробности о проделанной работе исследователи уже опубликовали в открытом доступе. Ознакомиться с деталями можно здесь и здесь.
В настоящее время разработчики PHP уже устранили обнаруженные командой проблемы.