log4net の開発休止宣言に伴い NLog に移行

追記 (2021-12-14) 公式 Web サイト上で再度確認したところ、現在は log4net の開発が再開されており、NuGet に公開されているパッケージでも脆弱性等の対応を含めたバージョンアップが継続的に行われているようです。

Cube シリーズではログ出力のために log4net と言うライブラリを利用していますが、この log4net が 2020 年 4 月 1 日に Web サイト上で開発休止宣言を行いました。

As of April 1, 2020 Log4Net is a dormant project of Apache Logging Services. The dormant status means the project has been classified as inactive since it has had no recent development activity and there are no active volunteers to perform code reviews, commit code, or perform releases. Although it is possible volunteers might choose to participate in the future, it is best to assume there will be not future development or releases.

Apache log4net

log4net に関しては、現在 CVE-2018-1285 (LOG4NET-575) と言う脆弱性が報告されています。この脆弱性は、リポジトリ上では既に修正されており 2.1.0 で適用される予定となっていたのですが、前述した開発休止宣言により実際に公式版がリリースされるかどうか危うい状況となりました。

そこで、CubePDFCubeICE などの Cube シリーズでは、別のログ出力用ライブラリである NLog に移行する事にしました。幸い、ログ出力処理に関しては Cube.Core で定義している独自のラッパー関数を通じて log4net の API にアクセスしており、また log4net と NLog の API 体系が似ていた事もあってコード自体の修正は 1 行で終わりました。

- private static log4net.ILog GetCore(Type type) => log4net.LogManager.GetLogger(type);
+ private static NLog.Logger GetCore(Type type) => NLog.LogManager.GetLogger(type.FullName);

該当ライブラリの修正版については、既に公開済みとなっています(Cube.Core - NuGet)。今後、各種ソフトウェアに対して修正版のライブラリに差し替えたものを順次リリースしていく予定です。

尚、それまでの暫定的な対処方法ですが、CVE-2018-1285 は log4net の設定ファイル(XML ファイル)に対して細工をする事でユーザの意図せぬ動作を引き起こす脆弱性のようです。Cube シリーズは、アプリケーション構成ファイルから log4net の設定を読み込む形を採用しています。アプリケーション構成ファイルとは、ソフトウェアのインストールディレクトリに存在する exe.config ファイルの事で、例えば cubepdf.exe の場合、cubepdf.exe.config となります。そのため、該当の exe.config ファイルを削除して設定の読み込み処理自体を発生させない事で回避できると予想しています(実行ファイル(exe)自体を削除しないように注意して下さい)。

Cube シリーズがインストールされる場所はユーザーアカウント制御 (UAC) が有効となっているので exe.config ファイル(XML ファイル)がユーザの知らない内に差し替えられる危険性は比較的低いとは思いますが、気になる方は前述した方法で回避して頂くようお願いします。