RubyのデフォルトgemによるAmazon Inspector誤検知とその対処方法

2025-01-07
内田 海成
#
#
#

概要

Amazon InspectorでRailsアプリケーションの脆弱性スキャンを実行した際、Rubyのデフォルトgemが原因で誤検知が発生するケースについて解説します。具体的には、CGI.escape_htmlの脆弱性(CVE-2021-41816)を例に、問題の特定から解決までのプロセスを説明します。

問題の発見

Amazon Inspectorにより、CGIライブラリにCriticalな脆弱性(CVE-2021-41816)が検知されました。この脆弱性は、Ruby 2.7.5以前および3.0.3以前の3.0.xバージョンに含まれるCGI.escape_htmlに存在する問題で、CGIバージョン0.3.1で修正されています。

初期の対応と課題

問題解決のため、まずGemfileで安全なバージョンを指定しました:


gem "cgi", ">= 0.3.1"

しかし、Dockerイメージを更新後も脆弱性の検知は継続していました。コンテナ内での確認では:


gem list | grep cgi
cgi (0.4.1, default: 0.2.2)


新しいバージョンがインストールされているにもかかわらず、脆弱性が検知され続ける状況が発生しました。

根本原因の特定

調査の結果、以下の点が判明しました:

1. Inspectorが検知しているファイルは /usr/local/lib/ruby/gems/3.0.0/specifications/default/cgi-0.2.2.gemspec

2. 異なるディレクトリに2つのバージョンのCGIファイルが存在する:

- 新規インストール: /usr/local/lib/ruby/gems/3.0.0/specifications/cgi-0.4.1.gemspec

- デフォルト: /usr/local/lib/ruby/gems/3.0.0/specifications/default/cgi-0.2.2.gemspec ←こちらが検知されてしまっているのが原因

解決策

Dockerfileに以下の設定を追加し、デフォルトのCGI関連ファイルを削除することで問題を解決しました:


RUN rm -r /usr/local/lib/ruby/gems/3.0.0/specifications/default/cgi-0.2.2.gemspec \\
    /usr/local/lib/ruby/gems/3.0.0/gems/cgi-0.2.2 && \\
    gem uninstall cgi -v 0.2.2


恒久的な対応策の検討

今回の事例では、特定のgemファイルを削除することで問題を解決しましたが、より包括的な対策として、デフォルトgemを全て削除する方法を検討していきたいと思います。

デフォルトgem削除のメリット

  1. 脆弱性スキャナーの誤検知を防止できる
  2. 使用するgemのバージョンを完全にコントロールできる
  3. 不要なgemを含まないことでイメージサイズを削減できる
  4. セキュリティ管理がより明確になる

株式会社Grandreamでは、フルリモートであなたのスキルを活かし、活躍できるエンジニアを募集しております。 詳しくは採用ページをご確認いただき、お気軽にお問い合わせください。

株式会社グランドリームでは、AWSを駆使した開発からUI/UXデザインまで、Webアプリケーションに関するすべての要望に応えます。
まずは一度お気軽にご相談ください。

お問い合わせはこちら