(cherry picked from commit 17939826efa20a97f087b3d390ec5136df350bae)

Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
Caleb Roseland
2026-04-15 23:02:45 -05:00
коммит произвёл GitHub
родитель 26f09017e1
Коммит 384635216f
4 изменённых файлов: 56 добавлений и 4 удалений

Просмотреть файл

@@ -469,6 +469,12 @@ func (wc *WebConn) readPump() {
return
}
// Reject binary frames from unauthenticated connections. See MM-68222.
if msgType != websocket.TextMessage && !wc.IsAuthenticated() {
wc.logSocketErr("websocket.UnauthBinary", errors.New("binary frames require authentication"))
return
}
var decoder interface {
Decode(v any) error
}

Просмотреть файл

@@ -10,6 +10,7 @@ import (
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/gorilla/websocket"
"github.com/stretchr/testify/assert"
@@ -241,3 +242,48 @@ func TestWebConnDrainDeadQueue(t *testing.T) {
t.Run("Overwritten First", func(t *testing.T) { run(int64(128), deadQueueSize+10) })
})
}
func TestWebConnRejectBinaryFrameUnauthenticated(t *testing.T) {
th := Setup(t)
readPumpDone := make(chan struct{})
upgradeErrCh := make(chan error, 1)
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
upgrader := &websocket.Upgrader{}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
upgradeErrCh <- err
return
}
upgradeErrCh <- nil
wc := th.Service.NewWebConn(&WebConnConfig{
WebSocket: conn,
}, th.Suite, &hookRunner{})
require.False(t, wc.IsAuthenticated())
go func() {
wc.readPump()
close(readPumpDone)
}()
}))
defer s.Close()
d := websocket.Dialer{}
clientConn, _, err := d.Dial("ws://"+s.Listener.Addr().String()+"/ws", nil)
require.NoError(t, err)
defer clientConn.Close()
require.NoError(t, <-upgradeErrCh)
err = clientConn.WriteMessage(websocket.BinaryMessage, []byte{0x01, 0x02, 0x03})
require.NoError(t, err)
select {
case <-readPumpDone:
case <-time.After(5 * time.Second):
require.Fail(t, "readPump did not exit after receiving binary frame")
}
}

Просмотреть файл

@@ -257,5 +257,5 @@ replace github.com/ledongthuc/pdf => github.com/ledongthuc/pdf v0.0.0-2024020113
// version always. Tablewriter has made breaking changes to its latest release.
replace github.com/olekukonko/tablewriter => github.com/olekukonko/tablewriter v0.0.5
// See MM-66167 for more details.
replace github.com/vmihailenco/msgpack/v5 => github.com/mattermost/msgpack/v5 v5.0.0-20260120151306-2f9c67d7e57f
// See MM-66167, MM-68222 for more details.
replace github.com/vmihailenco/msgpack/v5 => github.com/mattermost/msgpack/v5 v5.0.0-20260408165622-cadfad56a815

Просмотреть файл

@@ -423,8 +423,8 @@ github.com/mattermost/mattermost/server/public v0.1.12 h1:qlIU/llY0FWdHWQPtvncdd
github.com/mattermost/mattermost/server/public v0.1.12/go.mod h1:3RJZfl7sMedX6ihX+JMFOIAzCHhd0WQnuez+UFQS80k=
github.com/mattermost/morph v1.1.0 h1:Q9vrJbeM3s2jfweGheq12EFIzdNp9a/6IovcbvOQ6Cw=
github.com/mattermost/morph v1.1.0/go.mod h1:gD+EaqX2UMyyuzmF4PFh4r33XneQ8Nzi+0E8nXjMa3A=
github.com/mattermost/msgpack/v5 v5.0.0-20260120151306-2f9c67d7e57f h1:tAXeRJSWo6EK7wDq1TcxMHIxHRyjrE62ihvsigdg4Q0=
github.com/mattermost/msgpack/v5 v5.0.0-20260120151306-2f9c67d7e57f/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
github.com/mattermost/msgpack/v5 v5.0.0-20260408165622-cadfad56a815 h1:uOi89NvrFmDngqMKjlLDxi+MNzJQLA3TqcU2p8czv34=
github.com/mattermost/msgpack/v5 v5.0.0-20260408165622-cadfad56a815/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0 h1:G9tL6JXRBMzjuD1kkBtcnd42kUiT6QDwxfFYu7adM6o=
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0/go.mod h1:nV5bfVpT//+B1RPD2JvRnxbkLmJEYXmRaaVl15fsXjs=
github.com/mattermost/squirrel v0.5.0 h1:81QPS0aA+inQbpA7Pzmv6O9sWwB6VaBh/VYw3oJf8ZY=