Jenkins Arbitrary File Read to RCE via "Remember Me"
このブログ投稿では、Jenkinsのローカルファイルインクルージョン脆弱性をRCEに変換する素晴らしい方法を見つけることができます: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
これは、任意のクッキーを作成することがRCEを取得するために悪用される投稿の部分のAIによって作成された要約です。自分で要約を作成する時間ができるまでの間のものです:
攻撃の前提条件
機能要件: "Remember me"が有効である必要があります(デフォルト設定)。
アクセスレベル: 攻撃者は全体/読み取り権限が必要です。
秘密アクセス: 重要なファイルからバイナリおよびテキストコンテンツを読み取る能力。
詳細な悪用プロセス
ステップ1: データ収集
ユーザー情報の取得
各ユーザーのために
$JENKINS_HOME/users/*.xml
からユーザー設定と秘密をアクセスして収集します:ユーザー名
ユーザーシード
タイムスタンプ
パスワードハッシュ
秘密鍵の抽出
クッキーの署名に使用される暗号鍵を抽出します:
秘密鍵:
$JENKINS_HOME/secret.key
マスターキー:
$JENKINS_HOME/secrets/master.key
MACキーのファイル:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
ステップ2: クッキーの偽造
トークンの準備
トークンの有効期限を計算:
トークンのためのデータを連結:
MACキーの復号化
MACキーのファイルを復号化:
署名の計算
HMAC SHA256を計算:
クッキーのエンコーディング
最終クッキーを生成:
ステップ3: コード実行
セッション認証
CSRFおよびセッショントークンを取得:
/crumbIssuer/api/json
にリクエストを送信してJenkins-Crumb
を取得します。応答から
JSESSIONID
をキャプチャし、remember-meクッキーと一緒に使用します。
コマンド実行リクエスト
Groovyスクリプトを使用してPOSTリクエストを送信:
Groovyスクリプトは、Jenkins環境内でシステムレベルのコマンドや他の操作を実行するために使用できます。
提供されたcurlコマンドの例は、必要なヘッダーとクッキーを使用してJenkinsにリクエストを送信し、任意のコードを安全に実行する方法を示しています。
Last updated