🔍 CVE-2026-43825

7.3
CVSS Score
HIGH
2026-07-06
2026-10-25 20:10
✅ 완료

🇰🇷 한글 설명

Apache OpenNLP의 SvmDoccatModel.deserialize(InputStream) 메서드가 신뢰되지 않은 스트림을 ObjectInputFilter 없이 ObjectInputStream으로 역직렬화합니다. 따라서 cast 이전에 외부 객체 그래프가 모두 역직렬화되어, 호출자의 클래스패스에 있는 gadget chain을 통해 원격 코드 실행이 가능합니다.

💡 쉬운 설명

Apache OpenNLP의 문서 분류 모델을 불러오는 기능에 검증되지 않은 데이터를 처리하는 취약점이 있습니다. 공격자가 조작한 모델 파일을 프로그램에 넣으면 서버에서 임의의 명령이 실행될 수 있습니다.

🇺🇸 원문 (English)

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.

📍 영향받는 시스템

Apache OpenNLP 3.0.0-M4 미만의 3.x 버전 (libsvm 문서 분류 모듈 포함 환경)

⚔️ 공격 벡터

조작된 직렬화 스트림을 SvmDoccatModel.deserialize()에 전달하여 클래스패스의 gadget chain으로 JVM에서 임의 코드를 실행

🛡️ 대응 방법

Apache OpenNLP를 3.0.0-M4 이상으로 업그레이드하고, 업그레이드 전에는 신뢰할 수 없는 출처의 SvmDoccatModel 스트림 로드를 중단

🔧 검증 코드

출력된 jar 경로와 Implementation-Version을 확인하여 버전이 3.0.0-M4 미만의 3.x이면 취약하고, 3.0.0-M4 이상이거나 2.x 이하이면 해당 취약점의 영향을 받지 않습니다 (결과가 없으면 OpenNLP 미설치).

Shell / Script
find / -name 'opennlp-*.jar' 2>/dev/null | xargs -I{} sh -c 'unzip -p {} META-INF/MANIFEST.MF 2>/dev/null | grep -i Implementation-Version | sed "s|^|{}: |"'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L

💻 영향받는 소프트웨어

Magento Open Source