❌

Lees weergave

v0.16.16

[0.16.16] - 2026-08-02

If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.

Added

  • JMAP Email Delivery Push Notifications (draft-ietf-jmap-emailpush-03)
  • MTA: Allow System Sieve scripts to access orcpt during the DATA stage.

Changed

  • S3: accessKey can now be read from an environment variable or file.

Fixed

  • Meilisearch: Verify index existence using GET instead of creating a new task which times out on busy servers.
  • Branding: Stalwart logo flashes before the per-tenant logo is loaded on the login page.
  • Calendar: iMIP and alarm notification messages embed the default logo using bare LF line endings, producing a single 4247 octet line that strict SMTP relays reject with line too long.
  • DMARC: Failure reports state Identity-Alignment: none when a mechanism authenticated successfully but against an identity that is not aligned with the From domain.
  • Redis: Task and queue locks are never released after a worker dies, because failed lock attempts refresh the lock expiry.
  • Recovery mode: Download WebUI if missing.
  • Logging: The systemd journal tracer omits the parent span's fields.
  • MTA:
    • BDAT chunks sent without a valid MAIL FROM are answered with 552 5.3.4 Message too big for system instead of 503 5.5.1.
    • A maxMessageSize of 0 rejects every message with 552 5.3.4 Message too big for system instead of disabling the size limit.
  • Windows: Listeners bound to the unspecified IPv6 address ([::]), including all defaults, refuse IPv4 connections such as 127.0.0.1, since IPV6_V6ONLY is enabled by default on Windows.

Check binary attestation here

  •  

Minecraft 26.3-snapshot-6 (snapshot) Released

26.3 Snapshot 6 (known as 26.3-snapshot-6 in the launcher) is the sixth snapshot for Java Edition 26.3, released on July 28, 2026, which tweaks the abandoned camps, makes technical changes, and fixes bugs. Full changelog: https://minecraft.wiki/Java_Edition_26.3-snapshot-6
  •  

Proxmox VE delivers high-availability infrastructure management for NVIDIA Mission Control AI factories

VIENNA, Austria – July 28, 2026 – Enterprise software provider Proxmox Server Solutions today announced a collaboration with NVIDIA to enhance the infrastructure layer of the modern AI-factory. By integrating the proven reliability of Proxmox Virtual Environment (Proxmox VE) with NVIDIA Mission Controlβ„’, enterprises can deploy a highly resilient, virtualized management plane designed to power the world’s most advanced AI workloads running on NVIDIA accelerated infrastructure, including the NVIDIA Blackwell and NVIDIA Vera Rubin platforms.Β 

As generative AI moves into large-scale production, the AI factory requires a seamless transition from raw hardware to orchestrated, consumable resources. NVIDIA Mission Control streamlines this entire lifecycle, from developer workload scheduling and orchestration to autonomous recovery. Proxmox VE serves as the critical virtualization layer beneath this ecosystem, providing the stable, highly available substrate for hosting the management services that drive NVIDIA Mission Control’s intelligence.

A key pillar of this collaboration is the optimization of Proxmox VE for NVIDIA’s frontier silicon. Proxmox VE is being engineered specifically to support the bring-up of NVIDIA Grace and NVIDIA Vera CPU architectures, ensuring seamless deployment of advanced hardware in the modern AI data center.

The synergy between Proxmox VE and NVIDIA Mission Control creates an β€œalways-on” environment for AI innovation. While NVIDIA Mission Control provides the advanced management intelligence for the AI-factory, Proxmox VE delivers the underlying, mission-critical resilience. Through native clustering and live-migration capabilities, Proxmox VE ensures that the software services governing the AI-factory remain operational and scalable, maximizing the total ROI of the entire NVIDIA-powered AI-factory.

"Proxmox VE delivers proven, mission-critical reliability for the most demanding workloads- whether in AI-factory pipelines, regulated industries, sovereign clouds, " said Tim Marx, COO of Proxmox. "By joining the NVIDIA Mission Control ecosystem, we are offering enterprises the structural reliability needed to run, protect, and scale their most valuable AI workloads, working alongside one of the industry’s most essential partner for the AI era."

###

About Proxmox Server Solutions
Proxmox Server Solutions provides powerful, intuitive open-source server software that guarantees vendor independence and minimizes total cost of ownership. Enterprises of all sizes rely on the company’s reliable vendor support, certified training services, and a global network of 3,000 integration partners to ensure business continuity. Established in 2005 and headquartered in Vienna, Austria, tens of thousands of corporate customers worldwide trust Proxmox solutions to secure their mission-critical IT environments.

Contact:Β Daniela HΓ€sler, Proxmox Server Solutions GmbH

  •  

v0.16.15

[0.16.15] - 2026-07-26

If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.

Added

Changed

