when receiving an unexpected message type in response to a key listing or signing request (bsc#1253611, CVE-2025-47913) OBS-URL: https://build.opensuse.org/package/show/Cloud:Tools/amazon-ssm-agent?expand=0&rev=77
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
From 2de8ea5d01b38bc555bc0ea8d00fc701841c571d Mon Sep 17 00:00:00 2001
|
|
From: Nicola Murino <nicola.murino@gmail.com>
|
|
Date: Sun, 31 Aug 2025 20:07:32 +0200
|
|
Subject: [PATCH] ssh/agent: return an error for unexpected message types
|
|
|
|
Previously, receiving an unexpected message type in response to a key
|
|
listing or a signing request could cause a panic due to a failed type
|
|
assertion.
|
|
|
|
This change adds a default case to the type switch in order to detect
|
|
and explicitly handle unknown or invalid message types, returning a
|
|
descriptive error instead of crashing.
|
|
|
|
Fixes golang/go#75178
|
|
|
|
Change-Id: Icbc3432adc79fe3c56b1ff23c6724d7a6f710f3a
|
|
Reviewed-on: https://go-review.googlesource.com/c/crypto/+/700295
|
|
Reviewed-by: Roland Shoemaker <roland@golang.org>
|
|
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
|
|
Reviewed-by: Michael Pratt <mpratt@google.com>
|
|
Reviewed-by: Jakub Ciolek <jakub@ciolek.dev>
|
|
---
|
|
ssh/agent/client.go | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/ssh/agent/client.go b/ssh/agent/client.go
|
|
index 37525e1..b357e18 100644
|
|
--- a/ssh/agent/client.go
|
|
+++ b/ssh/agent/client.go
|
|
@@ -430,8 +430,9 @@ func (c *client) List() ([]*Key, error) {
|
|
return keys, nil
|
|
case *failureAgentMsg:
|
|
return nil, errors.New("agent: failed to list keys")
|
|
+ default:
|
|
+ return nil, fmt.Errorf("agent: failed to list keys, unexpected message type %T", msg)
|
|
}
|
|
- panic("unreachable")
|
|
}
|
|
|
|
// Sign has the agent sign the data using a protocol 2 key as defined
|
|
@@ -462,8 +463,9 @@ func (c *client) SignWithFlags(key ssh.PublicKey, data []byte, flags SignatureFl
|
|
return &sig, nil
|
|
case *failureAgentMsg:
|
|
return nil, errors.New("agent: failed to sign challenge")
|
|
+ default:
|
|
+ return nil, fmt.Errorf("agent: failed to sign challenge, unexpected message type %T", msg)
|
|
}
|
|
- panic("unreachable")
|
|
}
|
|
|
|
// unmarshal parses an agent message in packet, returning the parsed
|
|
--
|
|
2.51.1
|
|
|