ghrc.ioが悪意あるサイトの疑い
(bmitch.net)- 単純なタイプミスである ghcr.io と ghrc.io の取り違えが、深刻なセキュリティ脅威を引き起こす
- ghrc.io は一見すると標準的な nginx サーバーのように見えるが、内部では OCI API を模倣する挙動 が確認されている
- このサイトは www-authenticate ヘッダー を通じて、コンテナクライアントに 機密性の高い認証情報 を送らせようと誘導する
- docker login などで誤って認証情報を入力したり、レジストリを間違えて使用した場合、認証情報の漏えい が発生する可能性がある
- 誤ったサーバーにログインしてしまった場合は、パスワード変更、PAT の失効、GitHub アカウントの不審な活動の確認 が必要
概要
単純なタイプミスによって頻繁に起こり得る ghcr.io と ghrc.io の混同が、非常に 危険なセキュリティ問題 を引き起こしている事例である。多くの開発者やチームが利用する GitHub Container Registry (ghcr.io) のタイプミス版である ghrc.io で、認証情報の窃取の試み が確認された。
ghcr.io とは何か
- ghcr.io は コンテナイメージおよび OCI アーティファクト のための OCI 互換レジストリ
- GitHub の一部であり、多数のオープンソースプロジェクトで 人気のあるレジストリ として使われている
ghrc.io: 表面上の見え方
- ghrc.io にアクセスすると、単なる nginx のデフォルト画面 が表示される
- 典型的な 404 エラーなど、基本的な挙動 は一般的な nginx サーバーと同じ
悪意ある挙動の正体
- 核心的な問題は、
/v2/プレフィックス配下の OCI API 呼び出し時 に現れる - この経路にアクセスすると、
www-authenticateヘッダーと 401 応答により、公式コンテナレジストリと非常によく似た挙動 を示す www-authenticate: Bearer realm="https://ghrc.io/token"ヘッダーが存在する- このヘッダーのため、Docker、containerd、podman、Kubernetes など のクライアントが、ユーザー認証情報を
https://ghrc.io/tokenに 自動送信しようとする - nginx のデフォルト設定にはこのヘッダーは存在しないため、明らかに意図的に構成 されたもの
危険性: 認証情報窃取のシナリオ
- このパターンは タイポスクワッティング (typo-squatting) を利用した認証情報窃取攻撃 と判断される
- 危険が生じるのは、ユーザークライアントが ghrc.io 用の認証情報を入力または保存 している場合に限られる
- 実際に認証情報が露出する可能性のある状況の例
docker login ghrc.ioを実行した場合- GitHub Action 内で
docker/login-actionを使用し、レジストリに ghrc.io を指定した場合 - Kubernetes シークレットに ghrc.io 用のレジストリ認証情報を保存し、イメージの pull を試みた場合
- 単に ghrc.io に対してイメージの push/pull を試みるだけでは、認証情報は露出しない(匿名トークンを試行した後にエラーを返す)
対応策
- ghrc.io に 誤ってログイン したことがあるなら、直ちにパスワードを変更し、使用した PAT (Personal Access Token) を失効させる必要がある
- GitHub アカウントで 不審なログインや悪意ある活動 がないか必ず確認すべき
- 攻撃者はこれを悪用して ghcr.io 上のリポジトリに 悪意あるイメージを追加 したり、アカウントへのアクセス権を取得したりする可能性がある
結論
- ghcr.io に似たアドレスを使う フィッシングサイト に注意が必要
- 認証情報、トークン、パスワードなど セキュリティ情報の管理 について、より厳格な方針が求められる
まだコメントはありません。