Apache OpenNLP w wersjach 3.x przed 3.0.0-M4 zawiera podatność na niebezpieczną deserializację (CWE-502) w metodzie SvmDoccatModel.deserialize(), która może prowadzić do zdalnego wykonania kodu (RCE). Zagrożone są aplikacje korzystające z modułu libsvm do kategoryzacji dokumentów, które wczytują modele z niezaufanych źródeł.
▸ Pokaż oryginał (EN)
Untrusted Java Deserialization in Apache OpenNLP SvmDoccatModel Versions Affected: before 3.0.0-M4 (libsvm document categorization module; introduced in OPENNLP-1808 and only present on the 3.x line) Description: SvmDoccatModel.deserialize(InputStream) reads an attacker-controlled stream with java.io.ObjectInputStream and calls readObject() without an ObjectInputFilter installed. ObjectInputStream materialises every class referenced in the stream before the resulting object is cast to SvmDoccatModel, so the cast that follows readObject() executes only after the foreign object graph has already been deserialised in full. If a Java deserialization gadget chain is available on the consumer's classpath, a crafted payload supplied to deserialize() executes arbitrary code in the JVM that loads it. Apache OpenNLP itself does not ship a known gadget chain, so the realistic risk is to downstream applications that embed the libsvm module alongside vulnerable transitive dependencies. The method is public and static, so any caller can pass an untrusted stream to it directly. The practical impact is remote code execution against processes that load SvmDoccatModel instances from untrusted or semi-trusted origins. Mitigation: 3.x users should upgrade to 3.0.0-M4. Users who cannot upgrade immediately should treat all serialized SvmDoccatModel streams as untrusted input unless their provenance is verified, and should avoid invoking SvmDoccatModel.deserialize() on streams supplied by end users or fetched from third-party sources without integrity checks.
Metoda SvmDoccatModel.deserialize(InputStream) przekazuje strumień kontrolowany przez atakującego bezpośrednio do java.io.ObjectInputStream i wywołuje readObject() bez skonfigurowanego ObjectInputFilter. Java materializuje wszystkie klasy wskazane w strumieniu jeszcze przed rzutowaniem wyniku na SvmDoccatModel — co oznacza, że obcy graf obiektów jest w pełni deserializowany zanim nastąpi jakiekolwiek sprawdzenie typów. Jeśli na ścieżce klas (classpath) aplikacji konsumującej znajduje się znany gadget chain deserializacji, spreparowany payload dostarczony do metody deserialize() pozwala na wykonanie dowolnego kodu w JVM. Metoda jest publiczna i statyczna, więc dowolny kod wywołujący może przekazać do niej niezaufany strumień.
Atakujący może osiągnąć zdalne wykonanie kodu (RCE) w procesie JVM, który wczytuje instancje SvmDoccatModel z niezaufanych lub słabo kontrolowanych źródeł. Kompromitacja procesu może skutkować naruszeniem poufności, integralności oraz dostępności danych i systemu.
Należy zaktualizować Apache OpenNLP do wersji 3.0.0-M4 lub nowszej. Użytkownicy, którzy nie mogą natychmiast przeprowadzić aktualizacji, powinni traktować wszystkie strumienie SvmDoccatModel jako niezaufane dane wejściowe i unikać wywoływania SvmDoccatModel.deserialize() na strumieniach dostarczanych przez użytkowników końcowych lub pobieranych z zewnętrznych źródeł bez weryfikacji integralności (np. podpisów kryptograficznych).
Apache OpenNLP w wersjach z gałęzi 3.x przed 3.0.0-M4 (moduł libsvm do kategoryzacji dokumentów; podatność wprowadzona w OPENNLP-1808, obecna wyłącznie w linii 3.x). Wersje wcześniejsze (2.x i starsze) nie zawierają podatnego modułu.
Apache OpenNLP samo w sobie nie dostarcza żadnego znanego gadget chain — realne ryzyko RCE dotyczy aplikacji downstream, które osadzają moduł libsvm razem z podatnymi zależnościami tranzaktywnymi zawierającymi gadget chain (np. popularnych bibliotek Java). Podatność zgłoszona i opublikowana 2026-07-06 na liście oss-security.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:LApache Opennlp
APPApache3.0.0
Powiązane podatności
XXE w Apache OpenNLP — ujawnienie plików i SSRF przez parsowanie słowników
Apache OpenNLP: arbitralne ładowanie klas przez manifest modelu (RCE-adjacent)
Apache OpenNLP — podatność XXE przy ładowaniu modeli i słowników XML
OOM Denial of Service via Unbounded Array Allocation in Apache OpenNLP AbstractModelReader Versions Affected...
Arbitralne tworzenie instancji klasy przez Generator Descriptor XML i Format Name w Apache OpenNLP Wersje dot...