TGViewer
Четыре луча Четыре луча @four_rays · 4.02K subscribers
Post #212 2.72K
/etc/passwd за второй столик

CVE-2026-53435 — уязвимость десериализации, которая позволяет авторизованному пользователю читать произвольные файлы в Jenkins в версиях до 2.567 и LTS до 2.555.2.

🫡 Метрики:
Base Score: 8.8 HIGH
CWE: CWE-502


🫡 Об уязвимости:
Для эксплуатации уязвимости злоумышленнику необходимы права Overall/Read, а также как минимум одно из следующих прав:

💡 Item/Configure — чтобы редактировать существующее задание или представлять через POST /config.xml;

💡 View/Configure — чтобы создавать новое представление через POST /createView;

💡 Agent/Configure — чтобы настраивать агентов (если атака идет через агента).

Шаг 1. Обход фильтрации
Jenkins использует XStream для десериализации XML-конфигураций и применяет фильтр ClassFilter (реализация JEP-200), который разрешает создавать только классы из ядра Jenkins или установленных плагинов. Уязвимость позволяет обойти эту защиту, используя разрешенные классы в качестве «гаджетов». Так, например, в публичном эксплойте используется класс hudson.Plugin$DummyImpl из ядра Jenkins. C внедренным в <properties> гаджетом:
  <hudson.Plugin_-DummyImpl>
<wrapper class="hudson.PluginWrapper">
<baseResourceURL>file:/</baseResourceURL>
</wrapper>
</hudson.Plugin_-DummyImpl>


Шаг 2. Чтение файла
Stapler — это Java-фреймворк, который связывает объекты Java-кода с URL-адресами. BaseResourceURL обычно относится к путям, используемым Stapler для загрузки статических ресурсов (картинок, стилей, JS-файлов) из плагинов или ядра Jenkins. Подставив в baseResourceURL конструкцию file:/, атакующий получает доступ к корню файловой системы сервера.

🫡 Пример тела запроса:
<?xml version='1.1' encoding='UTF-8'?><hudson.model.ListView><name>all</name><properties><hudson.Plugin_-DummyImpl><wrapper class="hudson.PluginWrapper"><baseResourceURL>file:/</baseResourceURL></wrapper></hudson.Plugin_-DummyImpl></properties><jobNames class="tree-set"><comparator class="hudson.util.CaseInsensitiveComparator"/></jobNames><jobFilters/><columns/><recurse>false</recurse></hudson.model.ListView>


🫡 Конечные точки:
/createView — конечная точка для создания нового представления. Пример на скриншоте 1.

/config.xml — конечная точка для редактирования уже имеющегося представления. Пример на скриншоте 2.

/view/{ViewName}/properties/0/{file} — конечная точка загрузки статических ресурсов, которая позволяет читать произвольные файлы.

🫡 Как защищаться:
1) Обновиться.
2) Проверить логи сервера на наличие обращений к /view/{ViewName}/properties/0/{file}, где вместо {file} передаются подозрительные файлы (например, /etc/passwd, конфиги, системные файлы).
3) Написать правила на IDS/WAF, блокирующие POST-запросы на /config.xml или /createView, содержащие <hudson.Plugin_-DummyImpl> <baseResourceURL>file:/</baseResourceURL>.
  • ❤ 7
  • 🔥 4
  • 👍 3
  • 👾 1
More from @four_rays
  1. Sep 14, 2026💣 Ржавый код: почему все переходят на Rust и когда аналитику можно его не реверсить Rust…
  2. Sep 11, 2026😳 DFIR diggin’ deeper: неочевидные источники артефактов при расследовании атак Когда стан…
  3. Sep 7, 2026😀 Call for Papers на технострим SOC Forum 2026 еще открыт! Темы: 1️⃣ Offense: актуальные…
  4. Aug 31, 2026☀️ Zimbra, все еще скрывающая боль Ранее мы уже рассказывали о расследовании «Zimbra, скры…
  5. Aug 19, 2026💡 Разберемся с непопулярными артефактами на OffZone 2026 Выбираете, какие выступления пос…
  6. Aug 17, 2026😀 Admin may cry CVE-2026-41452 — уязвимость, позволяющая перезаписать данные администрато…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →