CVE-2024-45337
golang.org/x/crypto における connection.serverAuthenticate の誤用により、認証バイパスが発生する可能性がある
- 公開済み
- 2024/12/11
- 更新済み
- 2025/02/18
- CNA の割り当て
- Go
- 観察された証拠
- 2026/08/08
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N低 · 今後 30 日間
- パーセンタイル
- 87.5%
- モデルの日付
- 2026/09/21
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
# 接続の `serverAuthenticate`(`ServerConfig.PublicKeyCallback` コールバック経由)を誤って使用しているアプリケーションやライブラリは、認可バイパスの影響を受ける可能性があります。`ServerConfig.PublicKeyCallback` のドキュメントには、「この関数の呼び出しは、提示された鍵が実際に認証に使用されることを保証するものではない」と記載されています。具体的には、SSH プロトコルでは、クライアントが対応する秘密鍵の制御を証明する前に、公開鍵が受け入れ可能かどうかを問い合わせることができます。`PublicKeyCallback` は複数の鍵で呼び出される可能性があり、鍵が提示された順序から、クライアントがどの鍵で認証に成功したか(成功した場合)を推測することはできません。`PublicKeyCallback` に渡された鍵(またはそこから導出された情報)を保存し、接続確立後にそれに基づいてセキュリティ関連の判断を行う一部のアプリケーションは、誤った想定をする可能性があります。例えば、攻撃者は公開鍵 A と B を送信し、その後 A で認証する可能性があります。`PublicKeyCallback` は、最初に A、次に B の順で2回だけ呼び出されます。脆弱なアプリケーションは、攻撃者が実際には秘密鍵を制御していない鍵 B に基づいて認可判断を行う可能性があります。この API は広く誤用されているため、部分的な緩和策として、golang.org/x/[email protected] では、公開鍵による認証が成功した場合、`ServerConfig.PublicKeyCallback` に渡される最後の鍵が接続の認証に使用された鍵となるという特性を強制します。必要に応じて、`PublicKeyCallback` は同じ鍵で複数回呼び出されるようになります。なお、接続がその後 `PasswordCallback`、`KeyboardInteractiveCallback`、`NoClientAuth` などの別の方法で認証された場合、クライアントが `PublicKeyCallback` に渡された最後の鍵を制御していない可能性があることに注意してください。ユーザーは、外部状態を参照する代わりに、各種認証コールバックからの `Permissions` 戻り値の `Extensions` フィールドを使用して、認証試行に関連するデータを記録する必要があります。接続が確立されたら、認証成功試行に対応する状態は `ServerConn.Permissions` フィールドを介して取得できます。一部のサードパーティライブラリは、認証試行間で `Permissions` 型を共有することでこれを誤用していることに注意してください。サードパーティライブラリのユーザーは、関連プロジェクトのガイダンスを参照してください。
ソース
3Gitea および Forgejo に対する CVE-2024-45337 の概念実証
責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。