GHSA-8h6x-h86x-75wh: High severity go/github.com/emiago/sipgo vulnerability

Published Sep 22, 2026
·
Updated

Summary

The WebSocket transport allocates a buffer from the frame payload length before validating its size, which can lead to an unauthenticated DoS.

Details

WSConnection.Read allocates a buffer from the declared WebSocket frame length before reading the payload (https://github.com/emiago/sipgo/blob/v1.4.0/sip/transportws.go#L400):

go data := make([]byte, header.Length) // header.Length is client-controlled, up to 2^63-1 (int64)

- NextFrame() reads only the frame header and never checks the length: wsutil.NewReader is created with no MaxFrameSize (0 = unlimited). ParseMaxMessageLength applies only downstream, not here. - A value above the max slice size (e.g. 2^63-1) panics make. sipgo does not recover from this panic, so it crashes the whole server process.

PoC

Tested on emiago/sipgo v1.4.0 (latest).

After a normal WebSocket handshake, send one masked text frame consisting of the header only (no payload), declaring a huge length. The allocation runs as soon as the header is read.

0x81 FIN + text opcode 0xFF MASK bit + length marker 127 (8-byte length follows) 0x7F FF FF FF FF FF FF FF declared length = 2^63-1 -> make panics (crash) <4-byte masking key> (no payload)

This crashes the server process:

panic: runtime error: makeslice: len out of range

goroutine 23 [running]: github.com/emiago/sipgo/sip.(WSConnection).Read(...) /path/to/pkg/mod/github.com/emiago/sipgo@v1.4.0/sip/transportws.go:400 +0x2df github.com/emiago/sipgo/sip.(TransportWS).readConnection(...) /path/to/pkg/mod/github.com/emiago/sipgo@v1.4.0/sip/transportws.go:194 +0x266 created by github.com/emiago/sipgo/sip.(TransportWS).initConnection in goroutine 21 /path/to/pkg/mod/github.com/emiago/sipgo@v1.4.0/sip/transportws.go:167 +0x268

Suggested Fix

Set MaxFrameSize on the wsutil.NewReader.

Impact

Unauthenticated DoS. Any service using sipgo with a WS/WSS transport can be crashed by a single frame (panic), or forced to run out of memory.

Affected Software

1 affected componentFixes available
go/github.com/emiago/sipgo<=1.4.2
1.4.3

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/emiago/sipgo to a version that resolves this vulnerability.

    Fixed in 1.4.3
  2. Configuration

    Set MaxFrameSize on wsutil.NewReader to a finite maximum so frame payload lengths are bounded before allocation.

    sipgo WebSocket transport (wsutil.NewReader) MaxFrameSize = finite maximum; not 0 (unlimited)

Event History

Sep 22, 2026
Advisory Published
via GitHub·08:34 PM
Data Sourced
via GitHub·08:34 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Who can trigger the denial of service?

Any unauthenticated client that can complete a normal WebSocket handshake with a SIPGo service using the affected WebSocket transport can trigger it. No credentials or user interaction are required.

2

What does exploitation require?

The attacker sends a masked WebSocket text-frame header declaring an extremely large payload length, without needing to send the payload itself. The server allocates based on that client-controlled length as soon as it reads the header, and an oversized value can panic the process.

3

Are size limits elsewhere in the application sufficient protection?

No. The downstream ParseMaxMessageLength setting does not protect this allocation, because the frame length is used before that validation; the WebSocket reader has no MaxFrameSize configured.

4

How can I tell whether a deployment is affected?

The issue was tested in SIPGo v1.4.0. Affected code creates a byte slice directly from the WebSocket header length in WSConnection.Read without first enforcing a frame-size limit or recovering from the resulting panic.

5

What should be done if an update cannot be applied immediately?

Restrict access to the WebSocket endpoint to trusted clients or place it behind a proxy or gateway that enforces a WebSocket frame-size limit. This reduces exposure to unauthenticated clients sending oversized frame headers.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203