Jenkins Arbitrary File Read to RCE via "Remember Me"
이 블로그 게시물에서는 Jenkins의 Local File Inclusion 취약점을 RCE로 변환하는 훌륭한 방법을 찾을 수 있습니다: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
이것은 임의의 쿠키를 조작하여 RCE를 얻는 방법에 대한 게시물의 요약입니다. 제가 직접 요약을 작성할 시간이 생길 때까지 사용됩니다:
Attack Prerequisites
Feature Requirement: "Remember me"가 활성화되어 있어야 합니다 (기본 설정).
Access Levels: 공격자는 Overall/Read 권한이 필요합니다.
Secret Access: 주요 파일에서 이진 및 텍스트 콘텐츠를 읽을 수 있는 능력.
Detailed Exploitation Process
Step 1: Data Collection
User Information Retrieval
각 사용자에 대한
$JENKINS_HOME/users/*.xml
에서 사용자 구성 및 비밀을 액세스하여 다음을 수집합니다:Username
User seed
Timestamp
Password hash
Secret Key Extraction
쿠키 서명에 사용되는 암호화 키를 추출합니다:
Secret Key:
$JENKINS_HOME/secret.key
Master Key:
$JENKINS_HOME/secrets/master.key
MAC Key File:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Step 2: Cookie Forging
Token Preparation
토큰 만료 시간 계산:
토큰을 위한 데이터 연결:
MAC Key Decryption
MAC Key 파일 복호화:
Signature Computation
HMAC SHA256 계산:
Cookie Encoding
최종 쿠키 생성:
Step 3: Code Execution
Session Authentication
CSRF 및 세션 토큰 가져오기:
/crumbIssuer/api/json
에 요청을 보내Jenkins-Crumb
를 얻습니다.응답에서
JSESSIONID
를 캡처하여 remember-me 쿠키와 함께 사용합니다.
Command Execution Request
Groovy 스크립트로 POST 요청 보내기:
Groovy 스크립트는 시스템 수준의 명령이나 Jenkins 환경 내에서 다른 작업을 실행하는 데 사용할 수 있습니다.
제공된 curl 명령 예시는 임의의 코드를 안전하게 실행하기 위해 필요한 헤더와 쿠키로 Jenkins에 요청을 보내는 방법을 보여줍니다.
Last updated