OpenC3 COSMOS w wersjach od 5.0.0 do 6.10.1 zawiera krytyczną podatność RCE dostępną przez API JSON-RPC. Nieuwierzytelniony atakujący może wykonać dowolny kod Ruby na serwerze, zanim system zdąży sprawdzić uprawnienia.
▸ Pokaż oryginał (EN)
OpenC3 COSMOS provides the functionality needed to send commands to and receive data from one or more embedded systems. From 5.0.0 to 6.10.1, OpenC3 COSMOS contains a critical remote code execution vulnerability reachable through the JSON-RPC API. When a JSON-RPC request uses the string form of certain APIs, attacker-controlled parameter text is parsed into values using String#convert_to_value. For array-like inputs, convert_to_value executes eval(). Because the cmd code path parses the command string before calling authorize(), an unauthenticated attacker can trigger Ruby code execution even though the request ultimately fails authorization (401). This vulnerability is fixed in 6.10.2.
Gdy żądanie JSON-RPC używa tzw. formy łańcuchowej (string form) określonych API, dane wejściowe kontrolowane przez atakującego są przetwarzane przez funkcję String#convert_to_value. W przypadku danych tablicowych funkcja ta wywołuje eval(), wykonując przekazany kod Ruby. Kluczowym problemem jest kolejność operacji: ścieżka obsługi polecenia cmd przetwarza i ewaluuje ciąg znaków polecenia jeszcze przed wywołaniem funkcji authorize(). Oznacza to, że wykonanie kodu następuje przed weryfikacją uprawnień, nawet jeśli ostateczna odpowiedź serwera zwróci błąd 401 (brak autoryzacji).
Nieuwierzytelniony atakujący może wykonać dowolny kod Ruby w kontekście procesu serwerowego, co prowadzi do pełnego przejęcia kontroli nad systemem, wycieku danych oraz potencjalnego zakłócenia działania obsługiwanych systemów wbudowanych.
Należy jak najszybciej zaktualizować OpenC3 COSMOS do wersji 6.10.2, w której podatność została naprawiona. Jeśli natychmiastowa aktualizacja nie jest możliwa, należy ograniczyć dostęp do API JSON-RPC wyłącznie do zaufanych sieci lub hostów na poziomie firewall.
OpenC3 COSMOS w wersjach od 5.0.0 do 6.10.1 włącznie
Podatność posiada maksymalny wynik CVSS 10.0 oraz wektor wskazujący na brak wymagań co do uwierzytelnienia, złożoności ataku i interakcji użytkownika, przy pełnym wpływie na poufność, integralność i dostępność w zmienionym zakresie (S:C). Szczegóły techniczne oraz advisory dostępne są w repozytorium GitHub producenta.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H