GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — [Security Disclosure] MAP32 Integer Overflow in `skipValue()` — Cursor Desynchronization · Issue #1014 · msgpack/msgpack-java

[Security Disclosure] MAP32 Integer Overflow in skipValue() — Cursor Desynchronization #1014

New issue
Copy link
New issue
Copy link
Open
Open
[Security Disclosure] MAP32 Integer Overflow in skipValue() — Cursor Desynchronization#1014
Copy link

Description

@waydeshi
waydeshi
opened on Aug 7, 2026
Issue body actions
Field Value
Project msgpack-java
Repository https://github.com/msgpack/msgpack-java
Affected Version <= 0.9.12
Component msgpack-core
Class org.msgpack.core.MessageUnpacker
File msgpack-core/src/main/java/org/msgpack/core/MessageUnpacker.java
Vulnerable Line(s) 578–579
Severity Medium
CVSS 3.1 Score Base Score: 6.5 (MEDIUM) CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
CWE CWE-190, CWE-20

Impact

Parser state desynchronization from a silent skipValue() failure. After the overflow, the map body is not consumed. A subsequent read from the same stream consumes bytes intended to be skipped.

Affected applications use MessageUnpacker directly and call skipValue() to skip unknown fields before reading later fields (forward-compatible RPC frameworks, game servers, IoT gateways). The Jackson integration (MessagePackParser) does not call skipValue() and is unaffected.


Remediation

Use overflow-safe arithmetic:

case MAP32: {
    long mapSize = readNextLength32();
    long added = Math.multiplyExact(mapSize, 2L);
    if (added > Integer.MAX_VALUE - count) {
        throw new MessageSizeException("MAP32 size overflow", mapSize);
    }
    count = (int)(count + added);
    break;
}

Apply the same fix to the ARRAY32 branch (line 573). MAP16 and ARRAY16 use readNextLength16() (max 65,535) and cannot overflow.


References

  • msgpack-core/src/main/java/org/msgpack/core/MessageUnpacker.java, lines 578–579
  • CWE-190: https://cwe.mitre.org/data/definitions/190.html
  • CWE-20: https://cwe.mitre.org/data/definitions/20.html

Activity

  1. waydeshi commented on Sep 16, 2026

    @waydeshi
    waydeshi
    on Sep 16, 2026
    Author
    More actions

    https://www.cve.org/CVERecord?id=CVE-2026-90473 is published for this issue

  2. Marcono1234 commented on Oct 29, 2026

    @Marcono1234
    Marcono1234
    on Oct 29, 2026
    More actions

    @xerial, @komamitsu, are you aware of this issue and the CVE?

    (Same for separate issue #1015)


    And @waydeshi, did you try to responsibly disclose this to the maintainers and coordinate the CVE request with them before this public disclosure? It seems the maintainers have private vulnerability reporting enabled (not sure though how often they look at reports there).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402503 — GeezerVison does not store the pages you look up.
      Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.