SnykでPHP Composerのセキュリティ脆弱性をテストする
DeveloperSteve Coochin
2021年5月20日
0 分で読めますPHPはウェブサイトの構築に広く使われています。ブログからeコマースまで、私たちの日常に深く浸透し、今日利用しているインターネットの大部分を支えています。2020年の主要プログラミング言語に関するWappalyzerのレポートによると、現在インターネットで使われているバックエンド言語のうち、PHPは79%のシェアを占めています。
長年、PHPライブラリを扱ううえで大きな課題のひとつとなってきたのが、パッケージ管理です。ライブラリを簡単にインストールして管理する方法はいくつかあり、PECLやCPANなどが使われてきました。特筆すべきは、2009年に登場したPEARです。ライブラリを読み込み、配布する最初期の方法のひとつとなり、その後PEAR2へと発展。やがてPHP Composerの一部となりました(PHP Composerは今年で9年目)。今回はこれを見ていきます。
PHP Composerとは何ですか?
PHP Composerは、PHPのライブラリや依存関係のインストールと更新に使用されるパッケージ管理ツールです。フレームワークやプロジェクト内でライブラリや依存関係を管理・維持する方法が評価され、急速に普及しました。コマンドラインから操作でき、オートロード機能を備えたPHPアプリケーション、ライブラリ、依存関係をプロジェクト内にインストールできます。PHP Composerは、グローバルには何もインストールしない点に注意してください。
PHP Composerのセキュリティを見てみましょう
PHP Composerを使うとアプリ開発は速くなりますが、その分、制御や可視性が一部失われます。コーディングが簡単になる一方で、安全に使えているのかという疑問も生まれます。Snykなら、数回クリックするだけでその疑問に答えられます。
実際に使われているPHP Composerのプラットフォーム実装をいくつか確認する前に、いくつかお伝えしておきたいことがあります。
これらのプラットフォームのユーザー/開発者として調査した結果は、さまざまな点で意外なものでした。安全な開発のためには、継続的な啓発と教育が欠かせないということを改めて実感しました。
以下のすべてのケースで、各コミュニティに連絡を取り、脆弱性について話し合うとともに、まだ認識されていない場合は注意喚起を行いました(すでに修正が提供されていたものも多くありました)。
Kirby
KirbyとComposerを使い始めるには、Kirby meets Composerのドキュメントにある簡単なセットアップ手順に従ってください。
ComposerはKirbyの最新バージョン(3.3.5)をインストールします。Snyk Vulnerability DBによると、このバージョンには中程度の深刻度の脆弱性が1件、低い深刻度の脆弱性が1件あります。しかし、Snyk CLIでスキャンすると、依存関係のひとつであるPHPMailerに問題が見つかります。使用されているバージョンは6.2.0で、クロスサイトスクリプティングの高深刻度の脆弱性が確認されています。
執筆時点では、PHPMailer 6.4.1でこの問題が修正されています。composer upgradeを実行して最新バージョンに更新すれば解決できます。このモジュールの履歴を確認すると、長年にわたり脆弱性が発見されていることがわかります。そのため、新たな脆弱性が見つかった際にすぐ通知を受けられるよう、Snyk Codeによる定期的なスキャンを強くおすすめします。
Joomla
Joomlaのリポジトリには、実行に必要なすべての依存関係をインストールするComposerファイルが含まれています。Snyk CLIでスキャンしたところ、2件の問題と4つの脆弱なパスが見つかりました。
ここでもPHPMailerが見つかりました。インストールされるバージョンは5.2.28です。このバージョンには不適切な入力検証の問題があり、Snykによるとバージョン6.1.6で修正されています。
また、Snykは中間者(MITM)攻撃の脆弱性も検出しました。これは`paragoine/random_compat`のバージョン1.4.3を介して読み込まれ、`joomla/session`に関連しています。中間者攻撃は電子的な盗聴を可能にするため、非常に深刻です。この種の脆弱性について詳しくは、中間者攻撃に関するブログをご覧ください。
Drupal
Drupalリポジトリの便利なガイドを使えば、最新の9.x開発ブランチですぐに環境を立ち上げられます。
インストール中に、Snyk Vulnerability Databaseで既知の問題を確認できます。ここでは、注意が必要なDrupalのバージョン履歴にある脆弱性も確認できます。次にSnyk CLIでスキャンすると、9.xは問題なしという結果でした。念のため同じスキャンをDrupal 8.xでも実行したところ、こちらも問題なしでした。よかったです!
この2つのバージョンに問題がないことを確認したところで、今もかなり使われているDrupal 7もチェックしてみましょう。そのために、Drupal 7.xのリポジトリをクローンします。
7.xをスキャンすると、Snyk CLIの結果は少し異なり、9件の脆弱性と18の脆弱なパスが見つかりました。ファイルアップロードの悪用から、DoS、リモートコード実行(RCE)、任意コード実行(ACE)まで、さまざまな問題があります。
これらの調査結果を踏まえると、Drupalの実装を安全に保つため、最低でも8.xへのアップグレードをおすすめします。
コミュニティに貢献して支援しよう
こうした広く使われているプラットフォームのテストを始めた当初、何が見つかるのかはわかりませんでした。先ほど述べたように、結果はかなり意外なものでした。本番環境でこれらのプラットフォームを使っている開発者、チーム、企業は、何が取り込まれているのかを把握していないかもしれません。このブログが、より多くのチームの安全につながれば幸いです。
とはいえ、私は一人の開発者にすぎず、これは一つのブログにすぎません。セキュリティに大きな変化をもたらすには、皆さん自身でプロジェクトをテストし、修正に貢献していただきたいと思います。こうしたコミュニティは、世界中の人々の役に立つものを作ろうとする情熱的な開発者によって運営されていることが多く、皆さんの支援を必要としています。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。


