{"id":"CVE-2026-93451","kind":"vulnerability","aliases":["CVE-2026-93451","GHSA-gwq9-9ffj-mvrv"],"related":[],"title":"snappy-java: Heap buffer overflow in Snappy.uncompress*Array typed-array methods","description":"### Impact\n`Snappy.uncompressCharArray`, `uncompressShortArray`, `uncompressIntArray`, `uncompressLongArray`, `uncompressFloatArray` and `uncompressDoubleArray` sized the result array by dividing the declared uncompressed byte length by the element size, but native code wrote the full byte length. If the declared length is not a multiple of the element size, up to 7 bytes are written past the end of the Java array, corrupting the heap.\n\n### Patches\nFixed in 1.1.10.9 ([#739](https://github.com/xerial/snappy-java/pull/739)). These methods now reject uncompressed lengths that are not a multiple of the element size with `SnappyIOException`.\n\n### Workarounds\nCheck that `Snappy.uncompressedLength(input)` is a multiple of the element size before calling these methods.","summary":"Six Snappy.uncompress typed-array methods (char, short, int, long, float, double) size the output array by integer division, so a declared length that is not a multiple of the element size lets native code write up to 7 bytes past the end of the Java array. An attacker who supplies compressed input can corrupt heap memory in the calling process.","severity":"high","cvss":7.5,"epss":0.00503,"exploited":false,"exploited_at":null,"products":[{"name":"org.xerial.snappy:snappy-java","fixed":["1.1.10.9"],"affected":"<= 1.1.10.8","ecosystem":"maven"}],"ecosystems":["maven"],"tags":["cwe-193","cwe-787","java","maven","package","snappy-java"],"not_affected_if":["byte-array-only-use","no-untrusted-input"],"how_to_check":"- Run `mvn dependency:tree` or inspect the build file for `org.xerial.snappy:snappy-java` and confirm the version is `1.1.10.8` or lower.\n- Find calls to `uncompressCharArray`, `uncompressShortArray`, `uncompressIntArray`, `uncompressLongArray`, `uncompressFloatArray` or `uncompressDoubleArray` in your code.","fix":"- Upgrade `org.xerial.snappy:snappy-java` to `1.1.10.9`.\n- Until upgraded, check `Snappy.uncompressedLength(input)` is a multiple of the element size before calling these methods.","status":"open","published_at":"2026-09-18T00:17:49+00:00","first_seen_at":"2026-10-27T15:34:04+00:00","triaged_at":"2026-10-27T15:35:38+00:00","updated_at":"2026-10-27T16:03:35+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-27T15:35:38Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `org.xerial.snappy:snappy-java` to `1.1.10.9`.\n- Until upgraded, check `Snappy.uncompressedLength(input)` is a multiple of the element size before calling these methods.","reach":"unknown","title":"snappy-java: crafted input overflows heap in typed-array decompression methods","impact":"high","summary":"Six Snappy.uncompress typed-array methods (char, short, int, long, float, double) size the output array by integer division, so a declared length that is not a multiple of the element size lets native code write up to 7 bytes past the end of the Java array. An attacker who supplies compressed input can corrupt heap memory in the calling process.","category":"package","nicknames":[],"who_cares":["java","maven","snappy-java"],"confidence":0.7,"needs_auth":"unknown","worst_case":"Attacker corrupts heap memory, possibly running code in the process","analyst_note":"","how_to_check":"- Run `mvn dependency:tree` or inspect the build file for `org.xerial.snappy:snappy-java` and confirm the version is `1.1.10.8` or lower.\n- Find calls to `uncompressCharArray`, `uncompressShortArray`, `uncompressIntArray`, `uncompressLongArray`, `uncompressFloatArray` or `uncompressDoubleArray` in your code.","needs_analyst":false,"not_affected_if":["byte-array-only-use","no-untrusted-input"],"who_is_affected":"Applications that call the typed-array uncompress methods of snappy-java on data that can be influenced from outside, such as network payloads, uploaded files or messages from a queue. Code that only uses byte-array Snappy.uncompress, or that only compresses, is not on this path. Teams with no snappy-java dependency can skip it.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000687,"input_tokens":3579,"output_tokens":658,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-193':30B '-2026':15A,23A '-787':32B '-93451':16A,24A '/xerial/snappy-java/pull/739)).':166C '1.1.10.9':162C '7':77B,145C '739':163C '9ffj':20A 'array':9A,12A,43B,54B,85B,111C,155C 'attack':87B 'buffer':5A 'byte':78B,117C,129C,146C 'call':98B,197C 'char':45B 'check':185C 'code':73B,125C 'compress':90B 'corrupt':93B,156C 'cve':14A,22A 'cwe':29B,31B 'declar':60B,115C,133C 'divid':113C 'divis':57B 'doubl':50B 'element':69B,121C,141C,180C,194C 'end':81B,151C 'fix':160C 'float':49B 'full':128C 'ghsa':18A 'ghsa-gwq9-9ffj-mvrv':17A 'github.com':165C 'github.com/xerial/snappy-java/pull/739)).':164C 'gwq9':19A 'heap':4A,94B,158C 'impact':100C 'input':91B,188C 'int':47B 'integ':56B 'java':3A,28A,33B,38B,84B,154C 'length':61B,118C,130C,134C,172C 'let':71B 'long':48B 'maven':34B 'memori':95B 'method':13A,44B,168C,199C 'multipl':66B,138C,177C,191C 'mvrv':21A 'nativ':72B,124C 'org.xerial.snappy':25A 'output':53B 'overflow':6A 'packag':35B 'past':79B,149C 'patch':159C 'process':99B 'reject':170C 'result':110C 'short':46B 'six':39B 'size':51B,70B,108C,122C,142C,181C,195C 'snappi':2A,37B 'snappy':27A 'snappy-java':1A,26A,36B 'snappy.uncompress':8A,40B 'snappy.uncompresschararray':101C 'snappy.uncompressedlength':187C 'snappyioexcept':183C 'suppli':89B 'type':11A,42B 'typed-array':10A,41B 'uncompress':116C,171C 'uncompressdoublearray':107C 'uncompressfloatarray':105C 'uncompressintarray':103C 'uncompresslongarray':104C 'uncompressshortarray':102C 'workaround':184C 'write':74B 'written':148C 'wrote':126C","nicknames":[],"mitigations":[],"who_affected":"Applications that call the typed-array uncompress methods of snappy-java on data that can be influenced from outside, such as network payloads, uploaded files or messages from a queue. Code that only uses byte-array Snappy.uncompress, or that only compresses, is not on this path. Teams with no snappy-java dependency can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-18T00:17:49+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":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-gwq9-9ffj-mvrv","url":"https://github.com/advisories/GHSA-gwq9-9ffj-mvrv","severity":"high","published_at":"2026-10-27T15:33:42+00:00","modified_at":"2026-10-27T15:33:43+00:00","first_seen_at":"2026-10-27T15:34:04+00:00","fetched_at":"2026-10-27T15:39:16+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-93451","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-93451","severity":null,"published_at":"2026-09-18T00:17:49+00:00","modified_at":"2026-10-08T16:18:00+00:00","first_seen_at":"2026-10-27T16:03:35+00:00","fetched_at":"2026-10-27T16:03:35+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}