Podatność w bibliotece OpENer 2.3.0 umożliwia przepełnienie bufora stosu (stack buffer overflow) poprzez przetworzenie złośliwie spreparowanego pakietu CIP. Ze względu na brak uwierzytelnienia wymaganego do wyzwolenia błędu oraz krytyczny wynik CVSS 9.1, stanowi poważne zagrożenie dla systemów przemysłowych korzystających z protokołu EtherNet/IP.
▸ Pokaż oryginał (EN)
In OpENer 2.3.0 (commit 76b95cf) when parsing incoming CIP (Common Industrial Protocol) network packets, the length parameter is inconsistently typed across the call stack. Specifically, an upstream length calculated as an int is passed to a downstream function that expects an EipInt16 (a 16-bit signed integer). If a maliciously crafted packet with specific length fields is processed, the length parameter can overflow or be truncated into a negative value. This negative length bypasses subsequent bounds checking (due to signed/unsigned comparison issues) and is ultimately used in memory operations, leading to a Stack Buffer Overflow when reading data in DecodePaddedEPath.
Podczas parsowania przychodzących pakietów sieciowych CIP parametr długości jest niezgodnie typowany na kolejnych poziomach stosu wywołań — wartość obliczona jako int jest przekazywana do funkcji oczekującej typu EipInt16 (16-bitowa liczba całkowita ze znakiem). Spreparowany pakiet z odpowiednio dobranymi polami długości powoduje przepełnienie arytmetyczne (CWE-190) lub obcięcie wartości do ujemnej liczby. Ujemna wartość długości omija dalsze sprawdzanie granic ze względu na błąd porównania wartości ze znakiem i bez znaku (signed/unsigned comparison), a następnie jest bezpośrednio używana w operacjach pamięciowych w funkcji DecodePaddedEPath, prowadząc do stack buffer overflow.
Atakujący zdalny, nieuwierzytelniony może doprowadzić do odmowy dostępu (DoS) poprzez awarie procesu lub potencjalnie wykonać arbitralny kod (RCE) w kontekście procesu obsługującego komunikację CIP. Podatność może prowadzić do utraty dostępności oraz naruszenia poufności danych przetwarzanych w pamięci procesu.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Zalecane jest śledzenie aktualizacji w repozytorium projektu EIPStackGroup/OpENer (issue #563). Do czasu wdrożenia poprawki warto ograniczyć dostęp sieciowy do urządzeń obsługujących protokół CIP/EtherNet/IP za pomocą firewall lub segmentacji sieci przemysłowej.
OpENer w wersji 2.3.0 (commit 76b95cf)
Dostępny jest publiczny proof-of-concept opublikowany w serwisie GitHub (gist.github.com/MrAlaskan). Podatność dotyczy środowisk OT/ICS korzystających z protokołu EtherNet/IP, co zwiększa potencjalny wpływ na infrastrukturę przemysłową.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:HOpener Project Opener
APPOpener Project2.3.0
Powiązane podatności
Out-of-bounds read w OpENer 2.3.0 — parsowanie wiadomości CIP/ENIP
Błędna kontrola dostępu w OpENer — przejęcie sesji encapsulation
Out-of-bounds read w EIPStackGroup OpENer — przetwarzanie ForwardOpen
Integer underflow w OpENer 2.3.0 — krytyczne uszkodzenie pamięci (RCE)
RCE przez out-of-bounds write w OpENer EtherNet/IP Stack