← Back to CVE Explorer

CVE-2026-43825

Full vulnerability record from the local CVENow database.

Description

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.

Severity
HIGH
CVSS score
7.3 (v3.1)
Vulnerability status
Analyzed
Source identifier
Published
2026-07-06 17:16:31.570000
Last modified
2026-10-25 20:10:00.147000
View original CVE JSON
{
  "id": "CVE-2026-43825",
  "sourceIdentifier": "[email protected]",
  "published": "2026-07-06T17:16:31.570",
  "lastModified": "2026-10-25T20:10:00.147",
  "vulnStatus": "Analyzed",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Untrusted Java Deserialization in Apache OpenNLP SvmDoccatModel\n\nVersions Affected:\n  before 3.0.0-M4 (libsvm document categorization module; introduced in\n  OPENNLP-1808 and only present on the 3.x line)\n\nDescription:\nSvmDoccatModel.deserialize(InputStream) reads an attacker-controlled\nstream with java.io.ObjectInputStream and calls readObject() without an\nObjectInputFilter installed. ObjectInputStream materialises every class\nreferenced in the stream before the resulting object is cast to\nSvmDoccatModel, so the cast that follows readObject() executes only\nafter the foreign object graph has already been deserialised in full.\n\nIf a Java deserialization gadget chain is available on the consumer's\nclasspath, a crafted payload supplied to\ndeserialize() executes arbitrary code in the JVM that loads it. Apache\nOpenNLP itself does not ship a known gadget chain, so the realistic\nrisk is to downstream applications that embed the libsvm module\nalongside vulnerable transitive dependencies. The method is public and\nstatic, so any caller can pass an untrusted stream to it directly.\n\nThe practical impact is remote code execution against processes that\nload SvmDoccatModel instances from untrusted or semi-trusted origins.\n\nMitigation:\n\n3.x users should upgrade to 3.0.0-M4.\n\nUsers who cannot upgrade immediately should treat all serialized\nSvmDoccatModel streams as untrusted input unless their provenance is\nverified, and should avoid invoking SvmDoccatModel.deserialize() on\nstreams supplied by end users or fetched from third-party sources\nwithout integrity checks."
    },
    {
      "lang": "es",
      "value": "Deserialización Java no confiable en Apache OpenNLP SvmDoccatModel\n\nVersiones Afectadas:\nanteriores a 3.0.0-M4 (módulo de categorización de documentos libsvm; introducido en OPENNLP-1808 y solo presente en la línea 3.x)\n\nDescripción:\nSvmDoccatModel.deserialize(InputStream) lee un flujo controlado por un atacante con java.io.ObjectInputStream y llama a readObject() sin un ObjectInputFilter instalado. ObjectInputStream materializa cada clase referenciada en el flujo antes de que el objeto resultante sea convertido a SvmDoccatModel, por lo que la conversión que sigue a readObject() se ejecuta solo después de que el grafo de objetos externo ya haya sido deserializado por completo.\n\nSi una cadena de gadgets de deserialización Java está disponible en el classpath del consumidor, una carga útil manipulada suministrada a deserialize() ejecuta código arbitrario en la JVM que la carga. Apache OpenNLP en sí mismo no incluye una cadena de gadgets conocida, por lo que el riesgo realista es para las aplicaciones descendentes que incrustan el módulo libsvm junto con dependencias transitivas vulnerables. El método es público y estático, por lo que cualquier llamador puede pasarle un flujo no confiable directamente.\n\nEl impacto práctico es la ejecución remota de código contra procesos que cargan instancias de SvmDoccatModel desde orígenes no confiables o semi-confiables.\n\nMitigación:\n\nLos usuarios de 3.x deberían actualizar a 3.0.0-M4.\n\nLos usuarios que no puedan actualizar inmediatamente deberían tratar todos los flujos serializados de SvmDoccatModel como entrada no confiable a menos que se verifique su procedencia, y deberían evitar invocar SvmDoccatModel.deserialize() en flujos suministrados por usuarios finales u obtenidos de fuentes de terceros sin comprobaciones de integridad."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "Apache Software Foundation",
          "product": "Apache OpenNLP :: Core :: ML :: LibSVM",
          "defaultStatus": "unaffected",
          "collectionURL": "https://repo.maven.apache.org/maven2",
          "packageName": "org.apache.opennlp:opennlp-ml-libsvm",
          "versions": [
            {
              "version": "3.0.0-M1",
              "lessThan": "3.0.0-M4",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L",
          "baseScore": 7.3,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "LOW",
          "availabilityImpact": "LOW"
        },
        "exploitabilityScore": 3.9,
        "impactScore": 3.4
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-07-06T19:11:49.058504Z",
          "id": "CVE-2026-43825",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-502"
        }
      ]
    }
  ],
  "configurations": [
    {
      "nodes": [
        {
          "operator": "OR",
          "negate": false,
          "cpeMatch": [
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:apache:opennlp:3.0.0:m1:*:*:*:*:*:*",
              "matchCriteriaId": "57E14048-91DB-4673-9A7B-B15675B3994A"
            },
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:apache:opennlp:3.0.0:m2:*:*:*:*:*:*",
              "matchCriteriaId": "2E738486-C0BD-4FDB-8880-DBC2BA4C0D77"
            },
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:apache:opennlp:3.0.0:m3:*:*:*:*:*:*",
              "matchCriteriaId": "FB9FDE8C-5093-4106-99EA-D1C273B81D21"
            }
          ]
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://lists.apache.org/thread/c7kom0pgk9cbpfnbooh5m3g85ndf50hn",
      "source": "[email protected]",
      "tags": [
        "Mailing List",
        "Vendor Advisory"
      ]
    },
    {
      "url": "http://www.openwall.com/lists/oss-security/2026/07/06/9",
      "source": "af854a3a-2127-422b-91ae-364da2661108",
      "tags": [
        "Mailing List",
        "Third Party Advisory"
      ]
    }
  ]
}