TL;DR
go-webntp および go-nginx-oauth2-adapter に脆弱性が見つかりました。 脆弱性を修正した以下のバージョンをリリースしました。 現在使用している方は最新バージョンへのアップデートをオススメします。
脆弱性の概要
GitHub経由で脆弱性報告してみた では、「報告者」という立場でしたが、 今回は「報告を受けるメンテナー」という形で「プライベート脆弱性レポート機能」を利用することになりました。 報告者の @EQSTLab ありがとうございます。
go-webntp
HTTP/WebSocketで時刻同期するWebNTPを書いた で紹介した、WebSocketのサーバーです。
WebSocketのメッセージを全部メモリー上に展開して解析する処理が入っているのですが、そこにサイズ制限が漏れていました。 そのため、攻撃者はデカいデータを送りつけることでメモリーを圧迫し、最終的にはOOMでサービスを止められます。
v0.0.3 では読み込みデータのサイズ制限を設けることでこの脆弱性を修正しました。
go-nginx-oauth2-adapter
nginx-omniauth-adapterのGolangポート作った で紹介した、nginxにOIDCで認証を行う機能をつけるためのサーバーです。
go-nginx-oauth2-adapter では、セッションの署名に使用する秘密鍵を設定する必要があります。 しかし、省略しても警告を吐くだけで、その場合は固定の文字列をキーとして使っていました。 固定の文字列はソースコードに埋め込まれているので、攻撃者は簡単にセッションを偽造することが可能です。
v0.4.8 では、秘密鍵未設定時に警告ではなく起動に失敗するよう修正しました。 警告をちゃんと読んで秘密鍵をちゃんと設定していたユーザーには影響はないはずです。
まとめ
GitHub経由で脆弱性報告を受けたので、修正版をリリースしました。
go-webntp または go-nginx-oauth2-adapter を利用している方はアップデートをお願いします。
うさぎが記事をぴょんと読む
脆弱性の話を明るく綴る
サイズを守って鍵も確認
修正版を知らせて安心
GitHubの報告、月まで届け!by CodeRabbit
参考
- HTTP/WebSocketで時刻同期するWebNTPを書いた
- go-webntp
- GHSA-chpr-3j48-r4vg: Unbounded WebSocket Message Read Causes Remote Memory Exhaustion DoS in go-webntp Server
- nginx-omniauth-adapterのGolangポート作った
- go-nginx-oauth2-adapter
- GHSA-j2f5-qx44-xggq: Predictable Default Session Signing Key Leads to Authentication Bypass
- GitHub経由で脆弱性報告してみた