これは、SECURITY-3430 の修正が適用されていない Jenkins コントローラー(すなわち、2.470 以前および LTS 2.452.3 以前)で使用するための Java エージェントです。
SECURITY-3430 の脆弱性を含むクラスの定義を変換して、悪用を防ぎます。 何らかの理由で変換が失敗した場合、Jenkins は強制的に停止されます。
この回避策は ClassLoaderProxy#fetchJar を完全にブロックするため、通常の修正とは異なり、セキュリティアドバイザリ に記載されているプラグインの影響を受ける機能とは互換性がありません。
この回避策は、ここ数年の Jenkins の最近のリリースのいくつかで正常にテストされています。
警告:この回避策の仕組み上、Jenkins のバックアップを定期的に取得し、回避策を段階的に展開することを強くお勧めします。
Jenkins コントローラープロセスを悪用から保護します:
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
指定された RemoteClassLoader$ClassLoaderProxy.class クラスファイルに変換を適用し、結果を別のファイルに書き込みます:
java -jar /path/to/security3430-workaround.jar <source file> <target file>
これを使用して、最小限に変更された remoting.jar ファイルを作成できます。
この Java エージェントの動作を変更するために、2 つの Java システムプロパティを設定できます:
io.jenkins.security.Security3430Workaround.DISABLE:
クラス変換を無効にするには、これを true に設定します。io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN:
クラス変換が失敗したときに Jenkins プロセスを停止しないようにするには、これを true に設定します。
特定の限られた状況、例えばログメッセージを注意深く監視している場合(下記参照)にのみ推奨されます。どちらも、クラスがロードされ、変換の試行が行われる前に設定する必要があります。理想的には -D コマンドラインオプションとして設定します。
ログメッセージは io.jenkins.security.Security3430Workaround ロガーを使用します。
SEVERE レベルで記録されたメッセージは、変換の失敗を示します。
接続されている Jenkins エージェントのスクリプトコンソールで次のコードを実行して、この回避策の有効性を確認します:
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
修正も回避策もない場合、次のようなメッセージが出力され、悪用が成功したことを示します:Result: [B@23edd8a0
この回避策を適用すると、AbstractMethodError がスローされ、長いスタックトレースが出力されます。
MIT ライセンスの条件に基づいてライセンス供与されます。Copyright 2024 CloudBees, Inc.