
Co znajdziesz w tym artykule?
Wprowadzenie do problemu / definicja
OpenCATS to otwartoźródłowy system ATS wykorzystywany do obsługi procesów rekrutacyjnych, zarządzania kandydatami oraz przechowywania danych związanych z HR. W ujawnionym zgłoszeniu bezpieczeństwa opisano podatność typu SQL Injection dotyczącą wersji do 0.9.7.4, która może umożliwić wykonanie wstrzykniętego kodu SQL w kontekście aplikacji.
Problem dotyczy komponentu AJAX i może prowadzić do ujawnienia danych zapisanych w bazie, w tym informacji o użytkownikach systemu. Ze względu na charakter przetwarzanych danych, luka ma znaczenie nie tylko techniczne, ale również biznesowe i regulacyjne.
W skrócie
Publicznie opisany proof-of-concept wskazuje na możliwość przeprowadzenia blind time-based SQL Injection w OpenCATS do wersji 0.9.7.4. Wektor ataku ma wykorzystywać parametr odpowiedzialny za kierunek sortowania w żądaniu kierowanym do endpointu ajax.php.
- Podatność dotyczy OpenCATS do wersji 0.9.7.4.
- Atak wykorzystuje parametr
sortDirectionw żądaniu AJAX. - Scenariusz przedstawia eksploatację po uwierzytelnieniu.
- Możliwe jest potwierdzenie podatności oraz ekstrakcja danych z bazy.
- Wśród odczytywanych informacji mogą znaleźć się nazwy użytkowników, role i hashe haseł.
Kontekst / historia
SQL Injection pozostaje jedną z najdłużej znanych, ale nadal bardzo groźnych klas błędów aplikacyjnych. Jej źródłem jest zwykle nieprawidłowe łączenie danych wejściowych z zapytaniami do bazy bez odpowiedniej walidacji lub parametryzacji.
W przypadku systemów ATS ryzyko jest szczególnie wysokie, ponieważ przechowują one dane osobowe kandydatów, informacje kontaktowe, notatki rekruterów oraz inne wrażliwe elementy procesów rekrutacyjnych. Publiczne udostępnienie gotowego kodu demonstracyjnego dodatkowo zwiększa prawdopodobieństwo praktycznego wykorzystania błędu przez kolejnych atakujących.
W zgłoszeniu wskazano identyfikator doradczy GHSA-8mc8-5gw6-c7w4. Choć nie przypisano klasycznego numeru CVE, sama publikacja technicznych szczegółów i działającego scenariusza ataku wyraźnie podnosi poziom ryzyka.
Analiza techniczna
Z technicznego punktu widzenia podatność ma występować w obsłudze żądania do ajax.php, gdzie dane siatki są pobierane z użyciem parametrów przekazywanych w strukturze JSON. Krytycznym elementem jest pole sortDirection, które według opublikowanego opisu może zostać wykorzystane do wstrzyknięcia dodatkowego fragmentu zapytania SQL.
Przedstawiony scenariusz ataku zakłada, że napastnik inicjuje sesję HTTP, loguje się do aplikacji przy użyciu ważnych poświadczeń, a następnie wysyła odpowiednio spreparowane żądanie do mechanizmu listy kandydatów. Wstrzyknięty ładunek nie musi zwracać danych wprost. Zamiast tego wykorzystuje technikę blind time-based SQL Injection, w której prawdziwość warunku jest potwierdzana przez opóźnienie odpowiedzi serwera.
Takie podejście pozwala iteracyjnie odczytywać informacje znak po znaku. W opublikowanym przykładzie pokazano możliwość potwierdzenia obecności luki, ustalenia wersji silnika bazy danych, odczytu nazwy aktywnej bazy, zliczenia rekordów w tabeli użytkowników oraz ekstrakcji wybranych danych z tej tabeli.
To istotne, ponieważ nie mamy do czynienia wyłącznie z błędem teoretycznym. Publiczny skrypt automatyzuje kolejne etapy eksploatacji i pokazuje, że wektor wejściowy może być używany w sposób powtarzalny do pozyskiwania danych z backendu.
Konsekwencje / ryzyko
Najpoważniejszym skutkiem podatności jest naruszenie poufności danych. W praktyce może to oznaczać wyciek informacji o użytkownikach systemu, danych kandydatów, elementów procesu rekrutacyjnego oraz danych administracyjnych związanych z obsługą platformy.
Jeżeli z bazy można pozyskać hashe haseł, dalsze zagrożenie zależy od jakości zastosowanego mechanizmu haszowania, polityki haseł oraz możliwości przeprowadzenia ataków offline. Nawet jeśli podatność wymaga wcześniejszego uwierzytelnienia, nadal pozostaje poważna, ponieważ przejęcie konta testowego, słabego hasła lub konta o ograniczonych uprawnieniach może wystarczyć do rozpoczęcia ekstrakcji danych.
Ryzyko obejmuje także konsekwencje prawne i reputacyjne. System ATS przetwarza dane osobowe, dlatego nieautoryzowany dostęp do informacji o kandydatach może prowadzić do obowiązków notyfikacyjnych, kontroli zgodności i strat wizerunkowych.
Rekomendacje
Administratorzy i zespoły bezpieczeństwa powinni w pierwszej kolejności ustalić, czy używana instancja OpenCATS działa w podatnej wersji oraz czy interfejs aplikacji jest dostępny z Internetu. Następnie warto wdrożyć działania ograniczające ryzyko i sprawdzić, czy nie doszło już do nadużyć.
- Zweryfikować używaną wersję OpenCATS i dostępność poprawek lub obejść.
- Przeanalizować kod odpowiedzialny za budowanie zapytań SQL w mechanizmie sortowania.
- Wdrożyć pełną parametryzację zapytań oraz ścisłą walidację dopuszczalnych wartości pól takich jak
sortDirection. - Ograniczyć dostęp do panelu ATS za pomocą VPN, reverse proxy, list adresów IP lub dodatkowych mechanizmów kontroli dostępu.
- Przejrzeć logi HTTP, aplikacyjne i bazodanowe pod kątem anomalii czasowych oraz nietypowych wywołań
ajax.php. - Rozważyć rotację poświadczeń kont administracyjnych i technicznych, jeśli istnieje podejrzenie kompromitacji.
- Ocenić bezpieczeństwo przechowywania haseł i wymusić reset haseł tam, gdzie mogło dojść do ujawnienia hashy.
- Wdrożyć reguły WAF wykrywające charakterystyczne wzorce time-based SQL Injection.
- Przeprowadzić dodatkowe testy bezpieczeństwa wszystkich funkcji sortowania, filtrowania i wyszukiwania w interfejsach AJAX.
Podsumowanie
Ujawniona podatność SQL Injection w OpenCATS 0.9.7.4 pokazuje, że nawet pozornie pomocnicze parametry interfejsu mogą stać się realnym wektorem ataku na warstwę danych. Publicznie dostępny proof-of-concept wskazuje na możliwość praktycznej eksploatacji luki i ekstrakcji informacji z bazy danych.
Dla organizacji korzystających z OpenCATS priorytetem powinny być szybka ocena ekspozycji, ograniczenie dostępu do aplikacji, analiza logów oraz wdrożenie poprawek lub tymczasowych zabezpieczeń. W środowiskach przetwarzających dane kandydatów i informacje HR taki błąd należy traktować jako poważne ryzyko operacyjne i zgodnościowe.
Źródła
- Exploit Database – OpenCATS 0.9.7.4 – SQL Injection – https://www.exploit-db.com/exploits/52579
- GitHub Advisory Database – GHSA-8mc8-5gw6-c7w4 – https://github.com/advisories/GHSA-8mc8-5gw6-c7w4
- OpenCATS – strona projektu – https://www.opencats.org
- OpenCATS – repozytorium projektu – https://github.com/opencats/OpenCATS