{"id":"CVE-2026-129115","kind":"vulnerability","aliases":["CVE-2026-129115"],"related":[],"title":"JSON::XS for Perl: freed stack memory read during object encoding","description":"JSON::XS versions from 3.0 before 4.05 for Perl read freed stack memory when a FREEZE result's serialisation grows the Perl stack under allow_tags in encode_rv.\n\nWith allow_tags, an object's FREEZE method is called in list context and each returned value is encoded through a saved Perl stack pointer. When encoding a returned value calls back into Perl, through TO_JSON under convert_blessed or another FREEZE, and that callback grows the stack, the stack is reallocated while the saved pointer still refers to the freed block.\n\nEncoding such objects reads freed memory, and encode can return undef without an error.","summary":"JSON::XS versions from 3.0 before 4.05 read freed stack memory when encoding objects with FREEZE under allow_tags. An attacker who can get a crafted object encoded may read stray memory, and encode can silently return undef.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["json-xs","package","perl"],"not_affected_if":["allow-tags-unused","no-freeze-methods"],"how_to_check":"- Check the installed JSON::XS version with `perl -MJSON::XS -e 'print $JSON::XS::VERSION'`\n- Look for `allow_tags` in code that calls JSON::XS encode on blessed objects that define FREEZE","fix":"- JSON::XS: move to `4.05` or later","status":"open","published_at":"2026-11-14T12:17:44+00:00","first_seen_at":"2026-11-14T12:28:31+00:00","triaged_at":"2026-11-14T12:30:27+00:00","updated_at":"2026-11-14T12:30:27+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-14T12:30:27Z","model":"claude-haiku-5-5","output":{"fix":"- JSON::XS: move to `4.05` or later","reach":"unknown","title":"JSON::XS for Perl: freed stack memory read during object encoding","impact":"low","summary":"JSON::XS versions from 3.0 before 4.05 read freed stack memory when encoding objects with FREEZE under allow_tags. An attacker who can get a crafted object encoded may read stray memory, and encode can silently return undef.","audience":"developers","category":"package","nicknames":[],"who_cares":["perl","json-xs"],"confidence":0.6,"fix_status":"available","needs_auth":"unknown","worst_case":"reads freed memory during encoding, possibly leaking stray data","analyst_note":"","how_to_check":"- Check the installed JSON::XS version with `perl -MJSON::XS -e 'print $JSON::XS::VERSION'`\n- Look for `allow_tags` in code that calls JSON::XS encode on blessed objects that define FREEZE","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["allow-tags-unused","no-freeze-methods"],"who_is_affected":"Only code that uses JSON::XS with the allow_tags option and encodes blessed objects whose FREEZE method calls back into Perl. Applications that do not use allow_tags or FREEZE are unlikely to be exposed.","user_interaction":"unknown","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000719,"input_tokens":4662,"output_tokens":506,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-129115':14A,17A '-2026':13A,16A '3.0':27B,65C '4.05':29B,67C 'allow':40B,85C,91C 'anoth':131C 'attack':43B 'back':121C 'bless':129C 'block':152C 'call':99C,120C 'callback':135C 'context':102C 'convert':128C 'craft':48B 'cve':12A,15A 'encod':11A,35B,50B,56B,88C,108C,116C,153C,160C 'error':166C 'freed':5A,31B,71C,151C,157C 'freez':38B,76C,96C,132C 'get':46B 'grow':80C,136C 'json':1A,19B,23B,61C,126C 'json-x':18B 'list':101C 'may':51B 'memori':7A,33B,54B,73C,158C 'method':97C 'object':10A,36B,49B,94C,155C 'packag':21B 'perl':4A,22B,69C,82C,112C,123C 'pointer':114C,146C 'read':8A,30B,52B,70C,156C 'realloc':142C 'refer':148C 'result':77C 'return':59B,105C,118C,162C 'rv':89C 'save':111C,145C 'serialis':79C 'silent':58B 'stack':6A,32B,72C,83C,113C,138C,140C 'still':147C 'stray':53B 'tag':41B,86C,92C 'undef':60B,163C 'valu':106C,119C 'version':25B,63C 'without':164C 'xs':2A,20B,24B,62C","nicknames":[],"mitigations":[],"who_affected":"Only code that uses JSON::XS with the allow_tags option and encodes blessed objects whose FREEZE method calls back into Perl. Applications that do not use allow_tags or FREEZE are unlikely to be exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["jsonxs","package","perl","unknown"],"campaign_type":null,"search_a":"'-129115':14A,17A '-2026':13A,16A 'cve':12A,15A 'encod':11A 'freed':5A 'json':1A 'memori':7A 'object':10A 'perl':4A 'read':8A 'stack':6A 'xs':2A","search_b":"'3.0':27B '4.05':29B 'allow':40B 'attack':43B 'craft':48B 'encod':35B,50B,56B 'freed':31B 'freez':38B 'get':46B 'json':19B,23B 'json-x':18B 'may':51B 'memori':33B,54B 'object':36B,49B 'packag':21B 'perl':22B 'read':30B,52B 'return':59B 'silent':58B 'stack':32B 'stray':53B 'tag':41B 'undef':60B 'version':25B 'xs':20B,24B","search_c":"'3.0':65C '4.05':67C 'allow':85C,91C 'anoth':131C 'back':121C 'bless':129C 'block':152C 'call':99C,120C 'callback':135C 'context':102C 'convert':128C 'encod':88C,108C,116C,153C,160C 'error':166C 'freed':71C,151C,157C 'freez':76C,96C,132C 'grow':80C,136C 'json':61C,126C 'list':101C 'memori':73C,158C 'method':97C 'object':94C,155C 'perl':69C,82C,112C,123C 'pointer':114C,146C 'read':70C,156C 'realloc':142C 'refer':148C 'result':77C 'return':105C,118C,162C 'rv':89C 'save':111C,145C 'serialis':79C 'stack':72C,83C,113C,138C,140C 'still':147C 'tag':86C,92C 'undef':163C 'valu':106C,119C 'version':63C 'without':164C 'xs':62C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-14T12:17:44+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-129115","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-129115","severity":null,"published_at":"2026-11-14T12:17:44+00:00","modified_at":"2026-11-14T12:17:44+00:00","first_seen_at":"2026-11-14T12:28:31+00:00","fetched_at":"2026-11-14T12:28:31+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"}