Команда Jenkins, популярного продукта с открытым исходным кодом для автоматизации разработки, обнародовала в понедельник информацию, касающуюся критической уязвимости веб-сервера Jetty, которая может привести к повреждению памяти и раскрытию конфиденциальной информации.
Дефект CVE-2019-17638 имеет рейтинг CVSS 9.4 и оказывает влияние на Eclipse Jetty версий 9.4.27.v20200227 до 9.4.29.v20200521. Это полнофункциональный инструмент, предоставляющий Java HTTP-сервер и веб-контейнер для использования в программных фреймворках.
«Jenkins содержит Winstone-Jetty, обертку вокруг Jetty, используемую в качестве HTTP и servlet-сервера с применением java -jar jenkins.war. Таким образом, Jenkins запускается при использовании любого из инсталляторов или пакетов, но не при запуске с использованием контейнеров для сервлетов, таких как Tomcat», - сообщает Команда Jenkins.
«Уязвимость может позволить неаутентифицированным злоумышленникам получить заголовки HTTP-ответов, которые могут содержать конфиденциальные данные, предназначенные для другого пользователя».
Влияющие на Jetty и Jenkins Core баги, по-видимому, были допущены в Jetty версии 9.4.27, которая добавила механизм для обработки больших заголовков ответа HTTP и предотвращения переполнения буфера.
«Проблема возникала в случае переполнения буфера. Мы освободили заголовочный буфер, но не обнулили поле», - сообщил руководитель проекта Jetty Грег Уилкинс.
Чтобы справиться с этим, Jetty вызывает исключение и отображает ошибку HTTP 431, которая приводит к тому, что заголовки HTTP-ответа дважды освобождаются в буферный пул, что, в свою очередь, приводит к повреждению памяти и раскрытию информации.
Таким образом, из-за двойного освобождения заголовка, два потока могут получить один и тот же буфер из пула в одно и тоже время и потенциально позволить одному запросу получить доступ к ответу, написанному другим потоком, который может включать в себя идентификаторы сеансов, учетные данные аутентификации и другую конфиденциальную информацию.
Иначе говоря, в то время, как поток 1 собирается использовать ByteBuffer для записи данных ответа 1, поток 2 заполняет ByteBuffer данными ответа 2. Затем поток 1 переходит к записи буфера, который теперь содержит данные ответа 2. В результате клиент 1, который выдал запрос 1 и ожидает получения ответов, увидит ответ 2, в котором могут содержаться конфиденциальные данные, принадлежащие клиенту 2.
Повреждение памяти позволило клиентам перемещаться между сессиями, тем самым имея перекрестный доступ, так как куки-файлы аутентификации из ответа одного пользователя посылались другому пользователю, тем самым позволяя пользователю A перепрыгнуть в сессию пользователя Б.
После раскрытия уязвимость была устранена в Jetty 9.4.30.v20200611, выпущенном в прошлом месяце. Компания Jenkins, которая использует Jetty через интерфейс командной строки под названием Winstone, исправила ошибку в Jenkins 2.243 и Jenkins LTS 2.235.5, выпущенных 17.08.2020.
Пользователям Jenkins рекомендуется срочно обновить свое программное обеспечение до последней версии для исправления дефекта повреждения буфера.
Перевод сделан со статьи https://thehackernews.com/