Grandream

Grandream

2 min read

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

概要

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

__wf_reserved_inherit

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

Grandream

株式会社グランドリーム

AI・システム開発のプロフェッショナルチームです。AIエージェント・業務自動化・Webシステム開発などを手がけています。

Grandream の技術力についてご相談ください

記事の内容についての質問・AI活用・システム開発のご相談をお気軽に。

無料で相談する