Fixed

  • JMAP:
    • Email/copy should return alreadyExists when copying a message to a mailbox that already contains it.
    • Email/copy with onSuccessDestroyOriginal destroys the copy's creation id instead of the source Email id.
    • CalendarEvent/set does not generate a uid on create when the client omits it.
    • CalendarEvent/set does not refresh the updated property (iCalendar DTSTAMP) on create or update.
    • EmailSubmission/set rejects valid recipients whose domain is itself a public suffix (e.g. gov.in, co.uk).
    • Requests are rejected with notRequest when a method name contains a JSON-escaped solidus (e.g. Core\/echo).
  • MTA: Panic when MTA-STS is disabled and a remote MTA fetched /.well-known/mta-sts.txt.
  • Auth: Scoped credentials with SysApiKeyCreate or SysApiKeyUpdate permissions can regain its own account's full rights.
  • Web Push: Valid VAPID keys are rejected when PEM-encoded with explicit EC parameters, in SEC1 (EC PRIVATE KEY) format, or with a leading byte-order mark.
  • Encryption at rest: Appended messages are encrypted for accounts that did not opt in to encryptOnAppend.
  • Cache: Account caches silently discard entries larger than a single quick-cache shard, causing constant database rebuilds.
  • Registry: Id references (e.g. #certificate-...) fail to resolve on defaultCertificateId, defaultAdminRoleIds, listenerIds and publicKey.
  • Search: reindex drops calendar and contact index tasks for accounts with fewer than a full batch of items.
  • Migration: Abort --import when the target already contains data in the key range being imported.
  • Cluster: Broadcast subscriber re-subscribes after every message, losing bursts of cluster broadcasts during the reconnect window.
  • Enterprise: Per-tenant logo is not shown on the OAuth login password and OTP screens, which are served from the server's canonical host rather than the tenant domain.

Check binary attestation here

  •  

v1.19.3

Fixes and improvements

General

  • fix error message (#5922) 'all' is a synonym for 'all_others'
  • fix clearing lists with environment variables (#5410) (#5924) MTX_AUTHINTERNALUSERS_0_IPS, MTX_LOGDESTINATIONS and MTX_RTSPTRANSPORTS can now be used to clear their corresponding list by setting them to an empty value.
  • add runOnOnline / runOnOffline hooks (#5399) (#5956) These are triggered and a stream is online (i.e. not just provided by an offline segment).
  • rename runOnReady into runOnAvailable, runOnNotReady into runOnUnavailable (#5957)
  • fix wrong PTS and wrong playback of alwaysAvailableFile (#5436) (#5960) PTS offset of samples was not properly considered, and sleep between samples was PTS-based instead of being DTS-based.
  • avoid potential timing attack when validating SHA256 credentials (#5961) The == operator is vulnerable to timing attacks as it short-circuits on a mismatch. Use ConstantTimeCompare to avoid this vector. Co-authored-by: Tristan Matthews tmatth@videolan.org
  • normalize authentication error messages (#5421) (#5959) Log authentication errors as soon as possible, use the "warn" level, use the same message whatever the author or protocol.
  • adjust code to prevent security scan false positives (#5963) about string escaping.
  • ask for credentials only in case of protocols that support it (#5966) When clients connect with some protocols (SRT, RTMP), they are unable to provide credentials even if they are asked to. In this case, it's useless to wait for credentials, and it's better to immediately log authentication errors and apply the anti-brute force algorithm.
  • docs: add fail2ban integration (#5016) (#5967)
  • add comment to prevent security scan false positives (#5973)
  • pmp4: fix support for ctts version 0 (#5436) (bluenviron/mediacommon#343)

API

  • generate most of OpenAPI automatically (#5918) enums and structs are now generated automatically. This eliminates some inconsistencies and makes development easier.

Media-Over-QUIC

  • fix race condition during startup (#5965) allocate the HTTP server only after the MoQ server has been initialized.
  • fix several panics and OOM errors (#5964) Check for limits before allocating memory by using sizes passed from the remote peer. Also add fuzzing to all MoQ primitives.
  • support draft-19 of the specification (#5968) * support draft-19 of the specification * support subscribing the same track multiple times.
  • prevent excessive CPU consumption in reorderer (#5976) do not iterate by maxGroupID (passed by user) but iterate by internal pending packets (uncontrolled by user).

WebRTC

  • prevent cross-origin unauthorized access (#5975) when a user had previously inserted credentials into a MediaMTX instance through a browser, and AllowOrigins was set to a wildcard, third-party websites visited by the user were allowed to read streams without restrictions. This is now prevented by returning "*" in Access-Control-Allow-Origins when AllowOrigins is a wildcard, a behavior that prevents browsers from sharing credentials with third-party websites.

RTSP

HLS

  • prevent cross-origin unauthorized access (#5975) when a user had previously inserted credentials into a MediaMTX instance through a browser, and AllowOrigins was set to a wildcard, third-party websites visited by the user were allowed to read streams without restrictions. This is now prevented by returning "*" in Access-Control-Allow-Origins when AllowOrigins is a wildcard, a behavior that prevents browsers from sharing credentials with third-party websites.

SRT

  • fix compatibility with StreamToStudio app (#5414) (#5928)

Dependencies

  • code.cloudfoundry.org/bytefmt updated from v0.78.0 to v0.82.0
  • github.com/alecthomas/kong updated from v1.15.0 to v1.16.0
  • github.com/bluenviron/gohlslib/v2 updated from v2.4.0 to v2.4.1
  • github.com/bluenviron/gortmplib updated from v0.4.0 to v0.4.1
  • github.com/bluenviron/gortsplib/v5 updated from v5.6.1 to v5.6.2
  • github.com/bluenviron/mediacommon/v2 updated from v2.9.1 to v2.9.2
  • github.com/matthewhartstonge/argon2 updated from v1.5.5 to v1.5.6
  • github.com/pion/ice/v4 updated from v4.2.8-0.20260604162030-72f5001c4596 to v4.3.0
  • github.com/pion/interceptor updated from v0.1.45 to v0.1.46
  • github.com/pion/rtcp updated from v1.2.16 to v1.2.17
  • github.com/pion/rtp updated from v1.10.2 to v1.10.5
  • github.com/pion/webrtc/v4 updated from v4.2.15 to v4.2.17
  • github.com/pires/go-proxyproto updated from v0.12.0 to v0.15.0
  • github.com/quic-go/webtransport-go updated from v0.11.0 to v0.11.1
  • golang.org/x/crypto updated from v0.53.0 to v0.54.0
  • golang.org/x/net updated from v0.56.0 to v0.57.0
  • golang.org/x/sync updated from v0.21.0 to v0.22.0
  • golang.org/x/sys updated from v0.46.0 to v0.47.0
  • golang.org/x/term updated from v0.44.0 to v0.45.0
  • github.com/pion/datachannel updated from v1.6.0 to v1.6.2
  • github.com/pion/dtls/v3 updated from v3.1.4 to v3.1.5
  • github.com/pion/sctp updated from v1.10.0 to v1.11.0
  • github.com/pion/stun/v3 updated from v3.1.5 to v3.1.6
  • github.com/pion/turn/v5 updated from v5.0.9 to v5.0.12
  • golang.org/x/text updated from v0.38.0 to v0.40.0

Security

Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.

Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:

ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtx

You can verify checksums of binaries by downloading checksums.sha256 and running:

cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check

  •  

v4.2.0

⚠️ Breaking Change

  1. Team members with the Member role now have read-only access. They can continue to view team resources and configuration, but can no longer create, update, delete, deploy, start, stop, or otherwise modify resources. Review your team roles before upgrading and promote users who still require write access.

  2. State-changing API endpoints now require POST. Legacy GET requests return 405 Method Not Allowed. Update API clients and deploy webhooks that use these endpoints:

  • /enable
  • /disable
  • /deploy
  • /servers/{uuid}/validate
  • /applications/{uuid}/start
  • /applications/{uuid}/restart
  • /applications/{uuid}/stop
  • /databases/{uuid}/start
  • /databases/{uuid}/restart
  • /databases/{uuid}/stop
  • /services/{uuid}/start
  • /services/{uuid}/restart
  • /services/{uuid}/stop
  • /services/{uuid}/applications/{app_uuid}/start
  • /services/{uuid}/applications/{app_uuid}/restart
  • /services/{uuid}/applications/{app_uuid}/stop

Features

  • Added scheduled persistent-volume and application-storage backups, including retention controls, manual execution, and API schedule deletion. (#10946, fixes #7701)
  • Added API endpoints for database, service, and container logs, including optional timestamps. (#6293)
  • Added API endpoints to move applications, databases, and services between authorized environments. (#8968)
  • Added a configurable Docker registry URL. (#9017)
  • Added API management for service applications and service databases, including lifecycle actions and logs. (#9249)
  • Added tag management and tag assignment during application, database, and service creation. (#9275)
  • Added Hetzner firewall, internal network, and backup options during server creation. (#9646, fixes #9619)
  • Added preview deployment settings to application API endpoints. (#10188)
  • Added REST API endpoints for listing, creating, inspecting, and deleting destinations. (#10405)
  • Added Vultr cloud server provisioning and power controls. (#10533)
  • Added an Inngest one-click service template. (#10612)
  • Added a per-team toggle for the MCP server. (#10771)
  • Added internal endpoint controls with protected DNS resolution for webhooks. (#10835)
  • Added DigitalOcean Droplet provisioning. (#10871)
  • Added scheduled ClickHouse backups and cloud administration commands.
  • Added dedicated server, cloud credential, cloud-init, and private-key management flows.
  • Added application settings to application API responses.

Fixes

  • Enforced authorization policies consistently across the API and Livewire, restricted sensitive operations to admins, and protected secrets from team members. (#8628)
  • Populated Docker Compose domains correctly for applications created through the API. (#9300, fixes #9211)
  • Hid sensitive API fields by default while allowing privileged tokens with sensitive-read access to retrieve them. (#9893)
  • Prevented force=false deployment requests from incorrectly forcing cache-busting rebuilds. (#9909)
  • Ensured closed pull-request previews were cleaned up even when status updates failed. (#10180, fixes #9495)
  • Preserved full public Git repository URLs for non-GitHub hosts. (#10274)
  • Allowed the source-commit build setting through the application API. (#10551, fixes #10280)
  • Limited Grafana-specific service fields to Grafana images. (#10562, fixes #10556)
  • Corrected GitHub Enterprise App installation paths. (#10576, fixes #10573)
  • Corrected GitHub API URL derivation while preserving custom API URLs. (#10610)
  • Corrected Convex origin variables and exposed its HTTP Actions port. (#10646, fixes #7232, #7989)
  • Validated invitation magic-link tokens while preserving database-session login flows. (#10651, fixes #10633)
  • Accepted underscores in HTTP(S) domain hostnames used by the API. (#10663, fixes #10597)
  • Interpolated Railpack build-time environment variables correctly. (#10768, fixes #10736)
  • Validated environment-variable keys before saving them. (#10773)
  • Preserved deployment-key command metadata without exposing private-key commands in logs. (#10795)
  • Hardened database backup imports and file handling. (#10796)
  • Aligned resource-creation permissions across the application. (#10799)
  • Improved team resource route handling. (#10829)
  • Improved storage mount-path handling. (#10831)
  • Improved S3 storage selection, validation, and error handling. (#10832)
  • Strengthened outbound URL validation. (#10833)
  • Corrected additional release regressions and compatibility issues. (#10834, fixes #9204)
  • Improved application URL validation and preserved case-sensitive paths. (#10836)
  • Avoided invalid service preview environment-variable lookups. (#10837, fixes #10830)
  • Isolated Railpack Buildx commands from Docker client environment settings. (#10840, fixes #10769)
  • Preserved file-volume state during service parsing. (#10843, fixes #10525)
  • Removed Ray debugging hooks from production runtime paths. (#10847, fixes #6407)
  • Preserved intentionally empty service environment-variable values. (#10850, fixes #10827)
  • Honored skip flags when synchronizing pull-request preview deployments. (#10873, fixes #10870)
  • Clarified and enforced build-server hosting restrictions. (#10961, fixes #10898)
  • Hardened Vultr provisioning cleanup, cloud-provider retries, Gmail identity normalization, and cloud server status handling.
  • Fixed application configuration-change detection after settings updates.
  • Fixed backup storage defaults and required valid S3 selections.

Improvements

  • Added responsive resource navigation, mobile lifecycle actions, and consistent status badges.
  • Improved private-key creation and prevented deletion of keys still used by servers.
  • Improved cloud server provisioning by retaining instances awaiting public IP assignment and separating provider checks from SSH checks.
  • Updated EspoCRM configuration for version 10 compatibility. (#10848)
  • Updated the Alexandrie service template to version 8.10.0. (#10864)
  • Updated the Gitea Runner template. (#10566)
  • Improved contributor documentation and issue templates. (#8577)
  • Updated Laravel, Vite, Symfony, Guzzle, phpseclib, WebAuthn, and NGINX dependencies. (#10665, #10680, #10683, #10710, #10711, #10738, #10739, #10901)

Breaking Changes

  • Required POST for state-changing API operations such as start, stop, restart, deploy, enable, disable, and server validation; equivalent GET requests now return 405 Method Not Allowed.

Related issue references:

  •  

Minecraft 26.3-snapshot-5 (snapshot) Released

26.3 Snapshot 5 (known as 26.3-snapshot-5 in the launcher) is the fifth snapshot for Java Edition 26.3, released on July 21, 2026, which fixes bugs. Full changelog: https://minecraft.wiki/Java_Edition_26.3-snapshot-5
  •  

v0.16.14

[0.16.14] - 2026-07-20

If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.

Added

  • Use of Voluntary Application Server Identification (VAPID) in JMAP Web Push (RFC 9749).

Changed

Fixed

  • IMAP:
    • Mailbox object-quota only enforced in JMAP.
    • Pipelined STORE and EXPUNGE can execute out of order.
  • JMAP:
    • Read-only sharee cannot set isSubscribed on a shared mailbox.
    • Web Push payloads with Content-Encoding: aes128gcm should not be base64-encoded but sent as raw bytes.
    • Stale push subscription can block verification of a new one.
    • PushSubscription/set rejects the unpadded base64url keys the W3C Push API produces.
    • Email/import does not send push notifications for imported messages.
    • CalendarEvent/set silently ignores ifInState.
  • CalDAV: calendar-query REPORT returns empty calendar-data for JMAP-created events.
  • MTA:
    • DMARC is skipped when MAIL FROM SPF is unavailable.
    • queue_name variable not available in rate limiter expressions.
  • Calendar:
    • No expanded occurrences are returned for a daily recurrences crossing DST.
    • Uppercase MAILTO calendar addresses become invalid SMTP recipients.
    • Scheduling invitations on a shared, non-owned calendar fail with MAIL FROM unauthorized.
  • HTTP: Disable allowedEndpoints expression in recovery mode.
  • Telemetry: Tasks are serialized to the wrong store when using separate stores for telemetry and data.

Check binary attestation here

  •  

Minecraft 26.3-snapshot-4 (snapshot) Released

26.3 Snapshot 4 (known as 26.3-snapshot-4 in the launcher) is the fourth snapshot for Java Edition 26.3, released on July 16, 2026, which makes various technical changes and gameplay tweaks. Full changelog: https://minecraft.wiki/Java_Edition_26.3-snapshot-4
  •  

PostgreSQL 19 Beta 2 Released!

The PostgreSQL Global Development Group announces that the second beta release of PostgreSQL 19 is now available for download. This release contains PostgreSQL 19 feature previews ahead of general availability, though some details of the release can change during the beta period.

You can find information about all of the PostgreSQL 19 features and changes in the release notes:

https://www.postgresql.org/docs/19/release-19.html

In the spirit of the open source PostgreSQL community, we strongly encourage you to test the new features of PostgreSQL 19 on your systems to help us eliminate bugs and other issues. While we do not advise you to run beta versions in production environments, we encourage you to find ways to run your typical application workloads against this beta release.

Your testing and feedback help the community ensure that PostgreSQL 19 upholds our standards of delivering a stable, reliable release of the world's most advanced open source relational database. Please read more about our beta testing process and how you can contribute:

https://www.postgresql.org/developer/beta/

Upgrading to PostgreSQL 19 Beta 2

To upgrade to PostgreSQL 19 Beta 2 from an earlier version of PostgreSQL, you will need to use a strategy similar to upgrading between major versions of PostgreSQL (e.g. pg_upgrade or pg_dump / pg_restore). For more information, please visit the documentation section on upgrading.

Changes Since Beta 1

Fixes and changes in PostgreSQL 19 Beta 2 include:

  • Fix a regression in vacuumdb --analyze-in-stages for partitioned tables.
  • Fix servicefile to show correct file after fallback to system file.
  • Fix tuple deformation optimization for virtual generated columns.
  • Allow pg_createsubscriber to accept duplicate publication names.
  • Fix REPACK worker not being cleaned up on a FATAL exit.
  • Several fixes for the new FOR PORTION OF temporal table syntax.
  • Fix race condition when logical decoding activation is concurrently interrupted.
  • Disallow negative values for max_retention_duration.
  • Fix md5_password_warnings for role and database settings.
  • Several fixes for the new SQL/PGQ property graph feature.
  • Fix autovacuum's multixact-age score calculation, which could become infinite.
  • Revert non-text output formats for pg_dumpall.
  • Fix locking for ALTER DOMAIN ... VALIDATE CONSTRAINT.
  • Fix how postgres_fdw handles imported foreign-table statistics.

Please see the release notes for a complete list of new and changed features:

https://www.postgresql.org/docs/19/release-19.html

Testing for Bugs & Compatibility

The stability of each PostgreSQL release greatly depends on you, the community, to test the upcoming version with your workloads and testing tools to find bugs and regressions before the general availability of PostgreSQL 19. As this is a Beta, minor changes to database behaviors, feature details, and APIs are still possible. Your feedback and testing will help determine the final tweaks on the new features, so please test in the near future. The quality of user testing helps determine when we can make a final release.

A list of open issues is publicly available in the PostgreSQL wiki. You can report bugs using this form on the PostgreSQL website:

https://www.postgresql.org/account/submitbug/

Beta Schedule

This is the second beta release of version 19. The PostgreSQL Project will release additional betas as required for testing, followed by one or more release candidates, until the final release around September/October 2026. For further information please see the Beta Testing page.

Links

  •  

nginx-1.30.4 stable and nginx-1.31.3 mainline versions have been released, with fixes for buffer overflow vulnerability when using map with regex (CVE-2026-42533), memory disclosure vulnerability when using ngx_http_slice_module (CVE-2026-60005), and use-after-free vulnerability when using ngx_http_ssi_module (CVE-2026-56434).

2026-07-15

nginx-1.30.4 stable and nginx-1.31.3 mainline versions have been released, with fixes for buffer overflow vulnerability when using map with regex (CVE-2026-42533), memory disclosure vulnerability when using ngx_http_slice_module (CVE-2026-60005), and use-after-free vulnerability when using ngx_http_ssi_module (CVE-2026-56434).

  •  

v0.16.13

[0.16.13] - 2026-07-12

If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.

Added

  • FreeBSD support.

Changed

Fixed

  • OAuth resource indicators: Accept imap, smtp, pop3 and sieve as valid resource indicators for OAuth access tokens.
  • PostgreSQL: Incomplete channel binding implementation.
  • JMAP:
    • VacationResponse: isEnabled reset to false whenever properties are changed.
    • Capabilities: Return RFC-3339-conformant UTCDate literals in capabilities: min 0001-01-01T00:00:00Z, max 9999-12-31T23:59:59Z.
  • Directory: Update local groups only when the external directory includes a group attribute.
  • DNS Management:
    • CAA management deletes too third-party CAA entries.
    • Multiple provider fixes (see dns-update crate changelog).
  • Reject invalid duration values (e.g. 1h30m).
  • Branding: Custom logos for domains do not work.
  • Sieve: add Received headers to auto-generated messages and detect loops.
  • MTA: Resume queue processing does not work.
  • Misconfigured in-memory store cannot be recovered in recovery mode.

Check binary attestation here

  •  

Minecraft 26.3-snapshot-3 (snapshot) Released

26.3 Snapshot 3 (known as 26.3-snapshot-3 in the launcher) is the third snapshot for Java Edition 26.3, released on July 7, 2026, which adds straw beds and cushions, and fixes bugs. Full changelog: https://minecraft.wiki/Java_Edition_26.3-snapshot-3
  •  

Postfix stable release 3.11.5 and legacy releases 3.10.12, 3.9.13, 3.8.19, 3.7.21, 3.6.19, 3.5.26

Postfix stable release 3.11.5 and legacy releases 3.10.12, 3.9.13, 3.8.19, 3.7.21, 3.6.19, 3.5.26

[An on-line version of this announcement will be available at https://www.postfix.org/announcements/postfix-3.11.5.html]

This release addresses medium-impact problems that need to be fixed as some enable remote DOS, or local memory corruption.

The fixes below, and more, are also released in the unstable version postfix-3.12-20260706.

In addition to updated releases for the supported Postfix versions 3.8-3.11, releases will also be available for the out-of-support Postfix versions 3.5-3.7. NOTE: these do not include the patches for out-of-support Postfix versions that have been issued for "large SMTP inputs (June 2026)", "TLSA parsing (June 2026)", and "SMTP smuggling fixes". Those patches still need to be applied.

These defects were found by Qualys assisted by Claude Mythos Preview; more than half date from 20 or more years ago. When I implemented Postfix, I knew that there were going to be mistakes. That is the reason why Postfix has its architecture and safety nets. The number of defects may seem large, but consdering that they were found in a code base of some 150 thousand lines, the error rate is still lower than what I designed for.

Denial of service:

  • Bug (defect introduced: Postfix 2.7, date: 20090617): out-of-memory condition with remote input in the postscreen dummy SMTP engine. This dummy engine is used after PREGREET or DNSBL checks fail, or when "after 220" protocol checks are enabled. Reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix 2.0, date: 20030619): file system DOS: with smtpd_proxy_filter enabled, the before-filter SMTP server did not enforce the message size limit for mailbox From_ lines at the beginning of a message. With smtpd_proxy_filter disabled, the file size limit was still enforced by the cleanup daemon. Reported by Qualys, assisted by Claude Mythos Preview.

Memory corruption:

  • Bug (defect introduced: Postfix 2.3, date: 20060611): double ldap_msgfree(resloop) call during error handling when special_result_attribute is configured. An attacker who controls the LDAP server or can play attacker-in-the-middle could corrupt heap memory. Reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix 3.4, date: 20190121): missing null termination in a postlogd process that was started with an EMPTY maillog_file setting, while receiving a message from a postlog command that was started with a NON-EMPTY maillog_file setting. Under these contradicting conditions, an unprivileged attacker could cause postlogd to write null bytes to stack memory as it tokenized text outside the receive buffer, and possibly gain 'postfix' privilege. Problem reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix 2.3, date: 20060711): one-byte heap over-write in the Milter client with soft_bounce=yes while processing a malformed SMFIR_REPLYCODE Milter response. An attacker who controls the Milter or who can play attacker-in-the-middle could corrupt heap memory. Reported by Qualys, assisted by Claude Mythos Preview.

Other crashes and panic()s:

  • Bug (defect introduced: Postfix 2.1, date: 20030619): SMTP server panic() in smtpd_proxy_filter when handling long mailbox From_ lines at the beginning of a message. Reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix 3.1, date: 20151129): a missing return statement in the SHOWQ_CLEANUP_AND_RETURN() macro. A local user could submit a crafted message that triggered a read-after-free and panic() in the unprivileged showq daemon (which scans the mail queue for the 'postqueue -p' and 'mailq' commands). This could happen only before a message had been picked up by the pickup(8) daemon. Problem reported by Qualys, assisted by Claude Mythos Preview.

  • Bug: (defect introduced: Postfix 3.10, date: 20240925): NULL pointer read in the TLSRPT client, caused by missing STR_OR_NULL() wrappers. Reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix < alpha, date: 1997): missing recursion guard while processing :include: files that directly include other :include: files in local(8) aliases or .forward files. This could result in exhausting stack space (segfault) or file handles (fatal error). This is not a global DOS; it affected at most two parallel delivery processes for the local recipient who created the condition. Reported by Qualys, assisted by Claude Mythos Preview.

Other read after free:

  • Bug (defect introduced: postfix-3.11.0-RC1, date: 20251222): heap memory over-read in the cleanup daemon as it handled a milter "shutdown" reply. The over-read memory was logged after masking unprintable content. Problem reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix 2.3, date: 20050526): limited (<= 11 byte) heap over-read in the cleanup daemon. This could be triggered by local user with a crafted queue file, but the over-read content was not disclosed and there was no other impact. Problem reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix < alpha, date: 19971221): a signal handler in the postdrop command could call unlink() with a pathname that was already wiped and free()d, but not yet reused. Reported by Qualys, assisted by Claude Mythos Preview.

Other code hygiene:

  • Bug (defect introduced: Postfix 3.11, date: 20260219): In the non-BerkeleyDB re-indexing server, vstream_fopen_as() ignored the uid and gid arguments and opened a database source file read-only as the 'postfix' user instead of the file owner. Reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix 2.2. date: 20040829): after a RAND_bytes() call failure, do not rely on stack-based pseudo-randomness for tlsmgr seed generation, and for timing jitter of tlsmgr seed refresh intervals. Reported by Qualys, assisted by Claude Mythos Preview.

  • Bug (defect introduced: Postfix 2.3, date: 20060711): In the Milter client, null-terminate the SMFIR_REPLYCODE response data to exclude stale data when processing the result as a C string. Reported by Qualys, assisted by Claude Mythos Preview.

Proactive changes:

  • Hardening: make sure that optimizers will not delete a memset() call in myfree() that wipes memory.

  • Allow zero-length memory allocation requests. Many people have experience with systems that allow this, therefore it should not trigger a panic in Postfix.

  • Safety: added a global recursion guard in the local delivery agent.

You can find the updated Postfix source code at the mirrors listed at https://www.postfix.org/.

  •  

v0.16.12

[0.16.12] - 2026-07-06

If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.

Added

Changed

Fixed

  • DANE: Treat DNSSEC bogus as a temporary failures to prevent downgrade attacks.
  • OIDC provider:
    • ECDSA private key support for SEC1 format.
    • Allow ports in redirect_uri for loopback addresses.
  • OIDC directory:
    • Removing a user from all groups does not sync the changes correctly.
    • Fetch name and group claims from userinfo endpoint when missing from the JWT token.
  • PostgreSQL: Include error chain in error messages.
  • Prometheus: event counters are exported with incorrect metric names.
  • Registry: Changing the type of an existing account from user to group panics.
  • Masked emails: Return UnknownRecipient only for disabled or expired masked emails.
  • IDN: sanitize_email rejects valid Punycode domains.
  • Auto-ban: IP block expiration ignores per-reason ban durations.
  • Meilisearch: Limit the text search scope using attributesToSearchOn.
  • CalDAV: calendar-query REPORT returns invalid HTTP 404 when no events match the query.
  • Snowflake past id generation fails when the provided duration is longer than 4 years.
  • Calendar scheduling: Wrong RSVP base URL is used.
  • Network listener: Accept loop spins all CPU cores with no back-off when the process hits EMFILE (too many open files).
  • Cluster: Broadcast MTA queue refresh events to all nodes.

Check binary attestation here

  •  

Minecraft 26.3-snapshot-2 (snapshot) Released

26.3 Snapshot 2 (known as 26.3-snapshot-2 in the launcher) is the second snapshot for Java Edition 26.3, released on June 30, 2026, which replaces the approach of the "Improved Transparency" option with a new algorithm and fixes bugs. Full changelog: https://minecraft.wiki/Java_Edition_26.3-snapshot-2
  •  

v1.19.2

Fixes and improvements

General

  • playback: fix panic when MP4 muxer flushes with no samples (#5867)
  • redact sensitive headers in HTTP debug logs (#5873)
  • fix(recordstore): decode timezone offset minutes correctly (#5884)
  • improve HTTP server performance (#5886) log incoming requests without cloning.
  • prevent truncation of 64-bit values on 32-bit platforms (#5902)

RTSP

WebRTC

  • skip unresolvable webrtcAdditionalHosts entries instead of aborting (#5845)

RPI Camera

  • support encoding primary stream with MJPEG (2/2) (#5892)
  • support encoding secondary stream with H264 (2/2) (#4485) (#5898)
  • add unified rpiCameraH264Profile, rpiCameraH264Level params (#5894) These replace rpiCameraHardwareH264Profile, rpiCameraHardwareH264Level, rpiCameraSoftwareH264Profile, rpiCameraSoftwareH264Level.
  • fix race condition that prevents decoding the stream (bluenviron/mediamtx-rpicamera#109) (#5861) When a player immediately connects to a newly-created stream, SPS/PPS might not be available, neither in the SDP and neither in-band. Prevent the issue by always sending SPS/PPS in-band.
  • improve performance by computing frame size once (bluenviron/mediamtx-rpicamera#111)
  • fix wrong timestamp being passed to openh264 (bluenviron/mediamtx-rpicamera#114)

Dependencies

  • code.cloudfoundry.org/bytefmt updated from v0.76.0 to v0.78.0
  • github.com/abema/go-mp4 updated from v1.6.0 to v1.7.1
  • github.com/bluenviron/gortsplib/v5 updated from v5.6.0 to v5.6.1
  • github.com/bluenviron/mediacommon/v2 updated from v2.9.0 to v2.9.1
  • github.com/matthewhartstonge/argon2 updated from v1.5.4 to v1.5.5
  • github.com/pion/sdp/v3 updated from v3.0.18 to v3.0.19
  • github.com/quic-go/webtransport-go updated from v0.10.0 to v0.11.0
  • github.com/pion/srtp/v3 updated from v3.0.11 to v3.0.12
  • github.com/bluenviron/mediamtx-rpicamera updated from v2.6.0 to v2.8.0

Security

Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.

Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:

ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtx

You can verify checksums of binaries by downloading checksums.sha256 and running:

cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check

  •  

Asterisk Release 23.4.1

The Asterisk Development Team would like to announce security release
Asterisk 23.4.1.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/23.4.1
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 23.4.1

Change Log for Release asterisk-23.4.1

Links:

Summary:

  • Commits: 19
  • Commit Authors: 6
  • Issues Resolved: 0
  • Security Advisories Resolved: 20

User Notes:

Upgrade Notes:

Developer Notes:

  • ARI: Make ARI applications respect live_dangerously.

    ARI applications can no longer call "dangerous" dialplan
    functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
    enabling "live_dangerously" in asterisk.conf.
    Resolves: #GHSA-vrfp-mg3q-3959

Commit Authors:

  • George Joseph: (6)
  • Mike Bradeen: (3)
  • Milan Kyselica: (7)
  • Pengpeng Hou: (1)
  • Roberto Paleari: (1)
  • ThatTotallyRealMyth: (1)

Issue and Commit Detail:

Closed Issues:

Commits By Author:

  • George Joseph (6):

    • chan_unistim.c: Prevent overrun of phone_number field.
    • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
    • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
    • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
    • ARI: Make ARI applications respect live_dangerously.
    • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • Mike Bradeen (3):

    • ooh323c: not checking for IE minimum length
    • manager: Use remote address in user error logging
    • ooh323: Prevent potential buffer overflow in trace logging
  • Milan Kyselica (7):

    • res_xmpp: Fix stack buffer overflow in namespace prefix handling
    • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
    • res_config_ldap: Escape LDAP filter values per RFC 4515
    • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
    • http: Escape error page text to prevent reflected XSS
    • codec_codec2: Only process complete Codec2 frames in decoder
    • format_ogg_speex: Add bounds check to prevent heap buffer overflow
  • Pengpeng Hou (1):

    • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • Roberto Paleari (1):

    • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • ThatTotallyRealMyth (1):

    • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Commit List:

  • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.
  • chan_unistim.c: Prevent overrun of phone_number field.
  • ooh323c: not checking for IE minimum length
  • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
  • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
  • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
  • ARI: Make ARI applications respect live_dangerously.
  • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • manager: Use remote address in user error logging
  • ooh323: Prevent potential buffer overflow in trace logging
  • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • res_xmpp: Fix stack buffer overflow in namespace prefix handling
  • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
  • res_config_ldap: Escape LDAP filter values per RFC 4515
  • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
  • http: Escape error page text to prevent reflected XSS
  • codec_codec2: Only process complete Codec2 frames in decoder
  • format_ogg_speex: Add bounds check to prevent heap buffer overflow

Commit Details:

ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Author: ThatTotallyRealMyth
Date: 2026-03-19

The ast_tsconvert.py script called by ast_loggrabber is now installed in a
temporary directory that isn't world readable or writable.

Resolves: #GHSA-xgj6-2gc5-5x9c

chan_unistim.c: Prevent overrun of phone_number field.

Author: George Joseph
Date: 2026-06-15

Add a check to key_dial_page() to ensure that dialed digits won't overrun
the phone_number field.

Resolves: #GHSA-3g56-cgrh-95p5

ooh323c: not checking for IE minimum length

Author: Mike Bradeen
Date: 2022-06-06

When decoding q.931 encoded calling/called number
now checking for length being less than minimum required.

Resolves: #GHSA-h5hv-jmgj-92q2

res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.

Author: George Joseph
Date: 2026-06-12

The REST over WebSocket path now properly prevents non-GET methods from
being executed on inbound WebSockets.

  • The query parameters from the original incoming GET request that caused the
    upgrade to WebSocket are now passed to all REST requests that come from the
    client. This ensures that if the client authenticated with a read-only
    userid using the "api_key" query_string parameter, REST requests coming
    in over the WebSocket will only be able to execute GETs on resources.
    The HTTP headers were already passed to the REST requests so if the
    client had authenticated via an "Authorization" it was properly handled.

  • New tests have been added to test_ari.c to check that read-only users
    are properly denied access to resources using non-GET methods. Several
    memory leaks were also squashed.

Resolves: #GHSA-wcvv-g26m-wx5c

pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.

Author: George Joseph
Date: 2026-06-10

The filter_on_tx_message() function was using pj_strassign() to save the pointer
of the pjproject transport local address to a local pj_str_t variable. That
variable was ultimately used to set the Contact header's uri->host and the SDP
connection attribute's address again using pj_strassign. pj_strassign() doesn't
copy the actual value of the pj_str_t however, it just copies the pointer so
if a connection-oriented transport is disconnected before the 200 OK with the
SDP is sent, those pointers will be invalid which can cause use-after-free
issues. To prevent this, filter_on_tx_message() now uses pj_strdup with the
tdata->pool as the backing store to save the local IP address to the local
variable. pj_strassign() can then be used safely later on since the tdata
will be available for the life of the transaction.

Resolves: #GHSA-g8q2-p36q-94f6

ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.

Author: George Joseph
Date: 2026-06-02

Several bounds checks have been edded to ooQ931Decode to prevent it from
running past the end of the data buffer when parsing information elements.

Resolves: #GHSA-746q-794h-cc7f

ARI: Make ARI applications respect live_dangerously.

Author: George Joseph
Date: 2026-05-21

DeveloperNote: ARI applications can no longer call "dangerous" dialplan
functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
enabling "live_dangerously" in asterisk.conf.

Resolves: #GHSA-vrfp-mg3q-3959

res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.

Author: George Joseph
Date: 2026-04-27

  • Add check to red_t140_to_red() to ensure that the new primary payload
    can't cause the rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->t140red_data buffer.

  • Add check to rtp_red_buffer() to ensure that a T.140 frame to be sent
    can't cause rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->buf_data buffer.

Resolves: #GHSA-vfhr-r9x9-c687
Resolves: #GHSA-j2mm-57pq-jh94

res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser

Author: Roberto Paleari
Date: 2026-04-29

Add constraint checks to prevent unauthenticated users from crashing Asterisk
instance by sending a crafted inbound SIP NOTIFY request with "Content-Type:
application/simple-message-summary".

Resolves: #GHSA-8jw3-ccr9-xrmf

manager: Use remote address in user error logging

Author: Mike Bradeen
Date: 2026-03-30

To avoid a potential null dereference use the remote address
in error logging when there is no user or the user acl fails.

Resolves: #GHSA-3rhj-hhw7-m6fw

ooh323: Prevent potential buffer overflow in trace logging

Author: Mike Bradeen
Date: 2026-03-31

Replace a call to vsprintf with a call to ast_vasprintf to
prevent a possible buffer overflow.

Resolves: #GHSA-x348-j6c9-77f3

app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers

Author: Pengpeng Hou
Date: 2026-04-01

The protocol 1 unpack helpers trusted externally controlled lengths and wrote
them directly into fixed-size buffers in sms_t. Clamp the address, header,
and body copies to the destination array sizes so malformed messages cannot
overwrite adjacent state.

Resolves: #GHSA-q9fr-m7g8-6ph5

res_xmpp: Fix stack buffer overflow in namespace prefix handling

Author: Milan Kyselica
Date: 2026-03-26

The snprintf size parameter in xmpp_action_hook() is computed from
the attacker-controlled namespace prefix length and is not bounded
by the 256-byte stack buffer size. When a remote XMPP peer sends a
stanza with a child element whose namespace prefix exceeds 249
characters, snprintf writes past the buffer boundary.

Use sizeof(attr) as the snprintf size limit and %.*s precision to
extract only the prefix portion of the element name, preserving
the original truncation behavior for valid inputs.

Resolves: #GHSA-mxgm-8c6f-5p8f

res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser

Author: Milan Kyselica
Date: 2026-03-24

The parse_simple_message_summary() function uses sscanf with an
unbounded %s format specifier to parse the Message-Account field
from incoming SIP NOTIFY bodies into a fixed-size 512-byte stack
buffer (PJSIP_MAX_URL_SIZE). A single unauthenticated SIP NOTIFY
with a Message-Account value exceeding 512 bytes overflows the
buffer, corrupting adjacent stack data and permanently disabling
the PJSIP transport layer without crashing the process.

Add a width specifier (%511s) to limit the sscanf write to
PJSIP_MAX_URL_SIZE - 1 bytes plus the NUL terminator, matching
the destination buffer size.

Resolves: #GHSA-589g-qgf8-m6mx

res_config_ldap: Escape LDAP filter values per RFC 4515

Author: Milan Kyselica
Date: 2026-03-23

The LDAP realtime driver constructs search filters by directly
concatenating user-supplied values without RFC 4515 escaping.
When LDAP is used as a realtime backend for endpoint
identification, characters with special meaning in LDAP filters
(*, (, ), ) can be injected via the SIP From header username.

Add ldap_filter_escape_value() that escapes RFC 4515 special
characters to their \HH hex representation, and apply it to
non-LIKE query values. The LIKE query path preserves the existing
wildcard conversion behavior with a note for maintainers.

Resolves: #GHSA-r6c2-hwc2-j4mp

cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection

Author: Milan Kyselica
Date: 2026-03-23

The eventtype column handler in cel_pgsql.c inserts
record.user_defined_name directly into the SQL query without
calling PQescapeStringConn(), while all other string fields in
the same function are properly escaped. Similarly, cel_tds.c
passes the raw user_defined_name into the SQL INSERT without
routing it through anti_injection(), while all other fields are
processed through that function.

For cel_pgsql.c, escape the eventtype value using
PQescapeStringConn(), matching the existing pattern used for all
other string fields at lines 308-331 of the same function.

For cel_tds.c, route the eventtype value through
anti_injection() consistent with how all other fields are handled
in the same function.

Resolves: #GHSA-ph27-3m5q-mj5m

http: Escape error page text to prevent reflected XSS

Author: Milan Kyselica
Date: 2026-04-08

The text parameter in ast_http_create_response() is inserted into
the HTML body without escaping, while the server name on the same
page is properly escaped via ast_xml_escape(). When res_phoneprov
passes the decoded request URI as the text of a 404 response, HTML
metacharacters in the URI are rendered by the browser.

Apply ast_xml_escape() to the text parameter before inserting it
into the HTML template, using the same function already used for
the server name.

Resolves: #GHSA-4pgv-j3mr-3rcp

codec_codec2: Only process complete Codec2 frames in decoder

Author: Milan Kyselica
Date: 2026-04-08

The codec2_samples() function uses floor division (160 * datalen/6)
to compute expected output samples, but the decode loop condition
(x < datalen) iterates with ceiling behavior when datalen is not a
multiple of CODEC2_FRAME_LEN. This mismatch causes the loop to
decode one extra frame beyond what the framework bounds check
budgeted for, leading to an out-of-bounds write on the output buffer.

Change the loop condition to only process complete frames, matching
the floor-division behavior of codec2_samples(). This also prevents
an out-of-bounds read on the input side when fewer than
CODEC2_FRAME_LEN bytes remain.

Resolves: #GHSA-qf8j-jp7h-c5hx

format_ogg_speex: Add bounds check to prevent heap buffer overflow

Author: Milan Kyselica
Date: 2026-03-23

The ogg_speex_read() function copies OGG packet data via memcpy()
without validating the packet size against the destination buffer
(BUF_SIZE = 200 bytes). A crafted .spx file with an oversized OGG
audio packet causes a heap buffer overflow that corrupts the
adjacent speex_desc structure containing libogg heap pointers,
leading to a crash (SIGSEGV) on playback.

Add a bounds check for both negative and oversized values before
the memcpy, consistent with how format_ogg_vorbis bounds its reads
via ov_read().

Resolves: #GHSA-8jhw-m2hg-vp3h

  •  

Asterisk Release 22.10.1

The Asterisk Development Team would like to announce security release
Asterisk 22.10.1.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/22.10.1
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 22.10.1

Change Log for Release asterisk-22.10.1

Links:

Summary:

  • Commits: 19
  • Commit Authors: 6
  • Issues Resolved: 0
  • Security Advisories Resolved: 20

User Notes:

Upgrade Notes:

Developer Notes:

  • ARI: Make ARI applications respect live_dangerously.

    ARI applications can no longer call "dangerous" dialplan
    functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
    enabling "live_dangerously" in asterisk.conf.
    Resolves: #GHSA-vrfp-mg3q-3959

Commit Authors:

  • George Joseph: (6)
  • Mike Bradeen: (3)
  • Milan Kyselica: (7)
  • Pengpeng Hou: (1)
  • Roberto Paleari: (1)
  • ThatTotallyRealMyth: (1)

Issue and Commit Detail:

Closed Issues:

Commits By Author:

  • George Joseph (6):

    • chan_unistim.c: Prevent overrun of phone_number field.
    • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
    • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
    • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
    • ARI: Make ARI applications respect live_dangerously.
    • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • Mike Bradeen (3):

    • ooh323c: not checking for IE minimum length
    • manager: Use remote address in user error logging
    • ooh323: Prevent potential buffer overflow in trace logging
  • Milan Kyselica (7):

    • res_xmpp: Fix stack buffer overflow in namespace prefix handling
    • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
    • res_config_ldap: Escape LDAP filter values per RFC 4515
    • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
    • http: Escape error page text to prevent reflected XSS
    • codec_codec2: Only process complete Codec2 frames in decoder
    • format_ogg_speex: Add bounds check to prevent heap buffer overflow
  • Pengpeng Hou (1):

    • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • Roberto Paleari (1):

    • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • ThatTotallyRealMyth (1):

    • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Commit List:

  • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.
  • chan_unistim.c: Prevent overrun of phone_number field.
  • ooh323c: not checking for IE minimum length
  • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
  • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
  • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
  • ARI: Make ARI applications respect live_dangerously.
  • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • manager: Use remote address in user error logging
  • ooh323: Prevent potential buffer overflow in trace logging
  • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • res_xmpp: Fix stack buffer overflow in namespace prefix handling
  • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
  • res_config_ldap: Escape LDAP filter values per RFC 4515
  • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
  • http: Escape error page text to prevent reflected XSS
  • codec_codec2: Only process complete Codec2 frames in decoder
  • format_ogg_speex: Add bounds check to prevent heap buffer overflow

Commit Details:

ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Author: ThatTotallyRealMyth
Date: 2026-03-19

The ast_tsconvert.py script called by ast_loggrabber is now installed in a
temporary directory that isn't world readable or writable.

Resolves: #GHSA-xgj6-2gc5-5x9c

chan_unistim.c: Prevent overrun of phone_number field.

Author: George Joseph
Date: 2026-06-15

Add a check to key_dial_page() to ensure that dialed digits won't overrun
the phone_number field.

Resolves: #GHSA-3g56-cgrh-95p5

ooh323c: not checking for IE minimum length

Author: Mike Bradeen
Date: 2022-06-06

When decoding q.931 encoded calling/called number
now checking for length being less than minimum required.

Resolves: #GHSA-h5hv-jmgj-92q2

res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.

Author: George Joseph
Date: 2026-06-12

The REST over WebSocket path now properly prevents non-GET methods from
being executed on inbound WebSockets.

  • The query parameters from the original incoming GET request that caused the
    upgrade to WebSocket are now passed to all REST requests that come from the
    client. This ensures that if the client authenticated with a read-only
    userid using the "api_key" query_string parameter, REST requests coming
    in over the WebSocket will only be able to execute GETs on resources.
    The HTTP headers were already passed to the REST requests so if the
    client had authenticated via an "Authorization" it was properly handled.

  • New tests have been added to test_ari.c to check that read-only users
    are properly denied access to resources using non-GET methods. Several
    memory leaks were also squashed.

Resolves: #GHSA-wcvv-g26m-wx5c

pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.

Author: George Joseph
Date: 2026-06-10

The filter_on_tx_message() function was using pj_strassign() to save the pointer
of the pjproject transport local address to a local pj_str_t variable. That
variable was ultimately used to set the Contact header's uri->host and the SDP
connection attribute's address again using pj_strassign. pj_strassign() doesn't
copy the actual value of the pj_str_t however, it just copies the pointer so
if a connection-oriented transport is disconnected before the 200 OK with the
SDP is sent, those pointers will be invalid which can cause use-after-free
issues. To prevent this, filter_on_tx_message() now uses pj_strdup with the
tdata->pool as the backing store to save the local IP address to the local
variable. pj_strassign() can then be used safely later on since the tdata
will be available for the life of the transaction.

Resolves: #GHSA-g8q2-p36q-94f6

ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.

Author: George Joseph
Date: 2026-06-02

Several bounds checks have been edded to ooQ931Decode to prevent it from
running past the end of the data buffer when parsing information elements.

Resolves: #GHSA-746q-794h-cc7f

ARI: Make ARI applications respect live_dangerously.

Author: George Joseph
Date: 2026-05-21

DeveloperNote: ARI applications can no longer call "dangerous" dialplan
functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
enabling "live_dangerously" in asterisk.conf.

Resolves: #GHSA-vrfp-mg3q-3959

res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.

Author: George Joseph
Date: 2026-04-27

  • Add check to red_t140_to_red() to ensure that the new primary payload
    can't cause the rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->t140red_data buffer.

  • Add check to rtp_red_buffer() to ensure that a T.140 frame to be sent
    can't cause rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->buf_data buffer.

Resolves: #GHSA-vfhr-r9x9-c687
Resolves: #GHSA-j2mm-57pq-jh94

res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser

Author: Roberto Paleari
Date: 2026-04-29

Add constraint checks to prevent unauthenticated users from crashing Asterisk
instance by sending a crafted inbound SIP NOTIFY request with "Content-Type:
application/simple-message-summary".

Resolves: #GHSA-8jw3-ccr9-xrmf

manager: Use remote address in user error logging

Author: Mike Bradeen
Date: 2026-03-30

To avoid a potential null dereference use the remote address
in error logging when there is no user or the user acl fails.

Resolves: #GHSA-3rhj-hhw7-m6fw

ooh323: Prevent potential buffer overflow in trace logging

Author: Mike Bradeen
Date: 2026-03-31

Replace a call to vsprintf with a call to ast_vasprintf to
prevent a possible buffer overflow.

Resolves: #GHSA-x348-j6c9-77f3

app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers

Author: Pengpeng Hou
Date: 2026-04-01

The protocol 1 unpack helpers trusted externally controlled lengths and wrote
them directly into fixed-size buffers in sms_t. Clamp the address, header,
and body copies to the destination array sizes so malformed messages cannot
overwrite adjacent state.

Resolves: #GHSA-q9fr-m7g8-6ph5

res_xmpp: Fix stack buffer overflow in namespace prefix handling

Author: Milan Kyselica
Date: 2026-03-26

The snprintf size parameter in xmpp_action_hook() is computed from
the attacker-controlled namespace prefix length and is not bounded
by the 256-byte stack buffer size. When a remote XMPP peer sends a
stanza with a child element whose namespace prefix exceeds 249
characters, snprintf writes past the buffer boundary.

Use sizeof(attr) as the snprintf size limit and %.*s precision to
extract only the prefix portion of the element name, preserving
the original truncation behavior for valid inputs.

Resolves: #GHSA-mxgm-8c6f-5p8f

res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser

Author: Milan Kyselica
Date: 2026-03-24

The parse_simple_message_summary() function uses sscanf with an
unbounded %s format specifier to parse the Message-Account field
from incoming SIP NOTIFY bodies into a fixed-size 512-byte stack
buffer (PJSIP_MAX_URL_SIZE). A single unauthenticated SIP NOTIFY
with a Message-Account value exceeding 512 bytes overflows the
buffer, corrupting adjacent stack data and permanently disabling
the PJSIP transport layer without crashing the process.

Add a width specifier (%511s) to limit the sscanf write to
PJSIP_MAX_URL_SIZE - 1 bytes plus the NUL terminator, matching
the destination buffer size.

Resolves: #GHSA-589g-qgf8-m6mx

res_config_ldap: Escape LDAP filter values per RFC 4515

Author: Milan Kyselica
Date: 2026-03-23

The LDAP realtime driver constructs search filters by directly
concatenating user-supplied values without RFC 4515 escaping.
When LDAP is used as a realtime backend for endpoint
identification, characters with special meaning in LDAP filters
(*, (, ), ) can be injected via the SIP From header username.

Add ldap_filter_escape_value() that escapes RFC 4515 special
characters to their \HH hex representation, and apply it to
non-LIKE query values. The LIKE query path preserves the existing
wildcard conversion behavior with a note for maintainers.

Resolves: #GHSA-r6c2-hwc2-j4mp

cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection

Author: Milan Kyselica
Date: 2026-03-23

The eventtype column handler in cel_pgsql.c inserts
record.user_defined_name directly into the SQL query without
calling PQescapeStringConn(), while all other string fields in
the same function are properly escaped. Similarly, cel_tds.c
passes the raw user_defined_name into the SQL INSERT without
routing it through anti_injection(), while all other fields are
processed through that function.

For cel_pgsql.c, escape the eventtype value using
PQescapeStringConn(), matching the existing pattern used for all
other string fields at lines 308-331 of the same function.

For cel_tds.c, route the eventtype value through
anti_injection() consistent with how all other fields are handled
in the same function.

Resolves: #GHSA-ph27-3m5q-mj5m

http: Escape error page text to prevent reflected XSS

Author: Milan Kyselica
Date: 2026-04-08

The text parameter in ast_http_create_response() is inserted into
the HTML body without escaping, while the server name on the same
page is properly escaped via ast_xml_escape(). When res_phoneprov
passes the decoded request URI as the text of a 404 response, HTML
metacharacters in the URI are rendered by the browser.

Apply ast_xml_escape() to the text parameter before inserting it
into the HTML template, using the same function already used for
the server name.

Resolves: #GHSA-4pgv-j3mr-3rcp

codec_codec2: Only process complete Codec2 frames in decoder

Author: Milan Kyselica
Date: 2026-04-08

The codec2_samples() function uses floor division (160 * datalen/6)
to compute expected output samples, but the decode loop condition
(x < datalen) iterates with ceiling behavior when datalen is not a
multiple of CODEC2_FRAME_LEN. This mismatch causes the loop to
decode one extra frame beyond what the framework bounds check
budgeted for, leading to an out-of-bounds write on the output buffer.

Change the loop condition to only process complete frames, matching
the floor-division behavior of codec2_samples(). This also prevents
an out-of-bounds read on the input side when fewer than
CODEC2_FRAME_LEN bytes remain.

Resolves: #GHSA-qf8j-jp7h-c5hx

format_ogg_speex: Add bounds check to prevent heap buffer overflow

Author: Milan Kyselica
Date: 2026-03-23

The ogg_speex_read() function copies OGG packet data via memcpy()
without validating the packet size against the destination buffer
(BUF_SIZE = 200 bytes). A crafted .spx file with an oversized OGG
audio packet causes a heap buffer overflow that corrupts the
adjacent speex_desc structure containing libogg heap pointers,
leading to a crash (SIGSEGV) on playback.

Add a bounds check for both negative and oversized values before
the memcpy, consistent with how format_ogg_vorbis bounds its reads
via ov_read().

Resolves: #GHSA-8jhw-m2hg-vp3h

  •  

Asterisk Release 21.12.3

The Asterisk Development Team would like to announce security release
Asterisk 21.12.3.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/21.12.3
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 21.12.3

Change Log for Release asterisk-21.12.3

Links:

Summary:

  • Commits: 21
  • Commit Authors: 7
  • Issues Resolved: 0
  • Security Advisories Resolved: 20

User Notes:

  • acl: Add ACL support to http and ari

    A new section, type=restriction has been added to http.conf
    to allow an uri prefix based acl to be configured. See
    http.conf.sample for examples and more information.
    The user section of ari.conf can now contain an acl configuration
    to restrict users access. See ari.conf.sample for examples and more
    information

Upgrade Notes:

Developer Notes:

  • ARI: Make ARI applications respect live_dangerously.

    ARI applications can no longer call "dangerous" dialplan
    functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
    enabling "live_dangerously" in asterisk.conf.
    Resolves: #GHSA-vrfp-mg3q-3959

Commit Authors:

  • George Joseph: (6)
  • Joshua C. Colp: (1)
  • Mike Bradeen: (4)
  • Milan Kyselica: (7)
  • Pengpeng Hou: (1)
  • Roberto Paleari: (1)
  • ThatTotallyRealMyth: (1)

Issue and Commit Detail:

Closed Issues:

Commits By Author:

  • George Joseph (6):

    • chan_unistim.c: Prevent overrun of phone_number field.
    • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
    • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
    • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
    • ARI: Make ARI applications respect live_dangerously.
    • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • Joshua C. Colp (1):

    • build: Fix GCC discarded-qualifiers const errors.
  • Mike Bradeen (4):

    • ooh323c: not checking for IE minimum length
    • manager: Use remote address in user error logging
    • ooh323: Prevent potential buffer overflow in trace logging
    • acl: Add ACL support to http and ari
  • Milan Kyselica (7):

    • res_xmpp: Fix stack buffer overflow in namespace prefix handling
    • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
    • res_config_ldap: Escape LDAP filter values per RFC 4515
    • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
    • http: Escape error page text to prevent reflected XSS
    • codec_codec2: Only process complete Codec2 frames in decoder
    • format_ogg_speex: Add bounds check to prevent heap buffer overflow
  • Pengpeng Hou (1):

    • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • Roberto Paleari (1):

    • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • ThatTotallyRealMyth (1):

    • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Commit List:

  • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.
  • chan_unistim.c: Prevent overrun of phone_number field.
  • ooh323c: not checking for IE minimum length
  • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
  • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
  • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
  • ARI: Make ARI applications respect live_dangerously.
  • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • manager: Use remote address in user error logging
  • ooh323: Prevent potential buffer overflow in trace logging
  • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • res_xmpp: Fix stack buffer overflow in namespace prefix handling
  • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
  • res_config_ldap: Escape LDAP filter values per RFC 4515
  • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
  • http: Escape error page text to prevent reflected XSS
  • codec_codec2: Only process complete Codec2 frames in decoder
  • format_ogg_speex: Add bounds check to prevent heap buffer overflow
  • acl: Add ACL support to http and ari
  • build: Fix GCC discarded-qualifiers const errors.

Commit Details:

ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Author: ThatTotallyRealMyth
Date: 2026-03-19

The ast_tsconvert.py script called by ast_loggrabber is now installed in a
temporary directory that isn't world readable or writable.

Resolves: #GHSA-xgj6-2gc5-5x9c

chan_unistim.c: Prevent overrun of phone_number field.

Author: George Joseph
Date: 2026-06-15

Add a check to key_dial_page() to ensure that dialed digits won't overrun
the phone_number field.

Resolves: #GHSA-3g56-cgrh-95p5

ooh323c: not checking for IE minimum length

Author: Mike Bradeen
Date: 2022-06-06

When decoding q.931 encoded calling/called number
now checking for length being less than minimum required.

Resolves: #GHSA-h5hv-jmgj-92q2

res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.

Author: George Joseph
Date: 2026-06-12

The REST over WebSocket path now properly prevents non-GET methods from
being executed on inbound WebSockets.

  • The query parameters from the original incoming GET request that caused the
    upgrade to WebSocket are now passed to all REST requests that come from the
    client. This ensures that if the client authenticated with a read-only
    userid using the "api_key" query_string parameter, REST requests coming
    in over the WebSocket will only be able to execute GETs on resources.
    The HTTP headers were already passed to the REST requests so if the
    client had authenticated via an "Authorization" it was properly handled.

  • New tests have been added to test_ari.c to check that read-only users
    are properly denied access to resources using non-GET methods. Several
    memory leaks were also squashed.

Resolves: #GHSA-wcvv-g26m-wx5c

pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.

Author: George Joseph
Date: 2026-06-10

The filter_on_tx_message() function was using pj_strassign() to save the pointer
of the pjproject transport local address to a local pj_str_t variable. That
variable was ultimately used to set the Contact header's uri->host and the SDP
connection attribute's address again using pj_strassign. pj_strassign() doesn't
copy the actual value of the pj_str_t however, it just copies the pointer so
if a connection-oriented transport is disconnected before the 200 OK with the
SDP is sent, those pointers will be invalid which can cause use-after-free
issues. To prevent this, filter_on_tx_message() now uses pj_strdup with the
tdata->pool as the backing store to save the local IP address to the local
variable. pj_strassign() can then be used safely later on since the tdata
will be available for the life of the transaction.

Resolves: #GHSA-g8q2-p36q-94f6

ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.

Author: George Joseph
Date: 2026-06-02

Several bounds checks have been edded to ooQ931Decode to prevent it from
running past the end of the data buffer when parsing information elements.

Resolves: #GHSA-746q-794h-cc7f

ARI: Make ARI applications respect live_dangerously.

Author: George Joseph
Date: 2026-05-21

DeveloperNote: ARI applications can no longer call "dangerous" dialplan
functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
enabling "live_dangerously" in asterisk.conf.

Resolves: #GHSA-vrfp-mg3q-3959

res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.

Author: George Joseph
Date: 2026-04-27

  • Add check to red_t140_to_red() to ensure that the new primary payload
    can't cause the rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->t140red_data buffer.

  • Add check to rtp_red_buffer() to ensure that a T.140 frame to be sent
    can't cause rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->buf_data buffer.

Resolves: #GHSA-vfhr-r9x9-c687
Resolves: #GHSA-j2mm-57pq-jh94

res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser

Author: Roberto Paleari
Date: 2026-04-29

Add constraint checks to prevent unauthenticated users from crashing Asterisk
instance by sending a crafted inbound SIP NOTIFY request with "Content-Type:
application/simple-message-summary".

Resolves: #GHSA-8jw3-ccr9-xrmf

manager: Use remote address in user error logging

Author: Mike Bradeen
Date: 2026-03-30

To avoid a potential null dereference use the remote address
in error logging when there is no user or the user acl fails.

Resolves: #GHSA-3rhj-hhw7-m6fw

ooh323: Prevent potential buffer overflow in trace logging

Author: Mike Bradeen
Date: 2026-03-31

Replace a call to vsprintf with a call to ast_vasprintf to
prevent a possible buffer overflow.

Resolves: #GHSA-x348-j6c9-77f3

app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers

Author: Pengpeng Hou
Date: 2026-04-01

The protocol 1 unpack helpers trusted externally controlled lengths and wrote
them directly into fixed-size buffers in sms_t. Clamp the address, header,
and body copies to the destination array sizes so malformed messages cannot
overwrite adjacent state.

Resolves: #GHSA-q9fr-m7g8-6ph5

res_xmpp: Fix stack buffer overflow in namespace prefix handling

Author: Milan Kyselica
Date: 2026-03-26

The snprintf size parameter in xmpp_action_hook() is computed from
the attacker-controlled namespace prefix length and is not bounded
by the 256-byte stack buffer size. When a remote XMPP peer sends a
stanza with a child element whose namespace prefix exceeds 249
characters, snprintf writes past the buffer boundary.

Use sizeof(attr) as the snprintf size limit and %.*s precision to
extract only the prefix portion of the element name, preserving
the original truncation behavior for valid inputs.

Resolves: #GHSA-mxgm-8c6f-5p8f

res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser

Author: Milan Kyselica
Date: 2026-03-24

The parse_simple_message_summary() function uses sscanf with an
unbounded %s format specifier to parse the Message-Account field
from incoming SIP NOTIFY bodies into a fixed-size 512-byte stack
buffer (PJSIP_MAX_URL_SIZE). A single unauthenticated SIP NOTIFY
with a Message-Account value exceeding 512 bytes overflows the
buffer, corrupting adjacent stack data and permanently disabling
the PJSIP transport layer without crashing the process.

Add a width specifier (%511s) to limit the sscanf write to
PJSIP_MAX_URL_SIZE - 1 bytes plus the NUL terminator, matching
the destination buffer size.

Resolves: #GHSA-589g-qgf8-m6mx

res_config_ldap: Escape LDAP filter values per RFC 4515

Author: Milan Kyselica
Date: 2026-03-23

The LDAP realtime driver constructs search filters by directly
concatenating user-supplied values without RFC 4515 escaping.
When LDAP is used as a realtime backend for endpoint
identification, characters with special meaning in LDAP filters
(*, (, ), ) can be injected via the SIP From header username.

Add ldap_filter_escape_value() that escapes RFC 4515 special
characters to their \HH hex representation, and apply it to
non-LIKE query values. The LIKE query path preserves the existing
wildcard conversion behavior with a note for maintainers.

Resolves: #GHSA-r6c2-hwc2-j4mp

cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection

Author: Milan Kyselica
Date: 2026-03-23

The eventtype column handler in cel_pgsql.c inserts
record.user_defined_name directly into the SQL query without
calling PQescapeStringConn(), while all other string fields in
the same function are properly escaped. Similarly, cel_tds.c
passes the raw user_defined_name into the SQL INSERT without
routing it through anti_injection(), while all other fields are
processed through that function.

For cel_pgsql.c, escape the eventtype value using
PQescapeStringConn(), matching the existing pattern used for all
other string fields at lines 308-331 of the same function.

For cel_tds.c, route the eventtype value through
anti_injection() consistent with how all other fields are handled
in the same function.

Resolves: #GHSA-ph27-3m5q-mj5m

http: Escape error page text to prevent reflected XSS

Author: Milan Kyselica
Date: 2026-04-08

The text parameter in ast_http_create_response() is inserted into
the HTML body without escaping, while the server name on the same
page is properly escaped via ast_xml_escape(). When res_phoneprov
passes the decoded request URI as the text of a 404 response, HTML
metacharacters in the URI are rendered by the browser.

Apply ast_xml_escape() to the text parameter before inserting it
into the HTML template, using the same function already used for
the server name.

Resolves: #GHSA-4pgv-j3mr-3rcp

codec_codec2: Only process complete Codec2 frames in decoder

Author: Milan Kyselica
Date: 2026-04-08

The codec2_samples() function uses floor division (160 * datalen/6)
to compute expected output samples, but the decode loop condition
(x < datalen) iterates with ceiling behavior when datalen is not a
multiple of CODEC2_FRAME_LEN. This mismatch causes the loop to
decode one extra frame beyond what the framework bounds check
budgeted for, leading to an out-of-bounds write on the output buffer.

Change the loop condition to only process complete frames, matching
the floor-division behavior of codec2_samples(). This also prevents
an out-of-bounds read on the input side when fewer than
CODEC2_FRAME_LEN bytes remain.

Resolves: #GHSA-qf8j-jp7h-c5hx

format_ogg_speex: Add bounds check to prevent heap buffer overflow

Author: Milan Kyselica
Date: 2026-03-23

The ogg_speex_read() function copies OGG packet data via memcpy()
without validating the packet size against the destination buffer
(BUF_SIZE = 200 bytes). A crafted .spx file with an oversized OGG
audio packet causes a heap buffer overflow that corrupts the
adjacent speex_desc structure containing libogg heap pointers,
leading to a crash (SIGSEGV) on playback.

Add a bounds check for both negative and oversized values before
the memcpy, consistent with how format_ogg_vorbis bounds its reads
via ov_read().

Resolves: #GHSA-8jhw-m2hg-vp3h

acl: Add ACL support to http and ari

Author: Mike Bradeen
Date: 2026-02-27

Add uri prefix based acl support to the built in http server.
This allows an acl to be added per uri prefix (ie '/metrics'
or '/ws') to restrict access.

Add user based acl support for ARI. This adds new acl options
to the user section of ari.conf to restrict access on a per
user basis.

resolves: #1799

UserNote: A new section, type=restriction has been added to http.conf
to allow an uri prefix based acl to be configured. See
http.conf.sample for examples and more information.
The user section of ari.conf can now contain an acl configuration
to restrict users access. See ari.conf.sample for examples and more
information

build: Fix GCC discarded-qualifiers const errors.

Author: Joshua C. Colp
Date: 2026-02-12

GCC 15.2.1 pays attention to the discarding of the const
qualifier when strchr, strrchr, memchr, or memrchr are now
used. This change fixes numerous errors with this throughout
the tree. The fixes can be broken down into the following:

  1. The return value should be considered const.
  2. The value passed to strchr or strrchr can be cast as it is
    expected and allowed to be modified.
  3. The pointer passed to strchr or strrchr is not meant to be
    modified and so the contents must be duplicated.
  4. It was declared const and never should have been.

  •  

Asterisk Release 20.20.1

The Asterisk Development Team would like to announce security release
Asterisk 20.20.1.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/20.20.1
and
https://downloads.asterisk.org/pub/telephony/asterisk

Repository: https://github.com/asterisk/asterisk
Tag: 20.20.1

Change Log for Release asterisk-20.20.1

Links:

Summary:

  • Commits: 18
  • Commit Authors: 6
  • Issues Resolved: 0
  • Security Advisories Resolved: 19
    • GHSA-3g56-cgrh-95p5: chan_unistim DIALPAGE digit handling can overflow phone_number and crash Asterisk
    • GHSA-3rhj-hhw7-m6fw: NULL Pointer Dereference in HTTP AMI Digest Authentication
    • GHSA-4pgv-j3mr-3rcp: Reflected XSS in Phone Provisioning HTTP Error Pages
    • GHSA-589g-qgf8-m6mx: Stack buffer overflow in MWI NOTIFY Message-Account parsing
    • GHSA-746q-794h-cc7f: Out-of-Bounds Read in Q.931 Information Element Parser (H.323 Addon)
    • GHSA-8jhw-m2hg-vp3h: Heap Buffer Overflow in OGG/Speex File Playback (format_ogg_speex)
    • GHSA-8jw3-ccr9-xrmf: Buffer over-read in Asterisk PJSIP MWI body parser
    • GHSA-g8q2-p36q-94f6: Heap-use-after-free in Asterisk PJSIP TCP/SDP handling when TCP connection closes during SDP processing
    • GHSA-j2mm-57pq-jh94: Possible RED T.140 Generation Accumulation OOB Write
    • GHSA-mxgm-8c6f-5p8f: Stack buffer overflow in res_xmpp XMPP namespace prefix handling
    • GHSA-ph27-3m5q-mj5m: SQL Injection in cel_pgsql and cel_tds via CELGenUserEvent eventtype Field
    • GHSA-q9fr-m7g8-6ph5: Asterisk app_sms.c copies externally controlled SMS lengths into fixed in-struct buffers
    • GHSA-qf8j-jp7h-c5hx: Out-of-Bounds Write in Codec2 Decoder Due to Floor/Ceil Sample Count Mismatch
    • GHSA-r6c2-hwc2-j4mp: LDAP Filter Injection in res_config_ldap via SIP Username (Unauthenticated Information Disclosure)
    • GHSA-vfhr-r9x9-c687: Possible RED T.140 Heap Buffer Overflow
    • GHSA-vrfp-mg3q-3959: ARI setChannelVar bypasses live_dangerously and permits FILE() writes
    • GHSA-wcvv-g26m-wx5c: ARI REST-over-WebSocket read-only bypass allows arbitrary module path load and conditional RCE
    • GHSA-x348-j6c9-77f3: Stack Buffer Overflow in H.323 ooTrace() via Unbounded vsprintf into Fixed 2048-byte Buffer
    • GHSA-xgj6-2gc5-5x9c: ast_loggrabber executes python script in world writable directory(/tmp) leading to potential privilege escalation And RCE

User Notes:

Upgrade Notes:

Developer Notes:

  • ARI: Make ARI applications respect live_dangerously.

    ARI applications can no longer call "dangerous" dialplan
    functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
    enabling "live_dangerously" in asterisk.conf.
    Resolves: #GHSA-vrfp-mg3q-3959

Commit Authors:

  • George Joseph: (6)
  • Mike Bradeen: (2)
  • Milan Kyselica: (7)
  • Pengpeng Hou: (1)
  • Roberto Paleari: (1)
  • ThatTotallyRealMyth: (1)

Issue and Commit Detail:

Closed Issues:

  • !GHSA-3g56-cgrh-95p5: chan_unistim DIALPAGE digit handling can overflow phone_number and crash Asterisk
  • !GHSA-3rhj-hhw7-m6fw: NULL Pointer Dereference in HTTP AMI Digest Authentication
  • !GHSA-4pgv-j3mr-3rcp: Reflected XSS in Phone Provisioning HTTP Error Pages
  • !GHSA-589g-qgf8-m6mx: Stack buffer overflow in MWI NOTIFY Message-Account parsing
  • !GHSA-746q-794h-cc7f: Out-of-Bounds Read in Q.931 Information Element Parser (H.323 Addon)
  • !GHSA-8jhw-m2hg-vp3h: Heap Buffer Overflow in OGG/Speex File Playback (format_ogg_speex)
  • !GHSA-8jw3-ccr9-xrmf: Buffer over-read in Asterisk PJSIP MWI body parser
  • !GHSA-g8q2-p36q-94f6: Heap-use-after-free in Asterisk PJSIP TCP/SDP handling when TCP connection closes during SDP processing
  • !GHSA-j2mm-57pq-jh94: Possible RED T.140 Generation Accumulation OOB Write
  • !GHSA-mxgm-8c6f-5p8f: Stack buffer overflow in res_xmpp XMPP namespace prefix handling
  • !GHSA-ph27-3m5q-mj5m: SQL Injection in cel_pgsql and cel_tds via CELGenUserEvent eventtype Field
  • !GHSA-q9fr-m7g8-6ph5: Asterisk app_sms.c copies externally controlled SMS lengths into fixed in-struct buffers
  • !GHSA-qf8j-jp7h-c5hx: Out-of-Bounds Write in Codec2 Decoder Due to Floor/Ceil Sample Count Mismatch
  • !GHSA-r6c2-hwc2-j4mp: LDAP Filter Injection in res_config_ldap via SIP Username (Unauthenticated Information Disclosure)
  • !GHSA-vfhr-r9x9-c687: Possible RED T.140 Heap Buffer Overflow
  • !GHSA-vrfp-mg3q-3959: ARI setChannelVar bypasses live_dangerously and permits FILE() writes
  • !GHSA-wcvv-g26m-wx5c: ARI REST-over-WebSocket read-only bypass allows arbitrary module path load and conditional RCE
  • !GHSA-x348-j6c9-77f3: Stack Buffer Overflow in H.323 ooTrace() via Unbounded vsprintf into Fixed 2048-byte Buffer
  • !GHSA-xgj6-2gc5-5x9c: ast_loggrabber executes python script in world writable directory(/tmp) leading to potential privilege escalation And RCE

Commits By Author:

  • George Joseph (6):

    • chan_unistim.c: Prevent overrun of phone_number field.
    • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
    • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
    • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
    • ARI: Make ARI applications respect live_dangerously.
    • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • Mike Bradeen (2):

    • manager: Use remote address in user error logging
    • ooh323: Prevent potential buffer overflow in trace logging
  • Milan Kyselica (7):

    • res_xmpp: Fix stack buffer overflow in namespace prefix handling
    • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
    • res_config_ldap: Escape LDAP filter values per RFC 4515
    • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
    • http: Escape error page text to prevent reflected XSS
    • codec_codec2: Only process complete Codec2 frames in decoder
    • format_ogg_speex: Add bounds check to prevent heap buffer overflow
  • Pengpeng Hou (1):

    • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • Roberto Paleari (1):

    • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • ThatTotallyRealMyth (1):

    • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Commit List:

  • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.
  • chan_unistim.c: Prevent overrun of phone_number field.
  • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
  • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
  • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
  • ARI: Make ARI applications respect live_dangerously.
  • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • manager: Use remote address in user error logging
  • ooh323: Prevent potential buffer overflow in trace logging
  • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • res_xmpp: Fix stack buffer overflow in namespace prefix handling
  • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
  • res_config_ldap: Escape LDAP filter values per RFC 4515
  • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
  • http: Escape error page text to prevent reflected XSS
  • codec_codec2: Only process complete Codec2 frames in decoder
  • format_ogg_speex: Add bounds check to prevent heap buffer overflow

Commit Details:

ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Author: ThatTotallyRealMyth
Date: 2026-03-19

The ast_tsconvert.py script called by ast_loggrabber is now installed in a
temporary directory that isn't world readable or writable.

Resolves: #GHSA-xgj6-2gc5-5x9c

chan_unistim.c: Prevent overrun of phone_number field.

Author: George Joseph
Date: 2026-06-15

Add a check to key_dial_page() to ensure that dialed digits won't overrun
the phone_number field.

Resolves: #GHSA-3g56-cgrh-95p5

res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.

Author: George Joseph
Date: 2026-06-12

The REST over WebSocket path now properly prevents non-GET methods from
being executed on inbound WebSockets.

  • The query parameters from the original incoming GET request that caused the
    upgrade to WebSocket are now passed to all REST requests that come from the
    client. This ensures that if the client authenticated with a read-only
    userid using the "api_key" query_string parameter, REST requests coming
    in over the WebSocket will only be able to execute GETs on resources.
    The HTTP headers were already passed to the REST requests so if the
    client had authenticated via an "Authorization" it was properly handled.

  • New tests have been added to test_ari.c to check that read-only users
    are properly denied access to resources using non-GET methods. Several
    memory leaks were also squashed.

Resolves: #GHSA-wcvv-g26m-wx5c

pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.

Author: George Joseph
Date: 2026-06-10

The filter_on_tx_message() function was using pj_strassign() to save the pointer
of the pjproject transport local address to a local pj_str_t variable. That
variable was ultimately used to set the Contact header's uri->host and the SDP
connection attribute's address again using pj_strassign. pj_strassign() doesn't
copy the actual value of the pj_str_t however, it just copies the pointer so
if a connection-oriented transport is disconnected before the 200 OK with the
SDP is sent, those pointers will be invalid which can cause use-after-free
issues. To prevent this, filter_on_tx_message() now uses pj_strdup with the
tdata->pool as the backing store to save the local IP address to the local
variable. pj_strassign() can then be used safely later on since the tdata
will be available for the life of the transaction.

Resolves: #GHSA-g8q2-p36q-94f6

ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.

Author: George Joseph
Date: 2026-06-02

Several bounds checks have been edded to ooQ931Decode to prevent it from
running past the end of the data buffer when parsing information elements.

Resolves: #GHSA-746q-794h-cc7f

ARI: Make ARI applications respect live_dangerously.

Author: George Joseph
Date: 2026-05-21

DeveloperNote: ARI applications can no longer call "dangerous" dialplan
functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
enabling "live_dangerously" in asterisk.conf.

Resolves: #GHSA-vrfp-mg3q-3959

res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.

Author: George Joseph
Date: 2026-04-27

  • Add check to red_t140_to_red() to ensure that the new primary payload
    can't cause the rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->t140red_data buffer.

  • Add check to rtp_red_buffer() to ensure that a T.140 frame to be sent
    can't cause rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->buf_data buffer.

Resolves: #GHSA-vfhr-r9x9-c687
Resolves: #GHSA-j2mm-57pq-jh94

res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser

Author: Roberto Paleari
Date: 2026-04-29

Add constraint checks to prevent unauthenticated users from crashing Asterisk
instance by sending a crafted inbound SIP NOTIFY request with "Content-Type:
application/simple-message-summary".

Resolves: #GHSA-8jw3-ccr9-xrmf

manager: Use remote address in user error logging

Author: Mike Bradeen
Date: 2026-03-30

To avoid a potential null dereference use the remote address
in error logging when there is no user or the user acl fails.

Resolves: #GHSA-3rhj-hhw7-m6fw

ooh323: Prevent potential buffer overflow in trace logging

Author: Mike Bradeen
Date: 2026-03-31

Replace a call to vsprintf with a call to ast_vasprintf to
prevent a possible buffer overflow.

Resolves: #GHSA-x348-j6c9-77f3

app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers

Author: Pengpeng Hou
Date: 2026-04-01

The protocol 1 unpack helpers trusted externally controlled lengths and wrote
them directly into fixed-size buffers in sms_t. Clamp the address, header,
and body copies to the destination array sizes so malformed messages cannot
overwrite adjacent state.

Resolves: #GHSA-q9fr-m7g8-6ph5

res_xmpp: Fix stack buffer overflow in namespace prefix handling

Author: Milan Kyselica
Date: 2026-03-26

The snprintf size parameter in xmpp_action_hook() is computed from
the attacker-controlled namespace prefix length and is not bounded
by the 256-byte stack buffer size. When a remote XMPP peer sends a
stanza with a child element whose namespace prefix exceeds 249
characters, snprintf writes past the buffer boundary.

Use sizeof(attr) as the snprintf size limit and %.*s precision to
extract only the prefix portion of the element name, preserving
the original truncation behavior for valid inputs.

Resolves: #GHSA-mxgm-8c6f-5p8f

res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser

Author: Milan Kyselica
Date: 2026-03-24

The parse_simple_message_summary() function uses sscanf with an
unbounded %s format specifier to parse the Message-Account field
from incoming SIP NOTIFY bodies into a fixed-size 512-byte stack
buffer (PJSIP_MAX_URL_SIZE). A single unauthenticated SIP NOTIFY
with a Message-Account value exceeding 512 bytes overflows the
buffer, corrupting adjacent stack data and permanently disabling
the PJSIP transport layer without crashing the process.

Add a width specifier (%511s) to limit the sscanf write to
PJSIP_MAX_URL_SIZE - 1 bytes plus the NUL terminator, matching
the destination buffer size.

Resolves: #GHSA-589g-qgf8-m6mx

res_config_ldap: Escape LDAP filter values per RFC 4515

Author: Milan Kyselica
Date: 2026-03-23

The LDAP realtime driver constructs search filters by directly
concatenating user-supplied values without RFC 4515 escaping.
When LDAP is used as a realtime backend for endpoint
identification, characters with special meaning in LDAP filters
(*, (, ), ) can be injected via the SIP From header username.

Add ldap_filter_escape_value() that escapes RFC 4515 special
characters to their \HH hex representation, and apply it to
non-LIKE query values. The LIKE query path preserves the existing
wildcard conversion behavior with a note for maintainers.

Resolves: #GHSA-r6c2-hwc2-j4mp

cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection

Author: Milan Kyselica
Date: 2026-03-23

The eventtype column handler in cel_pgsql.c inserts
record.user_defined_name directly into the SQL query without
calling PQescapeStringConn(), while all other string fields in
the same function are properly escaped. Similarly, cel_tds.c
passes the raw user_defined_name into the SQL INSERT without
routing it through anti_injection(), while all other fields are
processed through that function.

For cel_pgsql.c, escape the eventtype value using
PQescapeStringConn(), matching the existing pattern used for all
other string fields at lines 308-331 of the same function.

For cel_tds.c, route the eventtype value through
anti_injection() consistent with how all other fields are handled
in the same function.

Resolves: #GHSA-ph27-3m5q-mj5m

http: Escape error page text to prevent reflected XSS

Author: Milan Kyselica
Date: 2026-04-08

The text parameter in ast_http_create_response() is inserted into
the HTML body without escaping, while the server name on the same
page is properly escaped via ast_xml_escape(). When res_phoneprov
passes the decoded request URI as the text of a 404 response, HTML
metacharacters in the URI are rendered by the browser.

Apply ast_xml_escape() to the text parameter before inserting it
into the HTML template, using the same function already used for
the server name.

Resolves: #GHSA-4pgv-j3mr-3rcp

codec_codec2: Only process complete Codec2 frames in decoder

Author: Milan Kyselica
Date: 2026-04-08

The codec2_samples() function uses floor division (160 * datalen/6)
to compute expected output samples, but the decode loop condition
(x < datalen) iterates with ceiling behavior when datalen is not a
multiple of CODEC2_FRAME_LEN. This mismatch causes the loop to
decode one extra frame beyond what the framework bounds check
budgeted for, leading to an out-of-bounds write on the output buffer.

Change the loop condition to only process complete frames, matching
the floor-division behavior of codec2_samples(). This also prevents
an out-of-bounds read on the input side when fewer than
CODEC2_FRAME_LEN bytes remain.

Resolves: #GHSA-qf8j-jp7h-c5hx

format_ogg_speex: Add bounds check to prevent heap buffer overflow

Author: Milan Kyselica
Date: 2026-03-23

The ogg_speex_read() function copies OGG packet data via memcpy()
without validating the packet size against the destination buffer
(BUF_SIZE = 200 bytes). A crafted .spx file with an oversized OGG
audio packet causes a heap buffer overflow that corrupts the
adjacent speex_desc structure containing libogg heap pointers,
leading to a crash (SIGSEGV) on playback.

Add a bounds check for both negative and oversized values before
the memcpy, consistent with how format_ogg_vorbis bounds its reads
via ov_read().

Resolves: #GHSA-8jhw-m2hg-vp3h

  •  

Asterisk Release certified-22.8-cert3

The Asterisk Development Team would like to announce security release
Certified Asterisk 22.8-cert3.

The release artifacts are available for immediate download at
https://github.com/asterisk/asterisk/releases/tag/certified-22.8-cert3
and
https://downloads.asterisk.org/pub/telephony/certified-asterisk

Repository: https://github.com/asterisk/asterisk
Tag: certified-22.8-cert3

Change Log for Release asterisk-certified-22.8-cert3

Links:

Summary:

  • Commits: 21
  • Commit Authors: 7
  • Issues Resolved: 0
  • Security Advisories Resolved: 20

User Notes:

  • acl: Add ACL support to http and ari

    A new section, type=restriction has been added to http.conf
    to allow an uri prefix based acl to be configured. See
    http.conf.sample for examples and more information.
    The user section of ari.conf can now contain an acl configuration
    to restrict users access. See ari.conf.sample for examples and more
    information

Upgrade Notes:

Developer Notes:

  • ARI: Make ARI applications respect live_dangerously.

    ARI applications can no longer call "dangerous" dialplan
    functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
    enabling "live_dangerously" in asterisk.conf.
    Resolves: #GHSA-vrfp-mg3q-3959

Commit Authors:

  • George Joseph: (6)
  • Joshua C. Colp: (1)
  • Mike Bradeen: (4)
  • Milan Kyselica: (7)
  • Pengpeng Hou: (1)
  • Roberto Paleari: (1)
  • ThatTotallyRealMyth: (1)

Issue and Commit Detail:

Closed Issues:

Commits By Author:

  • George Joseph (6):

    • chan_unistim.c: Prevent overrun of phone_number field.
    • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
    • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
    • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
    • ARI: Make ARI applications respect live_dangerously.
    • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • Joshua C. Colp (1):

    • build: Fix GCC discarded-qualifiers const errors.
  • Mike Bradeen (4):

    • ooh323c: not checking for IE minimum length
    • manager: Use remote address in user error logging
    • ooh323: Prevent potential buffer overflow in trace logging
    • acl: Add ACL support to http and ari
  • Milan Kyselica (7):

    • res_xmpp: Fix stack buffer overflow in namespace prefix handling
    • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
    • res_config_ldap: Escape LDAP filter values per RFC 4515
    • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
    • http: Escape error page text to prevent reflected XSS
    • codec_codec2: Only process complete Codec2 frames in decoder
    • format_ogg_speex: Add bounds check to prevent heap buffer overflow
  • Pengpeng Hou (1):

    • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • Roberto Paleari (1):

    • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • ThatTotallyRealMyth (1):

    • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Commit List:

  • ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.
  • chan_unistim.c: Prevent overrun of phone_number field.
  • ooh323c: not checking for IE minimum length
  • res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.
  • pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.
  • ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.
  • ARI: Make ARI applications respect live_dangerously.
  • res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.
  • res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser
  • manager: Use remote address in user error logging
  • ooh323: Prevent potential buffer overflow in trace logging
  • app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers
  • res_xmpp: Fix stack buffer overflow in namespace prefix handling
  • res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser
  • res_config_ldap: Escape LDAP filter values per RFC 4515
  • cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection
  • http: Escape error page text to prevent reflected XSS
  • codec_codec2: Only process complete Codec2 frames in decoder
  • format_ogg_speex: Add bounds check to prevent heap buffer overflow
  • acl: Add ACL support to http and ari
  • build: Fix GCC discarded-qualifiers const errors.

Commit Details:

ast_loggrabber: Install the ast_tsconvert.py script to a secure temp directory.

Author: ThatTotallyRealMyth
Date: 2026-03-19

The ast_tsconvert.py script called by ast_loggrabber is now installed in a
temporary directory that isn't world readable or writable.

Resolves: #GHSA-xgj6-2gc5-5x9c

chan_unistim.c: Prevent overrun of phone_number field.

Author: George Joseph
Date: 2026-06-15

Add a check to key_dial_page() to ensure that dialed digits won't overrun
the phone_number field.

Resolves: #GHSA-3g56-cgrh-95p5

ooh323c: not checking for IE minimum length

Author: Mike Bradeen
Date: 2022-06-06

When decoding q.931 encoded calling/called number
now checking for length being less than minimum required.

Resolves: #GHSA-h5hv-jmgj-92q2

res_ari: Ensure read-only users are properly authorized via REST Over WebSocket.

Author: George Joseph
Date: 2026-06-12

The REST over WebSocket path now properly prevents non-GET methods from
being executed on inbound WebSockets.

  • The query parameters from the original incoming GET request that caused the
    upgrade to WebSocket are now passed to all REST requests that come from the
    client. This ensures that if the client authenticated with a read-only
    userid using the "api_key" query_string parameter, REST requests coming
    in over the WebSocket will only be able to execute GETs on resources.
    The HTTP headers were already passed to the REST requests so if the
    client had authenticated via an "Authorization" it was properly handled.

  • New tests have been added to test_ari.c to check that read-only users
    are properly denied access to resources using non-GET methods. Several
    memory leaks were also squashed.

Resolves: #GHSA-wcvv-g26m-wx5c

pjsip_message_filter: Use pj_strdup instead of pj_strassign to save local address.

Author: George Joseph
Date: 2026-06-10

The filter_on_tx_message() function was using pj_strassign() to save the pointer
of the pjproject transport local address to a local pj_str_t variable. That
variable was ultimately used to set the Contact header's uri->host and the SDP
connection attribute's address again using pj_strassign. pj_strassign() doesn't
copy the actual value of the pj_str_t however, it just copies the pointer so
if a connection-oriented transport is disconnected before the 200 OK with the
SDP is sent, those pointers will be invalid which can cause use-after-free
issues. To prevent this, filter_on_tx_message() now uses pj_strdup with the
tdata->pool as the backing store to save the local IP address to the local
variable. pj_strassign() can then be used safely later on since the tdata
will be available for the life of the transaction.

Resolves: #GHSA-g8q2-p36q-94f6

ooh323c/ooq931.c: Ensure ooQ931Decode doesn't run out-of-bounds.

Author: George Joseph
Date: 2026-06-02

Several bounds checks have been edded to ooQ931Decode to prevent it from
running past the end of the data buffer when parsing information elements.

Resolves: #GHSA-746q-794h-cc7f

ARI: Make ARI applications respect live_dangerously.

Author: George Joseph
Date: 2026-05-21

DeveloperNote: ARI applications can no longer call "dangerous" dialplan
functions like DB(), FILE(), SHELL(), CURL(), STAT(), etc. without
enabling "live_dangerously" in asterisk.conf.

Resolves: #GHSA-vrfp-mg3q-3959

res_rtp_asterisk.c: Address 2 potential T.140 RED buffer overruns.

Author: George Joseph
Date: 2026-04-27

  • Add check to red_t140_to_red() to ensure that the new primary payload
    can't cause the rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->t140red_data buffer.

  • Add check to rtp_red_buffer() to ensure that a T.140 frame to be sent
    can't cause rtp_red->len array items to wrap or cause an overrun of
    the rtp_red->buf_data buffer.

Resolves: #GHSA-vfhr-r9x9-c687
Resolves: #GHSA-j2mm-57pq-jh94

res/res_pjsip_pubsub.c: Fix buffer over-read in MWI body parser

Author: Roberto Paleari
Date: 2026-04-29

Add constraint checks to prevent unauthenticated users from crashing Asterisk
instance by sending a crafted inbound SIP NOTIFY request with "Content-Type:
application/simple-message-summary".

Resolves: #GHSA-8jw3-ccr9-xrmf

manager: Use remote address in user error logging

Author: Mike Bradeen
Date: 2026-03-30

To avoid a potential null dereference use the remote address
in error logging when there is no user or the user acl fails.

Resolves: #GHSA-3rhj-hhw7-m6fw

ooh323: Prevent potential buffer overflow in trace logging

Author: Mike Bradeen
Date: 2026-03-31

Replace a call to vsprintf with a call to ast_vasprintf to
prevent a possible buffer overflow.

Resolves: #GHSA-x348-j6c9-77f3

app_sms: Bound protocol 1 SMS unpacking to fixed-size buffers

Author: Pengpeng Hou
Date: 2026-04-01

The protocol 1 unpack helpers trusted externally controlled lengths and wrote
them directly into fixed-size buffers in sms_t. Clamp the address, header,
and body copies to the destination array sizes so malformed messages cannot
overwrite adjacent state.

Resolves: #GHSA-q9fr-m7g8-6ph5

res_xmpp: Fix stack buffer overflow in namespace prefix handling

Author: Milan Kyselica
Date: 2026-03-26

The snprintf size parameter in xmpp_action_hook() is computed from
the attacker-controlled namespace prefix length and is not bounded
by the 256-byte stack buffer size. When a remote XMPP peer sends a
stanza with a child element whose namespace prefix exceeds 249
characters, snprintf writes past the buffer boundary.

Use sizeof(attr) as the snprintf size limit and %.*s precision to
extract only the prefix portion of the element name, preserving
the original truncation behavior for valid inputs.

Resolves: #GHSA-mxgm-8c6f-5p8f

res_pjsip_pubsub: Add width limit to sscanf in MWI NOTIFY parser

Author: Milan Kyselica
Date: 2026-03-24

The parse_simple_message_summary() function uses sscanf with an
unbounded %s format specifier to parse the Message-Account field
from incoming SIP NOTIFY bodies into a fixed-size 512-byte stack
buffer (PJSIP_MAX_URL_SIZE). A single unauthenticated SIP NOTIFY
with a Message-Account value exceeding 512 bytes overflows the
buffer, corrupting adjacent stack data and permanently disabling
the PJSIP transport layer without crashing the process.

Add a width specifier (%511s) to limit the sscanf write to
PJSIP_MAX_URL_SIZE - 1 bytes plus the NUL terminator, matching
the destination buffer size.

Resolves: #GHSA-589g-qgf8-m6mx

res_config_ldap: Escape LDAP filter values per RFC 4515

Author: Milan Kyselica
Date: 2026-03-23

The LDAP realtime driver constructs search filters by directly
concatenating user-supplied values without RFC 4515 escaping.
When LDAP is used as a realtime backend for endpoint
identification, characters with special meaning in LDAP filters
(*, (, ), ) can be injected via the SIP From header username.

Add ldap_filter_escape_value() that escapes RFC 4515 special
characters to their \HH hex representation, and apply it to
non-LIKE query values. The LIKE query path preserves the existing
wildcard conversion behavior with a note for maintainers.

Resolves: #GHSA-r6c2-hwc2-j4mp

cel_pgsql, cel_tds: Escape eventtype field to prevent SQL injection

Author: Milan Kyselica
Date: 2026-03-23

The eventtype column handler in cel_pgsql.c inserts
record.user_defined_name directly into the SQL query without
calling PQescapeStringConn(), while all other string fields in
the same function are properly escaped. Similarly, cel_tds.c
passes the raw user_defined_name into the SQL INSERT without
routing it through anti_injection(), while all other fields are
processed through that function.

For cel_pgsql.c, escape the eventtype value using
PQescapeStringConn(), matching the existing pattern used for all
other string fields at lines 308-331 of the same function.

For cel_tds.c, route the eventtype value through
anti_injection() consistent with how all other fields are handled
in the same function.

Resolves: #GHSA-ph27-3m5q-mj5m

http: Escape error page text to prevent reflected XSS

Author: Milan Kyselica
Date: 2026-04-08

The text parameter in ast_http_create_response() is inserted into
the HTML body without escaping, while the server name on the same
page is properly escaped via ast_xml_escape(). When res_phoneprov
passes the decoded request URI as the text of a 404 response, HTML
metacharacters in the URI are rendered by the browser.

Apply ast_xml_escape() to the text parameter before inserting it
into the HTML template, using the same function already used for
the server name.

Resolves: #GHSA-4pgv-j3mr-3rcp

codec_codec2: Only process complete Codec2 frames in decoder

Author: Milan Kyselica
Date: 2026-04-08

The codec2_samples() function uses floor division (160 * datalen/6)
to compute expected output samples, but the decode loop condition
(x < datalen) iterates with ceiling behavior when datalen is not a
multiple of CODEC2_FRAME_LEN. This mismatch causes the loop to
decode one extra frame beyond what the framework bounds check
budgeted for, leading to an out-of-bounds write on the output buffer.

Change the loop condition to only process complete frames, matching
the floor-division behavior of codec2_samples(). This also prevents
an out-of-bounds read on the input side when fewer than
CODEC2_FRAME_LEN bytes remain.

Resolves: #GHSA-qf8j-jp7h-c5hx

format_ogg_speex: Add bounds check to prevent heap buffer overflow

Author: Milan Kyselica
Date: 2026-03-23

The ogg_speex_read() function copies OGG packet data via memcpy()
without validating the packet size against the destination buffer
(BUF_SIZE = 200 bytes). A crafted .spx file with an oversized OGG
audio packet causes a heap buffer overflow that corrupts the
adjacent speex_desc structure containing libogg heap pointers,
leading to a crash (SIGSEGV) on playback.

Add a bounds check for both negative and oversized values before
the memcpy, consistent with how format_ogg_vorbis bounds its reads
via ov_read().

Resolves: #GHSA-8jhw-m2hg-vp3h

acl: Add ACL support to http and ari

Author: Mike Bradeen
Date: 2026-02-27

Add uri prefix based acl support to the built in http server.
This allows an acl to be added per uri prefix (ie '/metrics'
or '/ws') to restrict access.

Add user based acl support for ARI. This adds new acl options
to the user section of ari.conf to restrict access on a per
user basis.

resolves: #1799

UserNote: A new section, type=restriction has been added to http.conf
to allow an uri prefix based acl to be configured. See
http.conf.sample for examples and more information.
The user section of ari.conf can now contain an acl configuration
to restrict users access. See ari.conf.sample for examples and more
information

build: Fix GCC discarded-qualifiers const errors.

Author: Joshua C. Colp
Date: 2026-02-12

GCC 15.2.1 pays attention to the discarding of the const
qualifier when strchr, strrchr, memchr, or memrchr are now
used. This change fixes numerous errors with this throughout
the tree. The fixes can be broken down into the following:

  1. The return value should be considered const.
  2. The value passed to strchr or strrchr can be cast as it is
    expected and allowed to be modified.
  3. The pointer passed to strchr or strrchr is not meant to be
    modified and so the contents must be duplicated.
  4. It was declared const and never should have been.

  •  
❌