Jenkins CVE-2026-33001: archiwum artefaktów prowadziło do RCE
Jenkins niebezpiecznie obsługiwał symlinki w tar i tar.gz. Wyjaśniamy drogę do RCE, warunki wykorzystania, podatne wersje i poprawkę 2.555/LTS 2.541.3.
- AUTOR
- Karol Rapacz / CEO Breachroad · OSCP · PNPT
- PUBLIKACJA
- 18 marca 2026
- CZAS CZYTANIA
- 12 min czytania
- TEMAT
- Podatności i CVE
Advisory Jenkins z 18 marca 2026 roku opisało CVE-2026-33001: błąd obsługi dowiązań symbolicznych przy rozpakowywaniu .tar i .tar.gz. Podatne są Jenkins 2.554 i starsze oraz LTS 2.541.2 i starsze. Wersje 2.555 i LTS 2.541.3 odrzucają pliki, których rzeczywista ścieżka wychodzi poza katalog docelowy, oraz zapis przez symlink w ścieżce.
Wpływ jest poważny, lecz ma ważne warunki. Atakujący potrzebuje uprawnienia Item/Configure albo kontroli nad procesem agenta. Podatna ścieżka jest używana m.in. przez akcję „Archive the artifacts” oraz kroki Pipeline archiveArtifacts i archive, gdy standardowy artifact manager zapisuje na filesystemie kontrolera.
Jak zapis pliku zmienia się w wykonanie kodu
Archiwum może zawierać symlink prowadzący poza katalog rozpakowania. Jeśli ekstraktor ufa logicznej nazwie zamiast sprawdzać rozwiązaną ścieżkę, kolejny plik trafia w dowolne miejsce dostępne dla użytkownika systemowego Jenkins. Na kontrolerze zapis do JENKINS_HOME/init.groovy.d/ może uruchomić skrypt przy starcie, a zapis w JENKINS_HOME/plugins/ może podstawić plugin. Sam path traversal staje się wtedy trwałym wykonaniem kodu.
Nie jest to pre-auth RCE z internetu. Ryzyko rośnie jednak w organizacji, która traktuje agentów CI jako nieufne środowiska buildów, pozwala zespołom konfigurować joby albo uruchamia pull requesty z forka. Przejęty agent jest częścią modelu zagrożeń: może przygotować artefakt, który później rozpakowuje bardziej uprzywilejowany kontroler.
Priorytet naprawy i hunting
Zaktualizuj kontroler, a następnie sprawdź joby archiwizujące tar, użycie standardowego artifact managera i to, kto ma Item/Configure. Do czasu patcha wyłącz archiwizację nieufnych archiwów lub przenieś artefakty do zewnętrznego managera, ale nie traktuj obejścia jako rozwiązania trwałego.
Przejrzyj:
- nowe pliki i symlinki w
JENKINS_HOME/init.groovy.dorazplugins, - nieoczekiwane modyfikacje konfiguracji i restart kontrolera,
- archiwa wygenerowane przez agentów pochodzących z nieufnych branchy,
- procesy potomne Jenkinsa i nowe połączenia sieciowe po ekstrakcji,
- przyrost uprawnień
Item/Configure.
Kontroler nie powinien budować kodu. Agenci mają być efemeryczni, sekrety ograniczone do zadania, a egress filtrowany. Szerszy model opisujemy w analizie bezpieczeństwa CI/CD i DevSecOps.
CVE-2026-33001 jest przypomnieniem, że artefakt nie jest pasywnym plikiem. To dane kontrolowane przez mniej zaufaną strefę, które trafiają do bardziej uprzywilejowanego parsera. Audyt pipeline powinien testować również tę granicę zaufania.
Macierz ryzyka dla typowego Jenkins
Najwyższy priorytet ma kontroler zapisujący artefakty lokalnie, z agentami budującymi nieufne branche oraz użytkownikami posiadającymi Item/Configure. Niższy, ale nadal realny priorytet ma środowisko, gdzie wyłącznie administrator konfiguruje joby, lecz agent może zostać przejęty przez zależność builda. Zewnętrzny artifact manager zmniejsza konkretną ścieżkę na kontrolerze, lecz nie naprawia podatnego core.
Sprawdź także pluginy wywołujące wspólną bibliotekę ekstrakcji. Lista z advisory wymienia najbardziej widoczne funkcje, nie musi obejmować każdego przepływu pluginu. Wyszukaj w konfiguracjach kroki archiwizacji oraz rozszerzenia .tar i .tar.gz, a potem porównaj z historią buildów.
Hardening katalogu JENKINS_HOME
Użytkownik systemowy kontrolera powinien mieć zapis tylko tam, gdzie Jenkins rzeczywiście tego potrzebuje. Monitor integralności może objąć init.groovy.d, plugins, pliki konfiguracyjne i katalog użytkowników. Alarmuj na symlink, zmianę właściciela oraz plugin bez zatwierdzonego hasha.
Backup JENKINS_HOME jest wrażliwy: zawiera konfigurację, sekrety zaszyfrowane kluczem kontrolera i historię. Nie udostępniaj go agentom. Klucz master i backup powinny znajdować się poza tą samą strefą kompromitacji.
Bezpieczna walidacja poprawki
Nie używaj publicznego archiwum exploitacyjnego na produkcji. W środowisku testowym przygotuj archiwum z symlinkiem prowadzącym do nieszkodliwego katalogu tymczasowego i sprawdź, że wersja po patchu odmawia ekstrakcji. Zapisz komunikat, wersję core i typ artifact managera jako dowód.
Czy wystarczy zablokować .tar.gz? To może czasowo ograniczyć ścieżkę, ale joby i pluginy mogą tworzyć archiwa automatycznie. Aktualizacja core jest jedyną trwałą odpowiedzią na opisaną lukę.
Decyzja dla właściciela CI/CD
Nadaj podatności priorytet awaryjny, jeżeli jakikolwiek nie w pełni zaufany agent archiwizuje dane na kontrolerze. Nie czekaj na publiczny exploit: warunki z advisory są wystarczające do oceny. Jeżeli środowisko nie spełnia warunków, zapisz dowód — wersję managera artefaktów, model uprawnień i brak ścieżki ekstrakcji — a patch nadal wykonaj w najbliższym oknie.
Po naprawie dodaj kontrolę do standardu platformy: kontroler bez executorów, efemeryczne agenty, zewnętrzny magazyn artefaktów, minimalne uprawnienia folderów i test odtwarzania. CVE jest jednorazowym zdarzeniem; poprawa architektury ogranicza całą klasę przyszłych błędów parsera.
Źródła pierwotne: Jenkins Security Advisory 2026-03-18, Jenkins upgrade guide.


