CVE-2026-67211
Beschreibung
OOM Denial of Service via Unbounded Map Pre-Sizing in Apache OpenNLP SymSpellModelSerializer Versionen Betroffen: - 3.0.0-M4 - 3.0.0-M5 (Die opennlp-Spellcheck-Erweiterung wurde in 3.0.0-M4 eingeführt. Releases 1.x und 2.x enthalten den betroffenen Code nicht.) Beschreibung: Die SymSpellModelSerializer.create()-Methode liest zwei 32-Bit-signierte Ganzzahl-Zählungsfelder (unigramCount und bigramCount) aus einem binären SymSpell-Modellstrom und übergibt jeden Wert direkt an LinkedHashMap.newLinkedHashMap(), nachdem er nur bestätigt hat, dass er nicht negativ ist. Es wird keine Obergrenze angewendet, so dass die Zählung vollständig vom Angreifer kontrolliert wird, wenn die Modelldatei von einer nicht vertrauenswürdigen Quelle stammt. Eine handgefertigte .bin-Modelldatei, in der jedes Zählfeld auf Integer gesetzt ist. MAX VALUE (oder irgendein Wert, der groß genug ist, um den verfügbaren Heap auszuschöpfen) bewirkt, dass die Karte auf eine Kapazität von 2^30 Einträgen vordimensioniert ist. Das übergroße Backing-Array wird auf dem ersten Put () in dieser Karte zugewiesen und fordert 4-8 GB an, je nachdem, ob komprimierte oops in Kraft sind und die Last mit einem OutOfMemoryError fehlschlägt. Da sich die Zählfelder unmittelbar nach einem Header mit fester Größe befinden (Magie, Formatversion, drei UTF-Strings, die Konfigurationsfelder und die Edit-Distanz-Kennung), zahlt der Angreifer keine sinnvollen Kosten für die Bewaffnung einer Nutzlast: Eine Datei mit deutlich unter 100 Bytes plus einem einzigen echten Eintrag reicht aus, um eine JVM zum Absturz zu bringen, die sie lädt. Jeder Codepfad, der ein SymSpell-Modell deserialisiert, ist betroffen, einschließlich SymSpellModels.deserialize(InputStream), SymSpellModels.fromBytes(byte[]), das Laden des Klassenpfadmodells über SymSpellModelResolver.resolveByLanguage(String), das Befehlszeilentool CorrectTextTool und das Laden des Modellarchivs über den registrierten ArtifactSerializer. Die opennlp-spellcheck-Erweiterung wird in der offiziellen OpenNLP-Binärverteilung ausgeliefert. Die praktische Auswirkung ist die Denial-of-Service-Verweigerung gegen Prozesse, die SymSpell-Modelldateien von nicht vertrauenswürdigen oder halb vertrauenswürdigen Ursprüngen laden. Mitigation: - 3.x-Benutzer sollten auf 3.0.0-M6 upgraden. Hinweis: Der Fix wendet eine obere Grenze auf beide Zählfelder an, die überprüft wird, bevor die Karte vorab dimensioniert ist; Zählungen, die negativ sind oder die Grenze überschreiten, führen dazu, dass eine IOException geworfen wird und der Read schnell ohne große Zuweisung fehlschlägt. Die Bindung ist der bestehende AbstractModelReader. MAX ENTRIES Grenze eingeführt earlie, die die aktuelle Änderung fördert die öffentliche Sichtbarkeit, so dass Serialisierer, die ihr eigenes Binärformat implementieren, es teilen können. Die Standardbindung liegt bei 10.000.000, was weit über den Eintragszahlen legitimer SymSpell-Wörterbücher liegt, aber weit unter jedem Wert, der die Erschöpfung des Haufens bedrohen würde. Bereitstellungen, die berechtigterweise größere Wörterbücher laden müssen, können das Limit beim JVM-Start erhöhen, indem sie die Systemeigenschaft OPENNLP MAX ENTRIES auf die gewünschte positive Ganzzahl setzen (z. B. -DOPENNLP MAX ENTRIES = 50000000); ungültige oder nicht-positive Werte fallen auf den Standard zurück. Beachten Sie, dass diese Eigenschaft mit dem Modell-Reader-Limit geteilt wird und das Anheben entspannt beide. Benutzer, die nicht sofort upgraden können, ..
Quellen & weiterführende Informationen
Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.
Was ist zur Behebung zu tun?
Herstellerhinweise prüfen und das betroffene Produkt kurzfristig patchen oder kompensierende Schutzmaßnahmen aktivieren.
Empfohlene Schritte
- Betroffene Systeme identifizieren: Apache Software Foundation opennlp.
- Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
- Hersteller-Advisory öffnen und verfügbare Updates, Workarounds oder Deaktivierungen prüfen.
- Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.
Übergangsmaßnahmen
- Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
- WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
- Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.
- Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.