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

https://github.com/random-robbie/Jira-Scan

https://github.com/bcoles/jira_scan