CC Hub 0.9.8 fixes a high-severity Node.js flaw in request decompression

2 hours ago

CC Hub 0.9.8 is a security release. It fixes CVE-2026-111497, a high-severity flaw in how Node.js decodes Brotli, and the maintainers recommend every user upgrade as soon as possible. It also makes the cache ratios in the logs follow real prices, and fixes the user quota page for installs with many users.

Ask about this presentation

Chapters

  1. 0:00CC Hub 0.9.8
  2. 0:25Why it reaches CC Hub
  3. 0:48Node pinned to 26.12.1
  4. 1:11Real cache ratios in logs
  5. 1:35User quota page fix
  6. 1:58Dependencies upgraded
  7. 2:26How to upgrade
  8. 2:52The fix lives in Node
Show transcript
  1. CC Hub 0.9.8 is a security release. It fixes CVE-2026-111497, a high-severity flaw in how Node.js decodes Brotli, and the maintainers recommend every user upgrade as soon as possible. It also makes the cache ratios in the logs follow real prices, and fixes the user quota page for installs with many users.

    Slide text
    CC Hub SECURITY RELEASE v0.9.7 → v0.9.8
    CVE-2026-111497 · high severity

    CC Hub 0.9.8 fixes a high-severity Node.js flaw in request decompression

    FIXEDCache ratios in logs follow real prices
    FIXEDUser quota page opens with many users
  2. Here is why this flaw reaches CC Hub. When a request arrives with a Brotli-compressed body, CC Hub unpacks it first and checks who sent it afterwards. So the Node.js decoder handles that body before authentication runs. The bug is an out-of-bounds write in that Brotli decoder. It is rated high severity, and it can allow remote code execution.

    Slide text
    CC Hub SECURITY v0.9.7 → v0.9.8

    CC Hub decompresses Brotli request bodies before it authenticates them

    Request
    content-encoding: br
    →
    Decompress
    node:zlib
    Brotli decoder
    →
    Authenticate
    checks the caller
    →
    Provider
    forwarded upstream
    CVE-2026-111497
    Out-of-bounds write in Node.js Brotli decoding. High severity; can allow remote code execution.
  3. So the release pins the runtime. The production image used to follow a floating Node tag. Now all three Dockerfiles pin Node 26.12.1, so every image carries the fix. The engines field in the package file now accepts only patched Node releases. Bun moves to 1.4.3, and CI reads its Node version from one file.

    Slide text
    CC Hub SECURITY v0.9.7 → v0.9.8

    All three Dockerfiles now pin the patched Node 26.12.1

    deploy/Dockerfile
    - FROM node:trixie-slim AS runner
    + FROM node:26.12.1-trixie-slim AS runner
    package.json · engines
    - "node": ">=22.19.0"
    + "node": "^22.23.4 || ^24.22.1 || >=26.12.1"
      Bun 1.3.10 → 1.4.3 · CI reads Node from .node-version
  4. Next, the logs. Cache lines used to carry fixed labels: 1.25 times and 2 times for cache writes, 0.1 times for cache reads. Those are Anthropic's ratios, and other providers price cache tokens differently. Now CC Hub works the ratio out from the cost it stored for each request. Here a cached token cost a quarter of an input token, and the label says so.

    Slide text
    CC Hub FIXED · #1507 v0.9.7 → v0.9.8

    Cache ratios in the logs now come from what each request cost

    BEFORE · FIXED LABELS
    Cache read (0.1x)
    Cache writes always said 1.25x and 2x, whatever the provider charged.
    AFTER · FROM STORED COST
    Cache read (0.25x)
    Label hidden when the ratio can't be worked out.
    $0.04128 ÷ 82,560 cache-read tokens vs $0.002488 ÷ 1,244 input tokens
    = 0.25x
  5. Large installs hit a different bug. The user quota page loaded usage for every user at once, all in parallel. With enough users, that went past what the database connection pool would admit, and the page failed to open. Now it works through six users at a time, and users with a cost reset date are totalled in one SQL statement instead of one query each.

    Slide text
    CC Hub FIXED · #1512 v0.9.7 → v0.9.8

    The user quota page opens again on installs with many users

    Before: every user at once
    One set of queries per user, all in parallel, past the database pool's admission limit.
    DB pool over limit
    After: 6 users at a time
    Reset-date totals run as one SQL statement per 1,000 users or keys.
    DB pool within limit
  6. Every front-end and back-end dependency moves to its latest version. That includes Next.js 16.4, React 19.3, undici and Hono, and new major versions of the Langfuse SDK and Vitest. If you send traces to Langfuse, metadata values such as user and key names are now trimmed by their length after JSON encoding, so a value with escaped characters no longer runs past Langfuse's 200-character limit and gets dropped.

    Slide text
    CC Hub CHANGED v0.9.7 → v0.9.8

    Front-end and back-end dependencies move to their latest versions

    Next.js
    16.3.3 → 16.4.2
    React
    19.2.8 → 19.3.1
    undici
    8.9.0 → 8.12.3
    Hono
    4.12.33 → 4.13.13
    Langfuse SDK
    5.10 → 6.0.1
    OpenTelemetry
    0.221 → 0.223
    Vitest
    4.1 → 5.0.5
    Biome
    2.5.6 → 2.6.2
    Langfuse traces: long metadata values are trimmed to fit the 200-character limit after JSON encoding.
  7. To upgrade with Docker, pull the v0.9.8 image, or with Docker Compose, pull and bring the stack back up. That image already runs Node 26.12.1. If you run CC Hub without Docker, upgrade Node to 22.23.4, 24.22.1, or 26.12.1 or newer, and Bun to 1.4.3 or newer.

    Slide text
    CC Hub UPGRADE v0.9.7 → v0.9.8

    Upgrade now: pull the v0.9.8 image, or patch Node yourself

    Docker
    $ docker pull \
        ghcr.io/ding113/claude-code-hub:v0.9.8
    Docker Compose
    $ docker compose pull &&
        docker compose up -d
    Without Docker
    Node 22.23.4+
    Node 24.22.1+
    Node 26.12.1+any one of the three lines, plusBun 1.4.3+
  8. One limit to keep in mind. CC Hub still decompresses Brotli bodies before authentication, and the fix is in Node itself. So running 0.9.8 on an older Node leaves the flaw open. Pull the image or patch Node, and CC Hub 0.9.8 closes the high-severity Node.js flaw in request decompression. The full release notes are on GitHub.

    Slide text
    CC Hub SECURITY v0.9.7 → v0.9.8

    The fix lives in Node, so your Node version is what protects you

    CC Hub 0.9.8 still decompresses Brotli bodies before authentication. On an unpatched Node, the flaw stays open.

      github.com/ding113/claude-code-hub/releases/tag/v0.9.8

What happened in AI today, in your inbox

One short email each evening. Read it and you’re caught up.

Built in New York with ❤️