Bump bundled libSRT to v1.5.6 (fixes CVE-2026-55869, CVE-2026-55868) - #90
Bump bundled libSRT to v1.5.6 (fixes CVE-2026-55869, CVE-2026-55868)#90birme wants to merge 1 commit into
Conversation
Upstream libSRT v1.5.6 fixes two critical (CVSS 9.1) vulnerabilities: - CVE-2026-55869: heap-based buffer overflow in KMREQ handling (GHSA-6xg9-784j-24rm) - CVE-2026-55868: encryption state machine downgrade (GHSA-4mc6-qmpp-g7gw) node-srt pinned SRT_CHECKOUT at v1.5.5, one version behind the fix, so every install built and linked a vulnerable libSRT. Verified locally on macOS (arm64): - npm run build-srt: clones and builds libSRT v1.5.6 successfully (deps/build/lib/libsrt.1.5.6.dylib, version.h confirms 1.5.6) - npm run rebuild: node-gyp rebuild links the addon against the new library with no errors - npm test: 22 jasmine specs, 0 failures - npm run check-tsc: no type errors Fixes #89 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
CI update: this fails on Linux CI — 8 of 10 Node-version matrix jobs (18.x/20.x/22.x/24.x, and 26.x intermittently) show the identical pattern: All jasmine specs pass, then the process itself segfaults during shutdown — after the test summary prints. This does not reproduce locally on macOS arm64, and does not occur on unmodified Not merging as-is. This looks like a real regression tied to the v1.5.6 upgrade (possibly interacting with — node-srt maintenance bot |
|
Root cause found — this is an upstream libSRT bug, unrelated to either CVE fix. Bisected the v1.5.5..v1.5.6 range by building each commit and running the suite in a clean Linux container (matching CI exactly). The segfault isolates to exactly one commit: Haivision/srt A gdb backtrace at the crash shows why: at process exit, the main thread is inside I confirmed the two target CVE commits (KMREQ fix, encryption-downgrade fix) touch only This isn't just a CI flake — it would plausibly crash real production processes on Linux too. Not merging this as-is. Two paths forward, either needs a maintainer call:
Leaving this PR open as a reference but marking not-mergeable pending that decision. — node-srt maintenance bot |
|
Follow-up: tested the obvious alternative theory — that node-srt itself is misusing the library by never explicitly closing sockets (all of Directly disproven by experiment: modified all four spec files to explicitly Conclusion unchanged, now on firmer evidence: hold this bump. Options remain (a) report upstream to Haivision/srt with this evidence and wait, or (b) cherry-pick just the CVE-fix commits onto v1.5.5, explicitly excluding — node-srt maintenance bot |
|
Thank you for opening this PR so quickly after the CVE advisory, and for the thorough local verification and the detailed gdb root-cause analysis in Issue #89 — that work is genuinely appreciated and will be essential for whoever takes the next step. The node-srt maintenance bot cannot recommend merging in the current state. CI is failing on Linux (Node 18.x through 22.x) with a SIGSEGV at process exit (exit code 139): the jasmine suite passes 22/22, but Node crashes immediately afterward inside libSRT's global destructor. The CI logs confirm this directly — all 22 specs succeed, then the process exits with The build pipeline itself is clean: Node 26.x did not exhibit the crash in the one successful CI run, but given that this is a timing-sensitive shutdown race, that one data point is not a safe signal for a production merge. The merge policy requires all required CI checks to be green, so this PR is blocked until the regression is resolved. Three paths forward:
This is a Tier B (native-build/libSRT-pin) decision — flagged — node-srt maintenance bot |
Fixes #89.
What
Bumps the bundled libSRT version from
v1.5.5tov1.5.6inscripts/build-srt-sdk.js— a one-line change toSRT_CHECKOUT.Why
Upstream Haivision/srt published two Critical (CVSS 9.1) security advisories on 2026-07-20, fixed in v1.5.6:
Every
@eyevinn/srtinstall currently builds and links the vulnerable v1.5.5.Verification (macOS arm64, Node v22.13.1)
npm run build-srt— clones and builds libSRT v1.5.6 cleanly (deps/build/lib/libsrt.1.5.6.dylib,version.hconfirms1.5.6); the existingconfigure-data.tcl.patch(macOS OpenSSL prefix) still applies without changes.npm run rebuild—node-gyp rebuildlinks the addon against the new library,gyp info ok, no errors (only pre-existing benign-mmacosx-version-minlinker warnings).npm test— 22/22 jasmine specs pass.npm run check-tsc— no type errors.npm run test-jest— 22/24 pass; the same 2 failures occur identically on unmodifiedmaster(v1.5.5) — a pre-existingTypeError: The "this" argument must be an instance of Performanceinintegration-tests/async_srt_client_server_test.js:13(const now = performance.nowloses itsthisbinding on modern Node; unrelated to this change, and not caught by CI since thenodejs.ymlworkflow only runsnpm test, notnpm run test-jest). Confirmed no new regressions by running both versions side by side.configure-data.tcl.patchorbinding.gyp.Scope note
Per the project's merge policy this is a native-build/libSRT-pin change (Tier B) — flagging for a human maintainer rather than requesting auto-merge, even with CI green.
Opened by the node-srt maintenance bot, implementing #89.