概要

Redmineの文書管理プラグイン、dmsfに脆弱性が発表されたので、その対応を行います。

脆弱性概要

https://jvndb.jvn.jp/ja/contents/2024/JVNDB-2024-000055.html

当該プラグインを有効にしている場合、Redmineにログインしているユーザーによって、Redmineの実行権限で可能な範囲で、サーバー上の任意のファイルを取得されたり削除されたりする可能性があります。

脆弱性対象

バージョン3.1.4より前のバージョン

筆者環境

  • Ubuntu 22.04
  • Apache2.4
  • MySQL 8.0.3
  • Redmine 5.1
  • dmsf 3.1.3

注意事項

脆弱性に対応したバージョンは、2024年5月現在、Redmine 4.2には対応していません。

筆者のようにRedmine 4.2を単独ユーザーで運用していない限りは、以下のオプションを強く推奨します。

  • Redmine及びOS全体のバージョンアップを図る。
  • 本プラグインを無効化する。

さっくりとはならない手順

  1. DBのバックアップ
  2. Webサービス停止
  3. 既存プラグインディレクトリの退避
  4. git cloneによるプラグイン入手
  5. DBマイグレーション
  6. Webサービス起動
  7. プラグインアップグレード確認

DBのバックアップを行います。

  • 作業用ディレクトリに移動
cd /hoge && pwd

任意のバックアップディレクトリを指定します。

  • DBのバックアップ取得
 mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
  1. -u ユーザ オプション db名です。自分の環境に合わせます。
  2. パスワードはDBのユーザパスワードです。

Apacheの停止を行います。

※ 利用者への注意喚起も行ってください。

  • 停止前のステータス確認
systemctl status apache2.service

active (running)を確認します。

  • Apache停止
sudo systemctl stop apache2.service
  • 停止後のステータス確認
systemctl status apache2.service

inactive (dead)を確認します。

既存プラグインを退避します。

  • redmineプラグインディレクトリに移動
cd /redmine/root/directory/plugins && pwd

ディレクトリは自分の環境に合わせます。

  • dmsfプラグイン退避
sudo mv redmine_dmsf /path/to/backup/directory/redmine_dmsf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • dmsfプラグイン退避確認
ls -ld /path/to/backup/directory/redmine_dmsf.$(date +%Y%m%d)

ディレクトリがあることを確認します。

プラグインをgit cloneします。

  • git clone
sudo -u www-data git clone -b v3.1.4 https://github.com/danmunn/redmine_dmsf

脆弱性に対応したv3.1.4を指定します。

  • clone確認
ls -ld redmine_dmsf

ディレクトリがあることを確認します。

プラグインのアップグレードを行います。

  • Redmineのルートディレクトリに移動
cd /redmine/root/directory && pwd

自分の環境に合わせます。

  • bundle install
sudo -u www-data bundle install
  • DBマイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再開します。

  • 再開前のステータス確認
systemctl status apache2.service

inactive (dead)を確認します。

  • Apache再開
sudo systemctl start apache2.service
  • 停止後のステータス確認
systemctl status apache2.service

active (running)を確認します。

バージョンアップを確認します。

  1. Redmineに管理者権限でログインします。
  2. 管理>プラグインに進みます。
  3. DMSFプラグインが3.1.4になっていることを確認します。
  4. 既存の動作(チケットの発行/編集など)に問題が無いことを確認します。

おまけ:切り戻し手順

このプラグイン、アップグレードの失敗や手順ミスで軽くRedmine全体が機能不全に陥ります。そのため、切り戻し手順を記しておきます。

通常の切り戻し

ディレクトリ移動

  • Redmineのルートディレクトリに移動
cd /redmine/root/directory && pwd

自分の環境に合わせます。

プラグインアンインストール

sudo -u www-data rake redmine:plugins:migrate NAME=redmine_dmsf VERSION=0 RAILS_ENV=production

ディレクトリ削除

sudo rm plugins/redmine_dmsf -Rf

Webサービス再起動

sudo systemctl restart apache2.service

それでもダメだった切り戻し(DBリストア)

cd /hoge
# mysqldumpを行ったディレクトリ

mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
# パスワードはredmineインストール時に設定したDBユーザのものです

sudo systemctl restart apache2.service