v0.53.0

invoke-ai/InvokeAIv0.53.0Sep 27, 2026by github-actions[bot]

Upgrading?

AI Summary

This release focuses on critical security fixes for remote panics in the `siphon-rs` library and updates for `rustls` to close TLS 1.3 handshake vulnerabilities. It also introduces a new configuration option to prevent RTP starvation during idle server periods.

Key Highlights

  • Security fix: `siphon-rs` updated to fix remote panics caused by crafted headers in `extract_tag` and `validate_event_package`.
  • Security fix: `rustls` updated to 0.23.45 to fix TLS 1.3 handshake message acceptance across encryption boundaries.
  • New `[bridge].idle_keepalive` configuration option (`off`, `silence`, `comfort_noise`) to prevent peer RTP starvation.
  • Updated `forge-media` and `siphon-rs` dependencies to v2026.09.22.

New Features

  • `[bridge].idle_keepalive` configuration option to manage outbound RTP during silence.

Full Release Notes

### Added

- **`[bridge].idle_keepalive`** ([#610](https://github.com/thevoiceguy/siphon-ai/issues/610)).
  Optional outbound RTP during the silent-server window: with the default `"off"` a call
  whose WS server streams nothing emits no outbound RTP at all, and some media paths
  respond to a peer gone silent by stopping their own RTP toward us — FreeSWITCH measured
  at one packet per 5 s, RTCP-only, starving the caller's inbound audio. `"silence"` emits
  a digital-silence frame per idle 20 ms tick, `"comfort_noise"` a low-level
  comfort-noise frame (the same forge generator MOH falls back to). Engagement requires
  the idle verdict to hold continuously for 250 ms (any server frame restarting the
  clock) so ordinary mid-utterance server jitter doesn't insert a fill frame, and frames
  keep flowing through mute and barge-in arbitration, where caller→server audio must
  keep arriving. Per-route override via `[route.bridge].idle_keepalive`; unknown values
  (global or route) fail at load. New counter
  `siphon_ai_idle_keepalive_frames_total`.

### Security

- **siphon-rs v2026.09.05 → v2026.09.22** fixes two remote panics
  ([siphon-rs v2026.09.22](https://github.com/thevoiceguy/siphon-rs/releases/tag/v2026.09.22)):
  `extract_tag` and `validate_event_package` sliced a `From` tag / `Event` header at a fixed
  byte offset to test for a prefix, which panics when that offset falls inside a multi-byte
  character. Every in-dialog request is matched through `extract_tag`, so a single crafted
  header from any peer could stop the process. Both sites now return `None` where they
  panicked, with regression tests, and siphon-rs's fuzz crate — described as running, but
  never built — now builds and runs nightly with four new targets. **All deployments should
  update.**
- **rustls 0.23.40 → 0.23.45** ([RUSTSEC-2026-0285](https://rustsec.org/advisories/RUSTSEC-2026-0285)):
  TLS 1.3 handshake messages were accepted across encryption-level boundaries. rustls sits
  under every TLS surface here — SIP over TLS, the WS bridge, the admin listener and the
  webhook/CDR HTTP clients — so this closes the daily `cargo audit` failure that had been
  open on `main` since the advisory landed. Lockfile-only; the fixed rustls requires
  aws-lc-rs 1.18.1 / aws-lc-sys 0.45.0, which came along with it.

### Changed

- **forge-media v2026.09.10.1 → v2026.09.22, siphon-rs v2026.09.05 → v2026.09.22.** The
  siphon-rs roll carries the panic fixes above plus v2026.09.15 (sip-core 0.7.8 multipart
  bodies and RFC 6442 geolocation serialisation, sip-parse 0.4.0, sip-uac 0.7.2
  `invite_with_options`) — none of which siphon-ai calls. forge-media moves with it because
  v2026.09.22 embeds siphon-rs v2026.09.22 (its `sip-sdp` pin and submodule), and staying
  behind would link two copies of the SDP negotiator. Of the forge crates siphon-ai builds,
  only forge-rtp 0.7.0 (RFC 8285 extension walking), forge-sdp 0.2.2 (RFC 4796
  `a=content`) and forge-webrtc 0.7.0 (a second video content stream) changed, all
  additive; forge-engine, core, codecs, dtmf, vad, hep, ice, mixer and injection are
  unchanged, so the audio path is untouched. The rest of the range is video, GPU, MP4 and
  BFCP crates this project does not depend on. No wire behaviour changes.

### Documentation

- **Getting started on Debian 13** (`getting_started_with_siphon-ai.md`): a first-run
  guide from a fresh install to a bridged call.

---

**Artifacts**

- Static musl binaries for `x86_64` and `aarch64` (`.tar.gz`).
- Debian packages (`.deb`) for `amd64` and `arm64` — `apt install ./siphon-ai_*_amd64.deb`.
- `SHA256SUMS` — verify with `sha256sum -c SHA256SUMS`.
- `*-sbom.cdx.json` — CycloneDX SBOM.
- `SHA256SUMS.cosign.bundle` — cosign keyless signature over the checksums.
- Container: `ghcr.io/thevoiceguy/siphon-ai:v0.53.0` (multi-arch, cosign-signed).

Verify the checksums signature:
```
cosign verify-blob --bundle SHA256SUMS.cosign.bundle \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'release.yml@' SHA256SUMS
```

Related Repositories