{"id":"CVE-2026-123356","kind":"vulnerability","aliases":["CVE-2026-123356"],"related":[],"title":"GROBID: unauthenticated training endpoint leaks threads until service stops","description":"GROBID is machine learning software for extracting information from scholarly documents. Prior to 0.9.1, the unauthenticated /api/modelTraining endpoint calls GrobidRestProcessTraining.trainModel in GrobidRestProcessTraining.java, where each request creates Executors.newFixedThreadPool(1), submits a training task, and leaves the executor running. Repeated requests permanently retain JVM worker threads and can exhaust process or operating-system thread capacity, degrading or stopping request processing. This issue is fixed in version 0.9.1.","summary":"GROBID, a machine learning tool for extracting data from scholarly documents, creates a new thread pool on every call to its unauthenticated /api/modelTraining endpoint and never shuts it down. Repeated requests exhaust JVM and operating-system thread capacity, so an attacker can slow or stop document processing.","severity":"high","cvss":7.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["grobid","java","package","self-hosted"],"not_affected_if":["api-not-exposed","version-0.9.1-or-later"],"how_to_check":"- Check the GROBID version the server runs; affected if it is below `0.9.1`.\n- Look for a publicly reachable GROBID HTTP port that exposes `/api/modelTraining`.\n- Monitor the JVM thread count of the GROBID process for steady growth.","fix":"- GROBID: move to `0.9.1`.","status":"open","published_at":"2026-11-06T19:17:44+00:00","first_seen_at":"2026-11-06T19:43:48+00:00","triaged_at":"2026-11-06T19:45:52+00:00","updated_at":"2026-11-06T19:45:52+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-06T19:45:52Z","model":"claude-haiku-5-5","output":{"fix":"- GROBID: move to `0.9.1`.","reach":"network","title":"GROBID: unauthenticated training endpoint leaks threads until service stops","impact":"medium","summary":"GROBID, a machine learning tool for extracting data from scholarly documents, creates a new thread pool on every call to its unauthenticated /api/modelTraining endpoint and never shuts it down. Repeated requests exhaust JVM and operating-system thread capacity, so an attacker can slow or stop document processing.","audience":"businesses","category":"package","nicknames":[],"who_cares":["grobid","java","self-hosted"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"Service stops processing requests after thread exhaustion","analyst_note":"","how_to_check":"- Check the GROBID version the server runs; affected if it is below `0.9.1`.\n- Look for a publicly reachable GROBID HTTP port that exposes `/api/modelTraining`.\n- Monitor the JVM thread count of the GROBID process for steady growth.","plain_action":"","needs_analyst":false,"not_affected_if":["version-0.9.1-or-later","api-not-exposed"],"who_is_affected":"Any deployment of GROBID before 0.9.1 that exposes its REST API, especially to untrusted networks, is exposed because the training endpoint requires no authentication. Instances reachable only from a trusted internal network with the API restricted are lower risk. Teams that do not run GROBID can skip it.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000713,"input_tokens":4338,"output_tokens":559,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-123356':12A,15A '-2026':11A,14A '/api/modeltraining':44B,86C '0.9.1':83C,135C '1':97C 'attack':63B 'call':40B,88C 'capac':60B,123C 'creat':33B,95C 'cve':10A,13A 'data':29B 'degrad':124C 'document':32B,68B,80C 'endpoint':4A,45B,87C 'everi':39B 'executor':105C 'executors.newfixedthreadpool':96C 'exhaust':53B,116C 'extract':28B,76C 'fix':132C 'grobid':1A,16B,22B,70C 'grobidrestprocesstraining.java':91C 'grobidrestprocesstraining.trainmodel':89C 'host':21B 'inform':77C 'issu':130C 'java':17B 'jvm':54B,111C 'leak':5A 'learn':25B,73C 'leav':103C 'machin':24B,72C 'never':47B 'new':35B 'oper':57B,120C 'operating-system':56B,119C 'packag':18B 'perman':109C 'pool':37B 'prior':81C 'process':69B,117C,128C 'repeat':51B,107C 'request':52B,94C,108C,127C 'retain':110C 'run':106C 'scholar':31B,79C 'self':20B 'self-host':19B 'servic':8A 'shut':48B 'slow':65B 'softwar':74C 'stop':9A,67B,126C 'submit':98C 'system':58B,121C 'task':101C 'thread':6A,36B,59B,113C,122C 'tool':26B 'train':3A,100C 'unauthent':2A,43B,85C 'version':134C 'worker':112C","nicknames":[],"mitigations":[],"who_affected":"Any deployment of GROBID before 0.9.1 that exposes its REST API, especially to untrusted networks, is exposed because the training endpoint requires no authentication. Instances reachable only from a trusted internal network with the API restricted are lower risk. Teams that do not run GROBID can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["grobid","high","java","package","selfhosted"],"campaign_type":null,"search_a":"'-123356':12A,15A '-2026':11A,14A 'cve':10A,13A 'endpoint':4A 'grobid':1A 'leak':5A 'servic':8A 'stop':9A 'thread':6A 'train':3A 'unauthent':2A","search_b":"'/api/modeltraining':44B 'attack':63B 'call':40B 'capac':60B 'creat':33B 'data':29B 'document':32B,68B 'endpoint':45B 'everi':39B 'exhaust':53B 'extract':28B 'grobid':16B,22B 'host':21B 'java':17B 'jvm':54B 'learn':25B 'machin':24B 'never':47B 'new':35B 'oper':57B 'operating-system':56B 'packag':18B 'pool':37B 'process':69B 'repeat':51B 'request':52B 'scholar':31B 'self':20B 'self-host':19B 'shut':48B 'slow':65B 'stop':67B 'system':58B 'thread':36B,59B 'tool':26B 'unauthent':43B","search_c":"'/api/modeltraining':86C '0.9.1':83C,135C '1':97C 'call':88C 'capac':123C 'creat':95C 'degrad':124C 'document':80C 'endpoint':87C 'executor':105C 'executors.newfixedthreadpool':96C 'exhaust':116C 'extract':76C 'fix':132C 'grobid':70C 'grobidrestprocesstraining.java':91C 'grobidrestprocesstraining.trainmodel':89C 'inform':77C 'issu':130C 'jvm':111C 'learn':73C 'leav':103C 'machin':72C 'oper':120C 'operating-system':119C 'perman':109C 'prior':81C 'process':117C,128C 'repeat':107C 'request':94C,108C,127C 'retain':110C 'run':106C 'scholar':79C 'softwar':74C 'stop':126C 'submit':98C 'system':121C 'task':101C 'thread':113C,122C 'train':100C 'unauthent':85C 'version':134C 'worker':112C","first_public_at":"2026-06-26T09:30:12+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-123356","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-123356","severity":null,"published_at":"2026-11-06T19:17:44+00:00","modified_at":"2026-11-06T19:17:44+00:00","first_seen_at":"2026-11-06T19:43:48+00:00","fetched_at":"2026-11-06T19:43:48+00:00","note":null}],"documents":[{"id":89341,"url":"https://github.com/grobidOrg/grobid/commit/3227e9a6a990ec1687173045f119c24e17d10103","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89342,"url":"https://github.com/grobidOrg/grobid/releases/tag/0.9.1","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":89343,"url":"https://github.com/grobidOrg/grobid/security/advisories/GHSA-g2r5-4c8r-c84f","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-06-26T09:30:12+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}