{"id":"CVE-2026-82436","kind":"vulnerability","aliases":["CVE-2026-82436"],"related":[],"title":"Apache Storm: state restore from Redis can run code in worker JVM","description":"Description\n\n`DefaultStateSerializer`, used to persist and restore stateful bolt checkpoints, configured Kryo with class\nregistration disabled and an instantiation strategy that constructs objects without invoking their\nconstructors, then deserialized whatever bytes the state store returned. A party able to write to the\ntopology's keyspace in the state store, for example a co-tenant of a shared Redis instance or anyone with\nnetwork access to it, could therefore place a serialized object graph that executes code inside the worker\nJVM when the state is restored.\n\nThis requires the Redis-backed state provider, which is not the default. Write access to a state-store key\nis a data-plane privilege; code execution in the worker JVM is not, so the two are not equivalent.\n\nMitigation\n\nUpgrade to 3.1.0, where the state serializer requires registered classes.\n\nNote that this is a behaviour change for existing state: checkpoints written by an affected version may fail\nto restore, and a migration step may be required. Users who cannot upgrade immediately should restrict\nnetwork and credential access to the state store to the cluster itself.\n\nCredit\n\nThe ASF -- found using Claude agents to study the security of open-source projects, validated and reported by Apache Storm.","summary":"Apache Storm's bolt state serializer deserializes whatever bytes the state store returns, with Kryo class registration disabled. A party who can write to the topology's keys in the state store, such as a co-tenant of a shared Redis, can make code run inside the worker JVM when state is restored.","severity":"high","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["apache-storm","jvm","package","redis","stateful-bolts"],"not_affected_if":["default-state-provider","isolated-state-store","no-redis-state-store"],"how_to_check":"- Check whether the topology uses the Redis-backed state provider (not the default).\n- Check the Storm version in use; affected versions are those before `3.1.0`, per the mitigation text.\n- Check who can reach or write to the Redis instance holding the state keys.","fix":"- Apache Storm: upgrade to `3.1.0`, where the state serializer requires registered classes. Note that checkpoints written by affected versions may fail to restore and a migration step may be required.","status":"open","published_at":"2026-11-09T10:17:11+00:00","first_seen_at":"2026-11-09T10:25:49+00:00","triaged_at":"2026-11-09T10:26:36+00:00","updated_at":"2026-11-09T10:26:36+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-09T10:26:36Z","model":"claude-haiku-5-5","output":{"fix":"- Apache Storm: upgrade to `3.1.0`, where the state serializer requires registered classes. Note that checkpoints written by affected versions may fail to restore and a migration step may be required.","reach":"network","title":"Apache Storm: state restore from Redis can run code in worker JVM","impact":"high","summary":"Apache Storm's bolt state serializer deserializes whatever bytes the state store returns, with Kryo class registration disabled. A party who can write to the topology's keys in the state store, such as a co-tenant of a shared Redis, can make code run inside the worker JVM when state is restored.","audience":"businesses","category":"package","nicknames":[],"who_cares":["apache-storm","redis","jvm","stateful-bolts"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"code runs inside the Storm worker JVM on restore","analyst_note":"","how_to_check":"- Check whether the topology uses the Redis-backed state provider (not the default).\n- Check the Storm version in use; affected versions are those before `3.1.0`, per the mitigation text.\n- Check who can reach or write to the Redis instance holding the state keys.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["default-state-provider","no-redis-state-store","isolated-state-store"],"who_is_affected":"Only topologies that use the Redis-backed state provider are exposed, since it is not the default. The risk comes from anyone who can write to the state-store keys, such as a co-tenant on a shared Redis or anyone with network access to it. Teams with Redis restricted to the cluster and tight credentials on the state store are lower risk, though upgrading is still the stated fix.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000795,"input_tokens":4840,"output_tokens":623,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,17A '-82436':15A,18A '3.1.0':212C 'abl':119C 'access':146C,182C,257C 'affect':234C 'agent':272C 'anyon':143C 'apach':1A,20B,28B,286C 'apache-storm':19B 'asf':268C 'back':173C 'behaviour':225C 'bolt':27B,31B,90C 'byte':36B,112C 'cannot':249C 'chang':226C 'checkpoint':91C,230C 'class':43B,95C,219C 'claud':271C 'cluster':264C 'co':64B,135C 'co-ten':63B,134C 'code':9A,72B,158C,195C 'configur':92C 'construct':103C 'constructor':108C 'could':149C 'credenti':256C 'credit':266C 'cve':13A,16A 'data':192C 'data-plan':191C 'default':180C 'defaultstateseri':83C 'descript':82C 'deseri':34B,110C 'disabl':45B,97C 'equival':208C 'exampl':132C 'execut':157C,196C 'exist':228C 'fail':237C 'found':269C 'graph':155C 'immedi':251C 'insid':74B,159C 'instanc':141C 'instanti':100C 'invok':106C 'jvm':12A,22B,77B,162C,200C 'key':55B,188C 'keyspac':126C 'kryo':42B,93C 'make':71B 'may':236C,244C 'migrat':242C 'mitig':209C 'network':145C,254C 'note':220C 'object':104C,154C 'open':279C 'open-sourc':278C 'packag':23B 'parti':47B,118C 'persist':86C 'place':151C 'plane':193C 'privileg':194C 'project':281C 'provid':175C 'redi':6A,24B,69B,140C,172C 'redis-back':171C 'regist':218C 'registr':44B,96C 'report':284C 'requir':169C,217C,246C 'restor':4A,81B,88C,167C,239C 'restrict':253C 'return':40B,116C 'run':8A,73B 'secur':276C 'serial':33B,153C,216C 'share':68B,139C 'sourc':280C 'state':3A,26B,32B,38B,58B,79B,89C,114C,129C,165C,174C,186C,215C,229C,260C 'state-stor':185C 'stateful-bolt':25B 'step':243C 'store':39B,59B,115C,130C,187C,261C 'storm':2A,21B,29B,287C 'strategi':101C 'studi':274C 'tenant':65B,136C 'therefor':150C 'topolog':53B,124C 'two':205C 'upgrad':210C,250C 'use':84C,270C 'user':247C 'valid':282C 'version':235C 'whatev':35B,111C 'without':105C 'worker':11A,76B,161C,199C 'write':50B,121C,181C 'written':231C","nicknames":[],"mitigations":[],"who_affected":"Only topologies that use the Redis-backed state provider are exposed, since it is not the default. The risk comes from anyone who can write to the state-store keys, such as a co-tenant on a shared Redis or anyone with network access to it. Teams with Redis restricted to the cluster and tight credentials on the state store are lower risk, though upgrading is still the stated fix.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["apachestorm","high","jvm","package","redis","statefulbolts"],"campaign_type":null,"search_a":"'-2026':14A,17A '-82436':15A,18A 'apach':1A 'code':9A 'cve':13A,16A 'jvm':12A 'redi':6A 'restor':4A 'run':8A 'state':3A 'storm':2A 'worker':11A","search_b":"'apach':20B,28B 'apache-storm':19B 'bolt':27B,31B 'byte':36B 'class':43B 'co':64B 'co-ten':63B 'code':72B 'deseri':34B 'disabl':45B 'insid':74B 'jvm':22B,77B 'key':55B 'kryo':42B 'make':71B 'packag':23B 'parti':47B 'redi':24B,69B 'registr':44B 'restor':81B 'return':40B 'run':73B 'serial':33B 'share':68B 'state':26B,32B,38B,58B,79B 'stateful-bolt':25B 'store':39B,59B 'storm':21B,29B 'tenant':65B 'topolog':53B 'whatev':35B 'worker':76B 'write':50B","search_c":"'3.1.0':212C 'abl':119C 'access':146C,182C,257C 'affect':234C 'agent':272C 'anyon':143C 'apach':286C 'asf':268C 'back':173C 'behaviour':225C 'bolt':90C 'byte':112C 'cannot':249C 'chang':226C 'checkpoint':91C,230C 'class':95C,219C 'claud':271C 'cluster':264C 'co':135C 'co-ten':134C 'code':158C,195C 'configur':92C 'construct':103C 'constructor':108C 'could':149C 'credenti':256C 'credit':266C 'data':192C 'data-plan':191C 'default':180C 'defaultstateseri':83C 'descript':82C 'deseri':110C 'disabl':97C 'equival':208C 'exampl':132C 'execut':157C,196C 'exist':228C 'fail':237C 'found':269C 'graph':155C 'immedi':251C 'insid':159C 'instanc':141C 'instanti':100C 'invok':106C 'jvm':162C,200C 'key':188C 'keyspac':126C 'kryo':93C 'may':236C,244C 'migrat':242C 'mitig':209C 'network':145C,254C 'note':220C 'object':104C,154C 'open':279C 'open-sourc':278C 'parti':118C 'persist':86C 'place':151C 'plane':193C 'privileg':194C 'project':281C 'provid':175C 'redi':140C,172C 'redis-back':171C 'regist':218C 'registr':96C 'report':284C 'requir':169C,217C,246C 'restor':88C,167C,239C 'restrict':253C 'return':116C 'secur':276C 'serial':153C,216C 'share':139C 'sourc':280C 'state':89C,114C,129C,165C,174C,186C,215C,229C,260C 'state-stor':185C 'step':243C 'store':115C,130C,187C,261C 'storm':287C 'strategi':101C 'studi':274C 'tenant':136C 'therefor':150C 'topolog':124C 'two':205C 'upgrad':210C,250C 'use':84C,270C 'user':247C 'valid':282C 'version':235C 'whatev':111C 'without':105C 'worker':161C,199C 'write':121C,181C 'written':231C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-09T10:17:11+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-82436","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-82436","severity":null,"published_at":"2026-11-09T10:17:11+00:00","modified_at":"2026-11-09T10:17:11+00:00","first_seen_at":"2026-11-09T10:25:49+00:00","fetched_at":"2026-11-09T10:25:49+00:00","note":null}],"documents":[],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}