CVE-2026-67211
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Odmowa usługi OOM poprzez nieograniczone wstępne ustalanie rozmiaru mapy w Apache OpenNLP SymSpellModelSerializer
Wersje, których to dotyczy:
- 3.0.0-M4
- 3.0.0-M5
(Rozszerzenie opennlp-spellcheck zostało wprowadzone w wersji 3.0.0-M4. Wersje 1.x i 2.x nie zawierają kodu, którego dotyczy problem.)
Opis:
Metoda SymSpellModelSerializer.create() odczytuje dwa 32-bitowe pola liczby całkowitej ze znakiem (unigramCount i bigramCount) z binarnego strumienia modelu SymSpell i przekazuje każdą wartość bezpośrednio do LinkedHashMap.newLinkedHashMap() po sprawdzeniu, czy jest ona nieujemna. Nie jest stosowana żadna górna granica, więc liczba jest w pełni kontrolowana przez osobę atakującą, gdy plik modelu pochodzi z niezaufanego źródła.
Stworzony plik modelu .bin, w którym dowolne pole licznika jest ustawione na Integer.MAX_VALUE (lub dowolną wartość wystarczająco dużą, aby wyczerpać dostępną stertę) powoduje, że mapa jest wstępnie skalowana do pojemności 2^30 wpisów. Nadmierna tablica zapasowa jest przydzielana przy pierwszej funkcji put() w tej mapie, żądając 4–8 GB w zależności od tego, czy wystąpiły skompresowane operacje oops, a ładowanie kończy się niepowodzeniem z powodu błędu OutOfMemoryError. Ponieważ pola licznikowe znajdują się bezpośrednio po nagłówku o stałym rozmiarze (magiczny, wersja formatu, trzy ciągi UTF, pola konfiguracyjne i identyfikator odległości edycji), osoba atakująca nie ponosi znaczących kosztów związanych z rozmiarem, aby uzbroić ładunek: plik o rozmiarze znacznie poniżej 100 bajtów plus jeden prawdziwy wpis wystarczy, aby spowodować awarię maszyny JVM, która go ładuje.
Ma to wpływ na każdą ścieżkę kodu deserializującą model SymSpell, w tym SymSpellModels.deserialize(InputStream), SymSpellModels.fromBytes(byte[]), ładowanie modelu ścieżki klas za pomocą SymSpellModelResolver.resolveByLanguage(String), narzędzie wiersza poleceń CorrectTextTool i ładowanie archiwum modelu za pośrednictwem zarejestrowanego ArtifactSerializer. Rozszerzenie opennlp-spellcheck jest dostępne w oficjalnej dystrybucji binarnej OpenNLP.
Praktycznym skutkiem jest odmowa usługi wobec procesów ładujących pliki modelu SymSpell z niezaufanych lub częściowo zaufanych źródeł.
Łagodzenie:
- Użytkownicy wersji 3.x powinni dokonać aktualizacji do wersji 3.0.0-M6.
Uwaga: poprawka nakłada górną granicę na oba pola zliczania, sprawdzane przed wstępnym wymiarowaniem mapy; liczby, które są ujemne lub przekraczają ograniczenie, powodują zgłoszenie wyjątku IOException i odczyt szybko kończy się niepowodzeniem bez dużej alokacji. Ograniczeniem jest istniejący limit AbstractModelReader.MAX_ENTRIES wprowadzony wcześniej, który bieżąca zmiana zapewnia widoczność publiczną, aby serializatorzy wdrażający swój własny format binarny mogli go udostępniać. Domyślna granica wynosi 10 000 000, co znacznie przekracza liczbę wpisów w legalnych słownikach SymSpell, ale znacznie poniżej wartości, która groziłaby wyczerpaniem sterty. Wdrożenia, które zgodnie z prawem wymagają ładowania większych słowników, mogą zwiększyć limit przy uruchamianiu maszyny JVM, ustawiając właściwość systemową OPENNLP_MAX_ENTRIES na żądaną dodatnią liczbę całkowitą (np. -DOPENNLP_MAX_ENTRIES=50000000); nieprawidłowe lub niedodatnie wartości wracają do wartości domyślnych. Należy zauważyć, że ta właściwość jest współdzielona z limitem czytnika modelu, a podniesienie jej rozluźnia oba.
Użytkownicy, którzy nie mogą dokonać natychmiastowej aktualizacji, powinni traktować wszystkie pliki modeli SymSpell .bin jako niezaufane dane wejściowe, chyba że ich pochodzenie zostanie zweryfikowane, i powinni unikać ładowania modeli dostarczonych przez użytkowników końcowych lub pobranych z repozytoriów stron trzecich bez sprawdzenia integralności.
>_ Słabości (CWE)
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org