Wspomniana wyżej JIRA jest jednym z popularnych systemów ticketowych i służy głównie usprawnienia organizacji pracy. Jeżeli pracujesz w IT, istnieje bardzo duże prawdopodobieństwo, że to nie Twoje pierwsze spotkanie z tym oprogramowaniem. Jeżeli nie – musisz wiedzieć tylko że jest to bardzo rozbudowany system umożliwiający m.in tworzenie serii zadań i projektów, przypisywania do nich zasobów i osób odpowiedzialnych za wykonanie i śledzenie postępu ich wykonywania – i to tylko początek możliwości tego systemu. JIRA posiada także mnóstwo opcjonalnych pluginów, z których każdy może wprowadzić do niej jakąś dodatkową podatność funkcjonalność.
Mimo, iż JIRA jest zazwyczaj wewnętrznym narzędziem firmy, często zdarza się, że możliwe jest dostanie się do niej z publicznego internetu. Istnieją też publicznie instancje JIRA (lub częściowo publiczne) jeżeli konkretny przypadek użycia zakłada np. możliwość zakładania nowych „ticketów” (czyli nowych zadań) przez np. osoby z internetu.
Światło dzienne ujrzało już wiele podatności, które można wykorzystać nawet nie będąc w ogóle zalogowanym do JIR’y. Aby dowiedzieć się, czy nasza JIRA jest podatna możemy wykonać skan używając do tego narzędzia Nuclei. Nuclei zawiera detektory (szablony / templates) wykrywające praktycznie wszystkie znane publicznie podatności związane z JIRA – poza CVE-2020-14178 (Project Key Enumeration), do którego nie ma publicznego eksploita udostępnionego w sieci (lub trzeba głębiej poszukać).
Wykonanie skanu z pomocą narzędzia Nuclei nie jest trudne. Aby używać nuclei, wystarczy pobrać gotowy, skompilowany plik z „releases” na GitHubie, a następnie skorzystać z polecenia
nuclei -update-templates
Po instalacji nuclei i aktualizacji szablonów, w katalogu domowym użytkownika znajdziemy także folder „nuclei-templates”, gdzie możemy wyszukać wszystkie szablony (czyli pojedyncze detektory) odnoszące się do JIRA np. z użyciem grep’a:
Możemy też utworzyć nowy folder template’ów odnoszący się tylko do JIRA:
1) wyszukujemy wszystkie pliki „template”, które mają w treści „JIRA”
cd ~/nuclei-templates/
grep -Ril „jira” . | grep "\.yaml"
2) niektóre pliki mają takie same nazwy. Więc zamieniamy w nazwie strukturę katalogów na nazwę pliku – może to rozwiązanie jest nieco nieeleganckie, ale szybkie:
mkdir testing-jira; for i in `grep -Ril "jira" . | grep "\.yaml" `; do cp $i ./testing-jira/`echo $i | tr -d "." | tr "/" "_"`.yaml; done
Odpalmy teraz nuclei na instancji JIRA (my akurat posiadamy listę 2 domen – w ramach jednego z programów Bug Bounty, gdzie zainstalowane jest to oprogramowanie). Pośród template’ów do JIRA wkradło się też dosłownie kilka innych (np. Apache SOLR) jednak pozostawiamy je również w folderze – nie zaszkodzą.
Powyżej korzystamy z opcji „-rate-limit” aby ograniczyć ilość żądań na sekundę do dwóch. W przeciwnym razie, w przypadku tych dwóch konkretnych stron, WAF/Firewall szybko odcina nas z uwagi na zbyt duży ruch.
Jeśli chcielibyśmy odpalić testy JIRA tylko na jednej domenie, skorzystalibyśmy z polecenia
nuclei -target jira.mojafirmajakaśtamdomena.com -t testing-jira/
Jeżeli domena znajduje się w sieci wewnętrznej (nie jest publiczna) to trzeba dorzucić opcję -system-resolvers, bo inaczej nuclei będie mieć problem z rozwiązaniem domeny.
Znalezione podatności nie są bezpośrednim zagrożeniem, ponieważ ich skutkiem jest niewielkie ujawnieniem informacji – np. w znalezionych stronach zobaczyć można nazwy niektórych projektów lub imiona i nazwiska niektórych użytkowników. Niestety większość musimy zamazać, więc na poniższym screenie widać tylko, że są to dane w formacie JSON.
W przypadku znalezienia innych podatności w JIRA, exploitacja może nie być tak prosta i może wymagać bardziej złożonych działań. Niektóre exploity na JIRA’ można znaleźć np. na Githubie.
Pamiętaj jednak, że uruchamianie „exploitów z internetu” powinno być poprzedzone weryfikacją tego, co znajduje się w takim programie. Pamiętajmy o zasadzie ograniczonego zaufania.
Inne zasoby z opisem exploitacji JIRA lub kompletnymi exploitami (nie kontrolujemy stanu tych repozytoriów na bieżąco, więc mimo wszystko zalecamy zasadę ograniczonego zaufania)
https://gist.github.com/0x240x23elu/891371d46a1e270c7bdded0469d8e09c
https://github.com/0x48piraj/Jiraffe
https://github.com/daffainfo/AllAboutBugBounty/blob/master/Misc/Unauthenticated%20Jira%20CVE.md
https://github.com/jas502n/CVE-2019-8451
https://github.com/0x48piraj/Jiraffe